je me perds dans les variables !

Le
gaston
bonjour !
dans une liste avec sous totaux, pour supprimer toutes les
lignes concernant les plages des cellules impliques dans
les sous totaux gaux zro, je me proposai de dfinir
diverses variables puis d'adapter ceci des macros que
l'on m'a donnes ici
a me donne ceci:
Function zoneST(x) As Range
' variable f qui indique la plage concerne par la
formule sous.total
Dim f As String
f = Range(x).Formula
'trouver les lignes de la plage en question
Set zoneST = Range(Mid(f, InStr(f, ",") + 1, Len(f) -
InStr(f, ",") - 1))
End Function

Sub efface()
'variable r dterminant la plage de balayage
Dim r As Long
' variable s dterminant la cellule traite dans la
colonne G
Dim s As Range
s = Cells(r, 7)
Application.ScreenUpdating = False
On Error Resume Next
'balaye les cellules de la plage et supprime les lignes
'dfinies par la fonction zoneST si la valeur cellule de
la colonne G trouve est gale zro
For r = Range("G:G").Find("*", [G1], , , xlByRows,
xlPrevious).Row To 1 Step -1
If Cells(r, 7) = 0 Then _
zoneST(s).EntireRow.Delete
Next r
End Sub

or a ne marche pas et je ne pige pas pourquoi (je dbute
il est vrai..
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
gaston
Le #1282430
j'ai essayé autre chose mais ça marche toujours pas...
Function zoneST(x) As Range
' définir la variable qui indique la plage concernée par
la formule sous.total
Dim f As String
f = Range(x).Formula
' extraire la plage en question
Set zoneST = Range(Mid(f, InStr(f, ",") + 1, Len(f) -
InStr(f, ",") - 1))

End Function

Sub efface()
Dim r As Long

Application.ScreenUpdating = False
On Error Resume Next
'balaye les cellules de la plage
For r = Range("G:G").Find("*", [G1], , , xlByRows,
xlPrevious).Row To 1 Step -1
If Cells(r, 7) = 0 Then _
zoneST("Gr").EntireRow.Delete

Next r
End Sub

je crois que ça coince au niveau de zoneST("Gr") où r
devrait renvoyer un numero de ligne...et ne le fait pas.
j'ai essayé en pas à pas: tant que le contenu des cellules
de la colonne G n'est pas égal à 0, r renvoi le numero de
ligne, et dès que le contenu de la cellule en G est égal à
0, x renvoie "Gr" zoneST renvoie Nothing (et pour
cause !) f renvoie "" donc c'est cette variable x qui
déconne ! mais comment résoudre ça ?
Jean-François Aubert
Le #1279225
Salut Gaston,

et sans fonction, cela pourrait-il joue ?

Sub yy_dessus() ' sous total dessus les données
Dim f As String, r, cnt
For r = Range("G:G"). _
Find("*", [G1], , , xlByRows, xlPrevious).Row To 1 Step -1
f = Cells(r, 7).Formula
If Cells(r, 7) = 0 And f Like "=SUBTOTAL*" Then
'trouver les lignes de la plage en question
cnt = Range(Mid(f, InStr(f, ",") + 1, Len(f) - InStr(f, ",") - 1)).Count
Range(Mid(f, InStr(f, ",") + 1, Len(f) - InStr(f, ",") - 1)). _
Offset(-1, 0).Resize(cnt + 1, 1).EntireRow.Delete
End If
Next r
End Sub

'************* ou ******************

Sub yy_dessous() ' sous total sous les données
Dim f As String, r, cnt
For r = Range("G:G"). _
Find("*", [G1], , , xlByRows, xlPrevious).Row To 1 Step -1
If Cells(r, 7) = 0 Then
f = Cells(r, 7).Formula
'trouver les lignes de la plage en question
cnt = Range(Mid(f, InStr(f, ",") + 1, Len(f) - InStr(f, ",") - 1)).Count
Range(Mid(f, InStr(f, ",") + 1, Len(f) - InStr(f, ",") - 1)). _
Resize(cnt + 1, 1).EntireRow.Delete
End If
Next r
End Sub


--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"gaston" news:1ad0b01c41efc$394b8920$
bonjour !
dans une liste avec sous totaux, pour supprimer toutes les
lignes concernant les plages des cellules impliquées dans
les sous totaux égaux à zéro, je me proposai de définir
diverses variables puis d'adapter ceci à des macros que
l'on m'a données ici
ça me donne ceci:
Function zoneST(x) As Range
' variable f qui indique la plage concernée par la
formule sous.total
Dim f As String
f = Range(x).Formula
'trouver les lignes de la plage en question
Set zoneST = Range(Mid(f, InStr(f, ",") + 1, Len(f) -
InStr(f, ",") - 1))
End Function

Sub efface()
'variable r déterminant la plage de balayage
Dim r As Long
' variable s déterminant la cellule traitée dans la
colonne G
Dim s As Range
s = Cells(r, 7)
Application.ScreenUpdating = False
On Error Resume Next
'balaye les cellules de la plage et supprime les lignes
'définies par la fonction zoneST si la valeur cellule de
la colonne G trouvée est égale à zéro
For r = Range("G:G").Find("*", [G1], , , xlByRows,
xlPrevious).Row To 1 Step -1
If Cells(r, 7) = 0 Then _
zoneST(s).EntireRow.Delete
Next r
End Sub

or ça ne marche pas et je ne pige pas pourquoi (je débute
il est vrai..
Boursicot
Le #1279224
Bonsoir,

Voilà la macro qui doit faire le travail que tu souhaites

Sub DetruireLigne()

Range("B7", Range("b7").End(xlDown).Offset(0, 4).Address).Select

Premiereligne = Selection.Row
DerniereLigne = Premiereligne + Selection.Rows.Count - 1

For r = DerniereLigne To Premiereligne Step -1
If Cells(r, 3).Value = 0 Then
On Error Resume Next
Range(Cells(r, 3), Cells(r,
3).DirectPrecedents.Address).EntireRow.Delete
End If

Next r


Range("a1").Select

End Sub


A priori ça marche j'ai testé.

Range(Cells(r, 3), Cells(r, 3).DirectPrecedents.Address).EntireRow.Delete
selectionne et detruit toutes les lignes dépendantes de la cellule (r,3)

Bon courage.
gaston
Le #1240704
merci à tous !
pour ceux que cela intéresse, voici ma solution définitive:

Function zoneST(x) As Range
' définit la variable qui indique la plage concernée par
la formule sous.total
Dim f As String
f = Range(x).Formula
' extraire la plage en question
Set zoneST = Range(Mid(f, InStr(f, ",") + 1, Len(f) -
InStr(f, ",") - 1))

End Function

Sub efface()
Dim r As Long


Application.ScreenUpdating = False
On Error Resume Next
'balaye les cellules de la plage
For r = Range("G:G").Find("*", [G1], , , xlByRows,
xlPrevious).Row To 1 Step -1
If Cells(r, 7) = 0 Then _
zoneST("G" & r).EntireRow.Delete

Next r
Dim s As Long
Application.ScreenUpdating = False
On Error Resume Next
'les lignes sous totaux étant à present en erreur puisque
' les lignes s'y rapportant ont été effacées, il faut les
'effacer
For s = Range("G:G").Find("*", [G1], , , xlByRows,
xlPrevious).Row To 1 Step -1
If Cells(s, 7) = "#REF!" Then _
Rows(s).Delete
Next s
End Sub
-----Message d'origine-----
Salut Gaston,

et sans fonction, cela pourrait-il joue ?

Sub yy_dessus() ' sous total dessus les données
Dim f As String, r, cnt
For r = Range("G:G"). _
Find("*", [G1], , , xlByRows, xlPrevious).Row To 1
Step -1

f = Cells(r, 7).Formula
If Cells(r, 7) = 0 And f Like "=SUBTOTAL*" Then
'trouver les lignes de la plage en question
cnt = Range(Mid(f, InStr(f, ",") + 1, Len(f) - InStr
(f, ",") - 1)).Count

Range(Mid(f, InStr(f, ",") + 1, Len(f) - InStr
(f, ",") - 1)). _

Offset(-1, 0).Resize(cnt + 1, 1).EntireRow.Delete
End If
Next r
End Sub

'************* ou ******************

Sub yy_dessous() ' sous total sous les données
Dim f As String, r, cnt
For r = Range("G:G"). _
Find("*", [G1], , , xlByRows, xlPrevious).Row To 1
Step -1

If Cells(r, 7) = 0 Then
f = Cells(r, 7).Formula
'trouver les lignes de la plage en question
cnt = Range(Mid(f, InStr(f, ",") + 1, Len(f) -
InStr(f, ",") - 1)).Count

Range(Mid(f, InStr(f, ",") + 1, Len(f) - InStr
(f, ",") - 1)). _

Resize(cnt + 1, 1).EntireRow.Delete
End If
Next r
End Sub


--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"gaston" dans le message de

news:1ad0b01c41efc$394b8920$
bonjour !
dans une liste avec sous totaux, pour supprimer toutes les
lignes concernant les plages des cellules impliquées dans
les sous totaux égaux à zéro, je me proposai de définir
diverses variables puis d'adapter ceci à des macros que
l'on m'a données ici
ça me donne ceci:
Function zoneST(x) As Range
' variable f qui indique la plage concernée par la
formule sous.total
Dim f As String
f = Range(x).Formula
'trouver les lignes de la plage en question
Set zoneST = Range(Mid(f, InStr(f, ",") + 1, Len(f) -
InStr(f, ",") - 1))
End Function

Sub efface()
'variable r déterminant la plage de balayage
Dim r As Long
' variable s déterminant la cellule traitée dans la
colonne G
Dim s As Range
s = Cells(r, 7)
Application.ScreenUpdating = False
On Error Resume Next
'balaye les cellules de la plage et supprime les lignes
'définies par la fonction zoneST si la valeur cellule de
la colonne G trouvée est égale à zéro
For r = Range("G:G").Find("*", [G1], , , xlByRows,
xlPrevious).Row To 1 Step -1
If Cells(r, 7) = 0 Then _
zoneST(s).EntireRow.Delete
Next r
End Sub

or ça ne marche pas et je ne pige pas pourquoi (je débute
il est vrai..


.



Publicité
Poster une réponse
Anonyme