suppression lignes

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #23315461
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


michel ou sam
Le #23315631
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" 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


michel ou sam
Le #23315961
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" 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" 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






MichD
Le #23316341
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
--------------------------------------------
pierre
Le #23318281
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" 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" 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" 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










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


"MichD" 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
--------------------------------------------

michel ou sam
Le #23318831
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" 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" 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" 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" 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














MichD
Le #23319271
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" 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
--------------------------------------------

pierre
Le #23322391
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" 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" 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" 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" 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" 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


















Gloops
Le #23322911
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.
Publicité
Poster une réponse
Anonyme