bonjour !
dans une liste avec sous totaux, pour supprimer toutes les=20
lignes concernant les plages des cellules impliqu=E9es dans=20
les sous totaux =E9gaux =E0 z=E9ro, je me proposai de d=E9finir=20
diverses variables puis d'adapter ceci =E0 des macros que=20
l'on m'a donn=E9es ici
=E7a me donne ceci:
Function zoneST(x) As Range
' variable f qui indique la plage concern=E9e par la=20
formule sous.total
Dim f As String
f =3D Range(x).Formula
'trouver les lignes de la plage en question
Set zoneST =3D Range(Mid(f, InStr(f, ",") + 1, Len(f) -=20
InStr(f, ",") - 1))
End Function
Sub efface()
'variable r d=E9terminant la plage de balayage
Dim r As Long
' variable s d=E9terminant la cellule trait=E9e dans la=20
colonne G=20
Dim s As Range
s =3D Cells(r, 7)
Application.ScreenUpdating =3D False
On Error Resume Next
'balaye les cellules de la plage et supprime les lignes
'd=E9finies par la fonction zoneST si la valeur cellule de=20
la colonne G trouv=E9e est =E9gale =E0 z=E9ro
For r =3D Range("G:G").Find("*", [G1], , , xlByRows,=20
xlPrevious).Row To 1 Step -1
If Cells(r, 7) =3D 0 Then _
zoneST(s).EntireRow.Delete
Next r
End Sub
or =E7a ne marche pas et je ne pige pas pourquoi (je d=E9bute=20
il est vrai..
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
gaston
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 ?
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 ?
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
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" a écrit 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..
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" <anonymous@discussions.microsoft.com> a écrit dans le message de
news:1ad0b01c41efc$394b8920$a501280a@phx.gbl...
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..
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" a écrit 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..
Boursicot
Bonsoir,
Voilà la macro qui doit faire le travail que tu souhaites
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.
Bonsoir,
Voilà la macro qui doit faire le travail que tu souhaites
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)
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
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
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
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" a écrit 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..
.
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
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
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" <anonymous@discussions.microsoft.com> a écrit
dans le message de
news:1ad0b01c41efc$394b8920$a501280a@phx.gbl...
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..
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
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
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" a écrit 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..