Probleme macro de suppression de lignes

Résolu/Fermé
hussein83 Messages postés 23 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 21 janvier 2009 - 19 janv. 2009 à 14:00
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 - 20 janv. 2009 à 08:25
Bonjour à otes et à tous
j'ai un probleme avec une macro, elle consiste à supprimer des lignes dans un tableau (lignes à supprimer) qui correspondent aux données situées dans un autre tableau (references)
or elle supprime une ligne sur deux seulement!!!!!
quoi faire???
voici le code:


Sub supprimer()
Dim vListe1Feuille, vListe1Début, vListe2Feuille, vListe2Début
Dim vCellule1, vCellule2, vTrouvé, vNbreAjouts
vListe1Feuille = "references"
vListe1Début = "d6"
vListe2Feuille = "lignes_a_supprimer"
vListe2Début = "a5"

vTrouvé = 0
For Each vCellule2 In Range(Sheets(vListe2Feuille).Range(vListe2Début), Sheets(vListe2Feuille).Range(vListe2Début).End(xlDown))
For Each vCellule1 In Range(Sheets(vListe1Feuille).Range(vListe1Début), Sheets(vListe1Feuille).Range(vListe1Début).End(xlDown))
If vCellule1 = vCellule2 Then vTrouvé = 1
Next
If vTrouvé = 1 Then
vCellule2.EntireRow.Delete

End If
vTrouvé = 0
Next
End Sub
A voir également:

2 réponses

Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 288
19 janv. 2009 à 14:52
'je te corrige en ligne mais je ne teste pas
attention je pense que j'ai inversé tes listes




Sub supprimer()
Dim vListe1Feuille, vListe1Début, vListe2Feuille, vListe2Début
Dim vCellule1, vCellule2, vTrouvé, vNbreAjouts, mavarcellule
vListe1Feuille = "references"
vListe1Début = "d6"
vListe2Feuille = "lignes_a_supprimer"
vListe2Début = "a5"

'je vais sur la feuille
Sheets(vListe1Feuille). select
Range(vListe1Début).select
set mavarcellule as Range(vListe1Début) ' objet cellule

nbligne=Range(Selection, Selection.End(xlDown)).count 'compte le nombre de ligne

vTrouvé = 0
For Each vCellule2 In Range(Sheets(vListe2Feuille).Range(vListe2Début), Sheets(vListe2Feuille).Range(vListe2Début).End(xlDown))

'le problème est ici
' tu rentre dans une deuxième boucle for each et tu supprimes des éléments mais pas quand
'tu pointes sur l'élément le next se trouve avant le end if.... c'est dangereux

for i=0 to nbligne
if mavarcellule=vcellule2 then

' on efface dans ce cas la ligne mavarcellule

mavarcellule.EntireRow.Delete
else
set mavarcellule=mavarcellule.offset(i,0) ' on redéfinit l'objet
endif


next


'For Each vCellule1 In Range(Sheets(vListe1Feuille).Range(vListe1Début), Sheets(vListe1Feuille).Range'(vListe1Début).End(xlDown))
'If vCellule1 = vCellule2 Then vTrouvé = 1
'Next
'If vTrouvé = 1 Then
'vCellule2.EntireRow.Delete

'End If
vTrouvé = 0
Next
End Sub
0
hussein83 Messages postés 23 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 21 janvier 2009
19 janv. 2009 à 15:40
merci de ta réponse je vais la tester....
0
hussein83 Messages postés 23 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 21 janvier 2009
19 janv. 2009 à 17:13
en fait t'avais raison sur le fait que next se trouve avant endif... après une bonne reflexion sur ta solution je suis arrivé à une très simple...
Sub supprimer()
Dim vListe1Feuille, vListe1Début, vListe2Feuille, vListe2Début
Dim vCellule1, vCellule2
vListe1Feuille = "references"
vListe1Début = "d6"
vListe2Feuille = "lignes_a_supprimer"
vListe2Début = "a5"


For Each vCellule1 In Range(Sheets(vListe1Feuille).Range(vListe1Début), Sheets(vListe1Feuille).Range(vListe1Début).End(xlDown))
For Each vCellule2 In Range(Sheets(vListe2Feuille).Range(vListe2Début), Sheets(vListe2Feuille).Range(vListe2Début).End(xlDown))
If vCellule1 = vCellule2 Then vCellule2.EntireRow.Delete

Next

Next
End Sub

merci de m'avoir éclairé sur ce point.... à bientôt sur d'autre sujet
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 288
20 janv. 2009 à 08:25
C'est vrai j'ai été brouillon sur ce coup là
et je te félicite sur ta macro on constate 3 choses importantes :
1 ) c'est court !

2)c'est clair !

3) c'est efficace !

Fécilitations
0