OVH Cloud OVH Cloud

Supprimer lignes

6 réponses
Avatar
JB
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

6 réponses

Avatar
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


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


Avatar
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

Avatar
DJ9B
Je te remercie Alain !
Je dormirai moins bête ce soir, c'est clair.


--
@ 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 :

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



Avatar
JB
Merci de votre aide

"DJ9B" <**EnlevezLesEtoiles** a écrit dans le message de news:
#
Je te remercie Alain !
Je dormirai moins bête ce soir, c'est clair.


--
@ 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 :

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