Probleme macro de suppression de lignes

Résolu
hussein83 Messages postés 26 Statut Membre -  
Bidouilleu_R Messages postés 1209 Statut Membre -
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 1209 Statut Membre 295
 
'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 26 Statut Membre
 
merci de ta réponse je vais la tester....
0
hussein83 Messages postés 26 Statut Membre
 
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 1209 Statut Membre 295
 
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