Voila mon Pb
Dans un fichier référence xxx.xls j'ai dans la colonne A une liste de
numéro (N°deCommande) exemple : 987956
Dans un autre fichier yyy.xls j'ai en colonne A aussi une liste de de
numéro de commande
je souhaiterai que lorsque on trouve dans la colonne A du fichier yyy.xls le
même valeur que dans xxx.xls toute la ligne du fichier yyy.xls soit
supprimée.
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
DJ9B
Bonsoir JB ! Voici un exemple à adapter en sachant que : 1) je suis parti de la ligne 1 colonne A pour ton classeur xxx et yyy 2) qu'il faut mettre le code ci-dessous dans un module standart du classeur xxx 3) que tu executes le code à partir du bouton "exécuter une macro" 4) que tes classeurs xxx et yyy soient ouverts tous les 2
Sub suppr_ligne_de_commande() dim i, j as Integer For j = 1 To Workbooks("xxx").Sheets("Feuil1").UsedRange.Rows.Count For i = Workbooks("yyy").Sheets("Feuil1").UsedRange.Rows.Count + Workbooks("yyy").Sheets("Feuil1").UsedRange.Row To 1 Step -1 If Workbooks("yyy").Sheets("Feuil1").Cells(i, 1).Value Workbooks("xxx").Sheets("Feuil1").Cells(j, 1).Value Then Workbooks("yyy").Sheets("Feuil1").Rows(i).Delete Shift:=xlUp Next i Next j End Sub
-- @ tantôt ! email : http://www.cerbermail.com/?05npeGunAn Site : http://www.dj9b.fr.st
Dans le fameux MPFE JB a écrit il y a peu :
Bonsoir,
Voila mon Pb Dans un fichier référence xxx.xls j'ai dans la colonne A une liste de numéro (N°deCommande) exemple : 987956
Dans un autre fichier yyy.xls j'ai en colonne A aussi une liste de de numéro de commande
je souhaiterai que lorsque on trouve dans la colonne A du fichier yyy.xls le même valeur que dans xxx.xls toute la ligne du fichier yyy.xls soit supprimée.
Est ce possible ? si oui comment
Merci beaucoup de votre aide
Bonsoir JB !
Voici un exemple à adapter en sachant que :
1) je suis parti de la ligne 1 colonne A pour ton classeur xxx et yyy
2) qu'il faut mettre le code ci-dessous dans un module standart du classeur
xxx
3) que tu executes le code à partir du bouton "exécuter une macro"
4) que tes classeurs xxx et yyy soient ouverts tous les 2
Sub suppr_ligne_de_commande()
dim i, j as Integer
For j = 1 To Workbooks("xxx").Sheets("Feuil1").UsedRange.Rows.Count
For i = Workbooks("yyy").Sheets("Feuil1").UsedRange.Rows.Count +
Workbooks("yyy").Sheets("Feuil1").UsedRange.Row To 1 Step -1
If Workbooks("yyy").Sheets("Feuil1").Cells(i, 1).Value Workbooks("xxx").Sheets("Feuil1").Cells(j, 1).Value Then
Workbooks("yyy").Sheets("Feuil1").Rows(i).Delete Shift:=xlUp
Next i
Next j
End Sub
--
@ tantôt !
email : http://www.cerbermail.com/?05npeGunAn
Site : http://www.dj9b.fr.st
Dans le fameux MPFE JB a écrit il y a peu :
Bonsoir,
Voila mon Pb
Dans un fichier référence xxx.xls j'ai dans la colonne A une liste de
numéro (N°deCommande) exemple : 987956
Dans un autre fichier yyy.xls j'ai en colonne A aussi une liste de de
numéro de commande
je souhaiterai que lorsque on trouve dans la colonne A du fichier
yyy.xls le même valeur que dans xxx.xls toute la ligne du fichier
yyy.xls soit supprimée.
Bonsoir JB ! Voici un exemple à adapter en sachant que : 1) je suis parti de la ligne 1 colonne A pour ton classeur xxx et yyy 2) qu'il faut mettre le code ci-dessous dans un module standart du classeur xxx 3) que tu executes le code à partir du bouton "exécuter une macro" 4) que tes classeurs xxx et yyy soient ouverts tous les 2
Sub suppr_ligne_de_commande() dim i, j as Integer For j = 1 To Workbooks("xxx").Sheets("Feuil1").UsedRange.Rows.Count For i = Workbooks("yyy").Sheets("Feuil1").UsedRange.Rows.Count + Workbooks("yyy").Sheets("Feuil1").UsedRange.Row To 1 Step -1 If Workbooks("yyy").Sheets("Feuil1").Cells(i, 1).Value Workbooks("xxx").Sheets("Feuil1").Cells(j, 1).Value Then Workbooks("yyy").Sheets("Feuil1").Rows(i).Delete Shift:=xlUp Next i Next j End Sub
-- @ tantôt ! email : http://www.cerbermail.com/?05npeGunAn Site : http://www.dj9b.fr.st
Dans le fameux MPFE JB a écrit il y a peu :
Bonsoir,
Voila mon Pb Dans un fichier référence xxx.xls j'ai dans la colonne A une liste de numéro (N°deCommande) exemple : 987956
Dans un autre fichier yyy.xls j'ai en colonne A aussi une liste de de numéro de commande
je souhaiterai que lorsque on trouve dans la colonne A du fichier yyy.xls le même valeur que dans xxx.xls toute la ligne du fichier yyy.xls soit supprimée.
Est ce possible ? si oui comment
Merci beaucoup de votre aide
AV
Autre approche : A adapter : noms des feuilles (les 2 classeurs sont ouverts)
Sub zz_Delete() With Workbooks("xxx.xls").Sheets("Feuil1") Set plg1 = .Range("A1", .[A65536].End(3)) End With With Workbooks("yyy.xls").Sheets("Feuil1") Set plg2 = .Range("A1", .[A65536].End(3)) End With For Each c In plg2 On Error Resume Next x = plg1.Find(c.Value).Row If Err.Number = 0 Then c.EntireRow.Delete Next End Sub
AV
Autre approche :
A adapter : noms des feuilles (les 2 classeurs sont ouverts)
Sub zz_Delete()
With Workbooks("xxx.xls").Sheets("Feuil1")
Set plg1 = .Range("A1", .[A65536].End(3))
End With
With Workbooks("yyy.xls").Sheets("Feuil1")
Set plg2 = .Range("A1", .[A65536].End(3))
End With
For Each c In plg2
On Error Resume Next
x = plg1.Find(c.Value).Row
If Err.Number = 0 Then c.EntireRow.Delete
Next
End Sub
Autre approche : A adapter : noms des feuilles (les 2 classeurs sont ouverts)
Sub zz_Delete() With Workbooks("xxx.xls").Sheets("Feuil1") Set plg1 = .Range("A1", .[A65536].End(3)) End With With Workbooks("yyy.xls").Sheets("Feuil1") Set plg2 = .Range("A1", .[A65536].End(3)) End With For Each c In plg2 On Error Resume Next x = plg1.Find(c.Value).Row If Err.Number = 0 Then c.EntireRow.Delete Next End Sub
AV
DJ9B
Bonjour Alain ! Je présume que ton approche doit être plus efficace donc plus rapide ;o) puisqu'il n'y a qu'une seule boucle, non ? J'en profite pour te demander : pourquoi (3) à la fin de .Range("A1", .[A65536].End(3)) ? Peux tu m'expliquer : x = plg1.Find(c.Value).Row If Err.Number = 0 Then c.EntireRow.Delete c'est la gestion des erreurs qui te permet d'annuler ? Peux-tu m'en dire un peu plus svp ? Je lirai ça ce soir avec passion quand je rentrerai du travail . Je suis en train de me faire un fichier où je fais beaucoups de comparaisons et je trouve qu'avec mes boucles c'est assez long, je cherche à mieux optimiser mon code !
-- @ tantôt ! email : http://www.cerbermail.com/?05npeGunAn Site : http://www.dj9b.fr.st
Dans le fameux MPFE AV a écrit il y a peu :
Autre approche : A adapter : noms des feuilles (les 2 classeurs sont ouverts)
Sub zz_Delete() With Workbooks("xxx.xls").Sheets("Feuil1") Set plg1 = .Range("A1", .[A65536].End(3)) End With With Workbooks("yyy.xls").Sheets("Feuil1") Set plg2 = .Range("A1", .[A65536].End(3)) End With For Each c In plg2 On Error Resume Next x = plg1.Find(c.Value).Row If Err.Number = 0 Then c.EntireRow.Delete Next End Sub
AV
Bonjour Alain !
Je présume que ton approche doit être plus efficace donc plus rapide ;o)
puisqu'il n'y a qu'une seule boucle, non ?
J'en profite pour te demander :
pourquoi (3) à la fin de .Range("A1", .[A65536].End(3)) ?
Peux tu m'expliquer :
x = plg1.Find(c.Value).Row
If Err.Number = 0 Then c.EntireRow.Delete
c'est la gestion des erreurs qui te permet d'annuler ?
Peux-tu m'en dire un peu plus svp ?
Je lirai ça ce soir avec passion quand je rentrerai du travail .
Je suis en train de me faire un fichier où je fais beaucoups de comparaisons
et je trouve qu'avec mes boucles c'est assez long, je cherche à mieux
optimiser mon code !
--
@ tantôt !
email : http://www.cerbermail.com/?05npeGunAn
Site : http://www.dj9b.fr.st
Dans le fameux MPFE AV a écrit il y a peu :
Autre approche :
A adapter : noms des feuilles (les 2 classeurs sont ouverts)
Sub zz_Delete()
With Workbooks("xxx.xls").Sheets("Feuil1")
Set plg1 = .Range("A1", .[A65536].End(3))
End With
With Workbooks("yyy.xls").Sheets("Feuil1")
Set plg2 = .Range("A1", .[A65536].End(3))
End With
For Each c In plg2
On Error Resume Next
x = plg1.Find(c.Value).Row
If Err.Number = 0 Then c.EntireRow.Delete
Next
End Sub
Bonjour Alain ! Je présume que ton approche doit être plus efficace donc plus rapide ;o) puisqu'il n'y a qu'une seule boucle, non ? J'en profite pour te demander : pourquoi (3) à la fin de .Range("A1", .[A65536].End(3)) ? Peux tu m'expliquer : x = plg1.Find(c.Value).Row If Err.Number = 0 Then c.EntireRow.Delete c'est la gestion des erreurs qui te permet d'annuler ? Peux-tu m'en dire un peu plus svp ? Je lirai ça ce soir avec passion quand je rentrerai du travail . Je suis en train de me faire un fichier où je fais beaucoups de comparaisons et je trouve qu'avec mes boucles c'est assez long, je cherche à mieux optimiser mon code !
-- @ tantôt ! email : http://www.cerbermail.com/?05npeGunAn Site : http://www.dj9b.fr.st
Dans le fameux MPFE AV a écrit il y a peu :
Autre approche : A adapter : noms des feuilles (les 2 classeurs sont ouverts)
Sub zz_Delete() With Workbooks("xxx.xls").Sheets("Feuil1") Set plg1 = .Range("A1", .[A65536].End(3)) End With With Workbooks("yyy.xls").Sheets("Feuil1") Set plg2 = .Range("A1", .[A65536].End(3)) End With For Each c In plg2 On Error Resume Next x = plg1.Find(c.Value).Row If Err.Number = 0 Then c.EntireRow.Delete Next End Sub
AV
AV
Salut,
..pourquoi (3) à la fin de .Range("A1", .[A65536].End(3)) ? C'est une syntaxe raccourcie pour :
.Range("A1", .Range("A65536").End(xlUp))
x = plg1.Find(c.Value).Row If Err.Number = 0 Then c.EntireRow.Delete
On Error Resume Next Permet de passer outre l'erreur éventuellement déclenchée par l'instruction "x
= ..."
x = plg1.Find(c.Value).Row Permet de tester la présence de la valeur de c dans la plage "plg1"
If Err.Number = 0 Then c.EntireRow.Delete Teste le N° de l'erreur
Si Err.Number = 0 ça veux qu'il n'y a pas pas d'erreur et que donc la valeur a été trouvée et que donc il faut la supprimer
et je trouve qu'avec mes boucles ... A n'utiliser qu'en cas de nécessité ;-)
Ok ? AV
Salut,
..pourquoi (3) à la fin de .Range("A1", .[A65536].End(3)) ?
C'est une syntaxe raccourcie pour :
.Range("A1", .Range("A65536").End(xlUp))
x = plg1.Find(c.Value).Row
If Err.Number = 0 Then c.EntireRow.Delete
On Error Resume Next
Permet de passer outre l'erreur éventuellement déclenchée par l'instruction "x
= ..."
x = plg1.Find(c.Value).Row
Permet de tester la présence de la valeur de c dans la plage "plg1"
If Err.Number = 0 Then c.EntireRow.Delete
Teste le N° de l'erreur
Si Err.Number = 0 ça veux qu'il n'y a pas pas d'erreur et que donc la valeur a
été trouvée et que donc il faut la supprimer
et je trouve qu'avec mes boucles ...
A n'utiliser qu'en cas de nécessité ;-)