Bouclage du programme

Bonjour,

Voila un programme qui me permet de supprimer des lignes avec "S5".
Lorsque j arrive a la fin de mon tableau la case est vide donc je sors de ma boucle.
Le programme marche tres bien, il supprime exactement ce que je veux.
Mais a la fin du end sub, le programme recommence depuis le debut, et je ne comprends pas pourquoi.
Merci

Sub Delete()

Dim iLF1%, iLD1%, F1$, i
'Gele l'ecran pour accelerer le traitement
Application.ScreenUpdating = False

'Determination de la premiere ligne de chaque feuille
iLD1 = 2 'Ligne de Depart de DB1

'Determination des noms de feuille
F1 = "OMR"

'Determination de la derniere ligne de chaque feuille
iLF1 = Worksheets(F1).Cells(65535, 1).End(xlUp).Row

'Pour chaque ligne dans DB1
For i = iLD1 To iLF1
If Worksheets(F1).Range("G" & i).Value <> "S5" Then
Rows(i).EntireRow.Delete
If Worksheets(F1).Range("G" & i) Is Nothing Or Worksheets(F1).Range("G" & i).Value = "" Then Exit For
i = i - 1
End If
If Worksheets(F1).Range("G" & i).Value = "" Then Exit For
Next

End Sub
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Je la declenche par le bouton executer pour le moment
    Je n ai pas de bouton
    Et elle n est pas appelle depuis un autre programme
    1. Je ne connais pas ce langage mais au niveau des tableaux j ai eu des erreurs. Meme principe sortir du tableau lorsque celui ci est vide.
      L'erreur la plus fréquente (du moins en c++), c'est que le tableau créé même si il n'est pas remplie contient des valeurs. (valeurs quelconque créé au hasard n'ayant aucune utilité).

      Si c'est la même dans ton langage, pense a faire une remise a zéro
      1. Bonjour

        Quand ta macro est-elle appelée ? C'est toi qui la déclenches à partir des menus ou des boutons, ou bien elle est appelée depuis une autre macro ?
        1. Desole mais je ne vois pas trop de quoi tu parles
          Est ce que tu pourrais m expliquer ou je pourrais le verifier?
          1. Bonjour

            Ta macro a l'air de marcher chez moi. Ne serait-elle pas appelée depuis un événement Change ou SelctionChange ? Si c'est le cas, c'est normal qu'elle soit rappelée puisqu'elle modifie ta feuille.
            1. Desole mais je ne vois pas trop de quoi tu parles
              Est ce que tu pourrais m expliquer ou je pourrais le verifier?
              Parce que je n ai pas creer d evenement change ou selection change.
              Mais au cas ou, est ce que tu pourrais me dire ou je pourrais le verifier?
              Merci
          2. Il est vrai que c est plus simple
            Merci
            Mais ca ne solutionne pas mon probleme
            Sub Delete()

            Dim iLF1%, iLD1%, F1$, i
            'Gele l'ecran pour accelerer le traitement
            Application.ScreenUpdating = False

            'Determination de la premiere ligne de chaque feuille
            iLD1 = 2 'Ligne de Depart de DB1

            'Determination des noms de feuille
            F1 = "OMR"

            'Determination de la derniere ligne de chaque feuille
            iLF1 = Worksheets(F1).Cells(65535, 1).End(xlUp).Row

            'Pour chaque ligne dans DB1
            For i = iLF1 To iLD1 Step -1
            If Worksheets(F1).Range("G" & i).Value <> "S5" Then
            Rows(i).EntireRow.Delete
            End If

            Next

            End Sub
            1. Contributeur
              Bonjour,

              Déjà je ferais
              For i = iLF1 to iLD1 step -1

              Toujours partir du bas si tu supprimes des lignes et ça évite de retoucher à i

              eric