Problème de boucle vba

[Résolu/Fermé]
Signaler
Messages postés
12
Date d'inscription
dimanche 24 février 2013
Statut
Membre
Dernière intervention
22 juin 2018
-
Messages postés
12
Date d'inscription
dimanche 24 février 2013
Statut
Membre
Dernière intervention
22 juin 2018
-
Bonjour tout le monde

J'ai un problème , j'ai adapté un programme trouvé sur le net pour comparer 2 listes de valeur dans 2 feuilles différentes sur excel et supprimer dans la feuille 1 les valeurs pas présente dans la feuille 2 :

Sub Compare()
Dim i As Integer
Dim col_2 As Range 'Definition plage de cellules en memoire pour vitesse execution
Dim col_1 As Range

Set col_1 = Worksheets("Feuil2").Range("A1:A16")
Set col_2 = Worksheets("Feuil1").Range("A1:A16")

With ThisWorkbook.Sheets("Feuil2")

For i = 16 To 2 Step -1  'Test si valeur cellule feuil1 est dans Plage col_2(feuil2!A1:A16))

If Application.CountIf(col_2, .Range("A" & i).Value) = 0 Then
Feuil1.Rows(i).Delete
i = i + 1
End If

Next i

End With

End Sub


Le programme marche très bien mais le problème est qu'il s'arrête jamais car il ne sors pas de la boucle For

Si quelqu'un aurait la solution

Merci

2 réponses

Messages postés
50797
Date d'inscription
mardi 8 janvier 2008
Statut
Modérateur
Dernière intervention
30 janvier 2021
7 415
Bonjour,

Vu par un amateur (moi) : en 10, tu décrémentes i de 1 à chaque tour, en 15 tu incrémentes au moins dans certains cas le même i de 1.
Messages postés
12
Date d'inscription
dimanche 24 février 2013
Statut
Membre
Dernière intervention
22 juin 2018

Bonjour, merci pour ta réponse
J'avais juste incrémenté le i car sinon il me supprimer qu'une seule valeur de la liste
Mais je vois que le programme de Patrice33740 marche !
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 705
Bonjour,

Rssaies :
Sub Compare()
Dim i As Integer
Dim col_2 As Range 
Dim col_1 As Range
  Set col_1 = Worksheets("Feuil1").Range("A2:A16")
  Set col_2 = Worksheets("Feuil2").Range("A2:A16")
  For i = col_1.Row + col_1.Rows.Count - 1 To col_1.Row Step -1
    If Application.CountIf(col_2, col_1.Rows(i).Value) = 0 Then
      col_1.Rows(i).EntireRow.Delete
    End If
  Next i
End Sub



Cordialement
Patrice
Messages postés
12
Date d'inscription
dimanche 24 février 2013
Statut
Membre
Dernière intervention
22 juin 2018

Merci sa marche super !