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

suppression lignes

15 réponses
Avatar
pierre
Bonjour

j'aimerais supprimer Des lignes en fonction de deux valeurs touvées sur une
ligne.
En colonne B la reference du produit Refx01 et en Col E et H des valeurs.
Si E=stock et H=plein alors je supprime toutes les lignes contenant en B la
réference du produit.
J'utilise If Cells(l, "E").Value = "stock" _
And Cells(l, "H").Value = "plein" Then Cells(l, 1).EntireRow.Delete
, cela fonctionne que pour une ligne.

merci pour votre aide
Pierre

10 réponses

1 2
Avatar
isabelle
bonjour Pierre,

est ce que tu as commencé la boucle par le bas et remonter ?

For i = 100 to 1 Step - 1

--
isabelle

Le 2011-04-27 18:55, pierre a écrit :
Bonjour

j'aimerais supprimer Des lignes en fonction de deux valeurs touvées sur une
ligne.
En colonne B la reference du produit Refx01 et en Col E et H des valeurs.
Si E=stock et H=plein alors je supprime toutes les lignes contenant en B la
réference du produit.
J'utilise If Cells(l, "E").Value = "stock" _
And Cells(l, "H").Value = "plein" Then Cells(l, 1).EntireRow.Delete
, cela fonctionne que pour une ligne.

merci pour votre aide
Pierre


Avatar
michel ou sam
Bonjour Pierre,
si je comprends bien , si tu as une ligne quelconque qui a en colonne E
"stock" et en colonne H "plein", il faut rechercher et supprimer toutes les
lignes qui ont la même référence que cette ligne (référence que l'on trouve
en colonne B).
Est ce bien cela ?
Michel

"pierre" a écrit dans le message de news:
4db89eef$0$14692$
Bonjour

j'aimerais supprimer Des lignes en fonction de deux valeurs touvées sur
une ligne.
En colonne B la reference du produit Refx01 et en Col E et H des valeurs.
Si E=stock et H=plein alors je supprime toutes les lignes contenant en B
la réference du produit.
J'utilise If Cells(l, "E").Value = "stock" _
And Cells(l, "H").Value = "plein" Then Cells(l, 1).EntireRow.Delete
, cela fonctionne que pour une ligne.

merci pour votre aide
Pierre


Avatar
michel ou sam
Bonjour,
voilà ce que cela pourrait donner

Sub Stockplein()
'
Dim Reference As String
Dim Derlig As Long
Derlig = Range("B65536").End(xlUp).Row 'sous excel 2003
'recherche stock plein
For i = Derlig To 1 Step -1
If Cells(i, 5).Value = "stock" And Cells(i, 8).Value = "plein" Then
Reference = Cells(i, 2).Value
'suppression lignes de même référence
For j = Derlig To 1 Step -1
If Cells(j, 2).Value = Reference Then Cells(j, 1).EntireRow.Delete
Next j
'vérification i<dernière ligne+1
Derlig = Range("B65536").End(xlUp).Row
If i > Derlig + 1 Then i = Derlig + 1
End If
Next i
End Sub

Michel

"michel ou sam" a écrit dans le message de news:
4db91107$0$30794$

Bonjour Pierre,
si je comprends bien , si tu as une ligne quelconque qui a en colonne E
"stock" et en colonne H "plein", il faut rechercher et supprimer toutes
les lignes qui ont la même référence que cette ligne (référence que l'on
trouve en colonne B).
Est ce bien cela ?
Michel

"pierre" a écrit dans le message de news:
4db89eef$0$14692$
Bonjour

j'aimerais supprimer Des lignes en fonction de deux valeurs touvées sur
une ligne.
En colonne B la reference du produit Refx01 et en Col E et H des
valeurs.
Si E=stock et H=plein alors je supprime toutes les lignes contenant en B
la réference du produit.
J'utilise If Cells(l, "E").Value = "stock" _
And Cells(l, "H").Value = "plein" Then Cells(l,
1).EntireRow.Delete , cela fonctionne que pour une ligne.

merci pour votre aide
Pierre






Avatar
MichD
Bonjour,

Une autre façon de faire :
Tu dois adapter les 2 variables : Nom de la feuille,
La valeur en B:B que tu veux conserver

J'ai tenu pour acquis que tes données débutaient en ligne 2 et que tu
avais des étiquettes de colonnes en ligne1

J'ai supposé que ta plage se situait en colonne A:H
Zone de critère du filtre élaboré : K1:K2 , tu peux utiliser les 2 cellules que tu veux

'-----------------------------------------
Sub test()
Dim DerLig As Long, Sh As Worksheet
Dim MaValeur As String

'------Variable à définir--------
Set Sh = Worksheets("Feuil1")
MaValeur = "refx01"
'--------------------------------
Application.ScreenUpdating = False
With Sh
DerLig = .Range("A:H").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

'Définir zone de critère du filtre élaboré
.Range("K1") = ""
.Range("K2").Formula = _
"=(B2<>""" & MaValeur & """)+(D2<>""stock"")+(H2<>""plein"")<>0"

With .Range("A1:H" & DerLig)
.AdvancedFilter xlFilterInPlace, Sh.Range("K1:K2")
.Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
.Range("K2") = ""
.ShowAllData
End With
Application.ScreenUpdating = True
End Sub
'-----------------------------------------

MichD
--------------------------------------------
Avatar
pierre
Bonsoir

Oui c'est exactement cela et la macro fonctionne parfaitement ( génial )
Question pour une variante, est-il possible de rechercher pour le même
résultat toute valeur commençant par "ple........" au lieu du mot exact ?
Si cela complique énormément la sub, pas la peine de vous creuser la tête

Encore merci à vous.
Pierre

"michel ou sam" a écrit dans le message de news:
4db9202d$0$30751$
Bonjour,
voilà ce que cela pourrait donner

Sub Stockplein()
'
Dim Reference As String
Dim Derlig As Long
Derlig = Range("B65536").End(xlUp).Row 'sous excel 2003
'recherche stock plein
For i = Derlig To 1 Step -1
If Cells(i, 5).Value = "stock" And Cells(i, 8).Value = "plein" Then
Reference = Cells(i, 2).Value
'suppression lignes de même référence
For j = Derlig To 1 Step -1
If Cells(j, 2).Value = Reference Then Cells(j, 1).EntireRow.Delete
Next j
'vérification i<dernière ligne+1
Derlig = Range("B65536").End(xlUp).Row
If i > Derlig + 1 Then i = Derlig + 1
End If
Next i
End Sub

Michel

"michel ou sam" a écrit dans le message de news:
4db91107$0$30794$

Bonjour Pierre,
si je comprends bien , si tu as une ligne quelconque qui a en colonne E
"stock" et en colonne H "plein", il faut rechercher et supprimer toutes
les lignes qui ont la même référence que cette ligne (référence que l'on
trouve en colonne B).
Est ce bien cela ?
Michel

"pierre" a écrit dans le message de news:
4db89eef$0$14692$
Bonjour

j'aimerais supprimer Des lignes en fonction de deux valeurs touvées sur
une ligne.
En colonne B la reference du produit Refx01 et en Col E et H des
valeurs.
Si E=stock et H=plein alors je supprime toutes les lignes contenant en
B la réference du produit.
J'utilise If Cells(l, "E").Value = "stock" _
And Cells(l, "H").Value = "plein" Then Cells(l,
1).EntireRow.Delete , cela fonctionne que pour une ligne.

merci pour votre aide
Pierre










Avatar
pierre
Merci pour cette façon de faire.
Je me rends compte que le vba est complexe


"MichD" a écrit dans le message de news:
ipbi07$a0a$
Bonjour,

Une autre façon de faire :
Tu dois adapter les 2 variables : Nom de la feuille,
La valeur en B:B que
tu veux conserver

J'ai tenu pour acquis que tes données débutaient en ligne 2 et que tu
avais des étiquettes de colonnes en ligne1

J'ai supposé que ta plage se situait en colonne A:H
Zone de critère du filtre élaboré : K1:K2 , tu peux utiliser les 2
cellules que tu veux

'-----------------------------------------
Sub test()
Dim DerLig As Long, Sh As Worksheet
Dim MaValeur As String

'------Variable à définir--------
Set Sh = Worksheets("Feuil1")
MaValeur = "refx01"
'--------------------------------
Application.ScreenUpdating = False
With Sh
DerLig = .Range("A:H").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

'Définir zone de critère du filtre élaboré
.Range("K1") = ""
.Range("K2").Formula = _
"=(B2<>""" & MaValeur & """)+(D2<>""stock"")+(H2<>""plein"")<>0"

With .Range("A1:H" & DerLig)
.AdvancedFilter xlFilterInPlace, Sh.Range("K1:K2")
.Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
.Range("K2") = ""
.ShowAllData
End With
Application.ScreenUpdating = True
End Sub
'-----------------------------------------

MichD
--------------------------------------------

Avatar
michel ou sam
Bonjour,
j'ai du mal à comprendre.
Je suppose que tu parles de ce qui a en colonne B.
Faut il, dès que l'on trouve une ligne contenant "stock" et "plein",
supprimer toutes les lignes dont la référence commence par "ple" ?
ou faut il , dès que l'on trouve une ligne contenant "stock" et "plein",
noter la référence (par exemple "Ref" ) et supprimer toutes les lignes dont
la référence s'appelle "pleRef" ?

Michel

"pierre" a écrit dans le message de news:
4db9f19a$0$30756$
Bonsoir

Oui c'est exactement cela et la macro fonctionne parfaitement ( génial )
Question pour une variante, est-il possible de rechercher pour le même
résultat toute valeur commençant par "ple........" au lieu du mot exact ?
Si cela complique énormément la sub, pas la peine de vous creuser la tête

Encore merci à vous.
Pierre

"michel ou sam" a écrit dans le message de news:
4db9202d$0$30751$
Bonjour,
voilà ce que cela pourrait donner

Sub Stockplein()
'
Dim Reference As String
Dim Derlig As Long
Derlig = Range("B65536").End(xlUp).Row 'sous excel 2003
'recherche stock plein
For i = Derlig To 1 Step -1
If Cells(i, 5).Value = "stock" And Cells(i, 8).Value = "plein" Then
Reference = Cells(i, 2).Value
'suppression lignes de même référence
For j = Derlig To 1 Step -1
If Cells(j, 2).Value = Reference Then Cells(j, 1).EntireRow.Delete
Next j
'vérification i<dernière ligne+1
Derlig = Range("B65536").End(xlUp).Row
If i > Derlig + 1 Then i = Derlig + 1
End If
Next i
End Sub

Michel

"michel ou sam" a écrit dans le message de
news: 4db91107$0$30794$

Bonjour Pierre,
si je comprends bien , si tu as une ligne quelconque qui a en colonne E
"stock" et en colonne H "plein", il faut rechercher et supprimer toutes
les lignes qui ont la même référence que cette ligne (référence que l'on
trouve en colonne B).
Est ce bien cela ?
Michel

"pierre" a écrit dans le message de news:
4db89eef$0$14692$
Bonjour

j'aimerais supprimer Des lignes en fonction de deux valeurs touvées sur
une ligne.
En colonne B la reference du produit Refx01 et en Col E et H des
valeurs.
Si E=stock et H=plein alors je supprime toutes les lignes contenant en
B la réference du produit.
J'utilise If Cells(l, "E").Value = "stock" _
And Cells(l, "H").Value = "plein" Then Cells(l,
1).EntireRow.Delete , cela fonctionne que pour une ligne.

merci pour votre aide
Pierre














Avatar
MichD
L'approche suggérée est la plus rapide des suggestions que tu as reçues.
Si ta plage à 25 lignes au total, la différence en temps d'exécution n'est peut-être pas énorme,
mais la différence s'accroît rapidement au fur et à mesure que la plage grandit.

Pour supprimer toutes les lignes dont la colonne B:B débute par "refx" et ayant
en colonne D:D l'expression "Stock" et en colonne H:H le mot "Plein"

La différence entre cette macro et l'autre que je t’ai présentée :
A ) MaValeur = "refx" au lieu de MaValeur = "refx01"
B ) Dans la formule : "=(B2>""" & MaValeur & """)+(D2<>""stock"")+(H2<>""plein"")<>0"
J'ai remplacé B2<>""" & MaValeur & """ par B2>""" & MaValeur & """

'-----------------------------------------------------
Sub test()
Dim DerLig As Long, Sh As Worksheet
Dim MaValeur As String

'------Variable à définir--------
Set Sh = Worksheets("Sheet1")
MaValeur = "refx"
'--------------------------------
Application.ScreenUpdating = False
With Worksheets("Sheet1")
DerLig = .Range("A:H").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

'Définir zone de critère du filtre élaboré
.Range("K1") = ""
.Range("K2").Formula = _
"=(B2>""" & MaValeur & """)+(D2<>""stock"")+(H2<>""plein"")<>0"

With .Range("A1:H" & DerLig)
.AdvancedFilter xlFilterInPlace, Sh.Range("K1:K2")
.Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
.Range("K2") = ""
.ShowAllData
End With
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------------


MichD
--------------------------------------------
"pierre" a écrit dans le message de groupe de discussion : 4db9f7a9$0$14673$

Merci pour cette façon de faire.
Je me rends compte que le vba est complexe


"MichD" a écrit dans le message de news:
ipbi07$a0a$
Bonjour,

Une autre façon de faire :
Tu dois adapter les 2 variables : Nom de la feuille,
La valeur en B:B que
tu veux conserver

J'ai tenu pour acquis que tes données débutaient en ligne 2 et que tu
avais des étiquettes de colonnes en ligne1

J'ai supposé que ta plage se situait en colonne A:H
Zone de critère du filtre élaboré : K1:K2 , tu peux utiliser les 2
cellules que tu veux

'-----------------------------------------
Sub test()
Dim DerLig As Long, Sh As Worksheet
Dim MaValeur As String

'------Variable à définir--------
Set Sh = Worksheets("Feuil1")
MaValeur = "refx01"
'--------------------------------
Application.ScreenUpdating = False
With Sh
DerLig = .Range("A:H").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

'Définir zone de critère du filtre élaboré
.Range("K1") = ""
.Range("K2").Formula = _
"=(B2<>""" & MaValeur & """)+(D2<>""stock"")+(H2<>""plein"")<>0"

With .Range("A1:H" & DerLig)
.AdvancedFilter xlFilterInPlace, Sh.Range("K1:K2")
.Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
.Range("K2") = ""
.ShowAllData
End With
Application.ScreenUpdating = True
End Sub
'-----------------------------------------

MichD
--------------------------------------------

Avatar
pierre
Bonjour Michel

Tu as parfaitement compris mon besoin et la macro est parfaite.
Dès que stock et plein sont détectés ta macro supprime les lignes contenant
la référence du produit se trouvant en colonne B (Ce qui soulage le
tableau )
et cela fonctionne parfaitement bien. Tellement bien que je voulais
l'enrichir avec comme condition 2 au lieu du mot fixe ( plein) une variable
de type "commençant par" .
et garder une seule ligne au lieu de tout supprimer, la premiere en partant
du haut.
J'abuse mais c'est tellement puissant avec vous le VBA .
Merci à toi ainsi qu'aux autres du forum

Pierre

Si cela complique énormément la sub, pas la peine de vous creuser la tête
"michel ou sam" a écrit dans le message de news:
4dba7506$0$14682$
Bonjour,
j'ai du mal à comprendre.
Je suppose que tu parles de ce qui a en colonne B.
Faut il, dès que l'on trouve une ligne contenant "stock" et "plein",
supprimer toutes les lignes dont la référence commence par "ple" ?
ou faut il , dès que l'on trouve une ligne contenant "stock" et "plein",
noter la référence (par exemple "Ref" ) et supprimer toutes les lignes
dont la référence s'appelle "pleRef" ?

Michel

"pierre" a écrit dans le message de news:
4db9f19a$0$30756$
Bonsoir

Oui c'est exactement cela et la macro fonctionne parfaitement ( génial )
Question pour une variante, est-il possible de rechercher pour le même
résultat toute valeur commençant par "ple........" au lieu du mot exact ?
Si cela complique énormément la sub, pas la peine de vous creuser la
tête

Encore merci à vous.
Pierre

"michel ou sam" a écrit dans le message de
news: 4db9202d$0$30751$
Bonjour,
voilà ce que cela pourrait donner

Sub Stockplein()
'
Dim Reference As String
Dim Derlig As Long
Derlig = Range("B65536").End(xlUp).Row 'sous excel 2003
'recherche stock plein
For i = Derlig To 1 Step -1
If Cells(i, 5).Value = "stock" And Cells(i, 8).Value = "plein" Then
Reference = Cells(i, 2).Value
'suppression lignes de même référence
For j = Derlig To 1 Step -1
If Cells(j, 2).Value = Reference Then Cells(j,
1).EntireRow.Delete
Next j
'vérification i<dernière ligne+1
Derlig = Range("B65536").End(xlUp).Row
If i > Derlig + 1 Then i = Derlig + 1
End If
Next i
End Sub

Michel

"michel ou sam" a écrit dans le message de
news: 4db91107$0$30794$

Bonjour Pierre,
si je comprends bien , si tu as une ligne quelconque qui a en colonne E
"stock" et en colonne H "plein", il faut rechercher et supprimer toutes
les lignes qui ont la même référence que cette ligne (référence que
l'on trouve en colonne B).
Est ce bien cela ?
Michel

"pierre" a écrit dans le message de news:
4db89eef$0$14692$
Bonjour

j'aimerais supprimer Des lignes en fonction de deux valeurs touvées
sur une ligne.
En colonne B la reference du produit Refx01 et en Col E et H des
valeurs.
Si E=stock et H=plein alors je supprime toutes les lignes contenant
en B la réference du produit.
J'utilise If Cells(l, "E").Value = "stock" _
And Cells(l, "H").Value = "plein" Then Cells(l,
1).EntireRow.Delete , cela fonctionne que pour une ligne.

merci pour votre aide
Pierre


















Avatar
Gloops
pierre a écrit, le 30/04/2011 17:57 :
Bonjour Michel

Tu as parfaitement compris mon besoin et la macro est parfaite.
Dès que stock et plein sont détectés ta macro supprime les lignes contenant
la référence du produit se trouvant en colonne B (Ce qui soulage le
tableau )
et cela fonctionne parfaitement bien. Tellement bien que je voulais
l'enrichir avec comme condition 2 au lieu du mot fixe ( plein) une var iable
de type "commençant par" .
et garder une seule ligne au lieu de tout supprimer, la premiere en par tant
du haut.
J'abuse mais c'est tellement puissant avec vous le VBA .
Merci à toi ainsi qu'aux autres du forum

Pierre




Bonjour,

Left$(Cells(i, 8), 3) = "ple"



Cells(i, 8) est la huitième cellule de la ligne i, donc la cellule de l a
colonne H, et plus exactement sa propriété par défaut, Value.

Left$(texte, nb) retourne nb caractères pris au début de texte.
1 2