Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

je me perds dans les variables !

4 réponses
Avatar
gaston
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..

4 réponses

Avatar
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 ?
Avatar
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..
Avatar
Boursicot
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.
Avatar
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

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..


.