Sortir boucle for VBA

Résolu
Kaddour Jilali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   -  
Kaddour Jilali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,
J'ai cette petite macro vba que je viens de faire, mais le problème c'est que quand je change les For i et j et que je vais jusqu'à 200, ou plus ça met beaucoup de temps à calculer.

Sub g()
Dim i As Integer
Dim j As Integer
For i = 3 To 100
For j = 3 To 100
If Sheets("1").Range("H" & j).Value = Sheets("2").Range("C" & i).Value Then Sheets("2").Range("B" & i).Value = Sheets("1").Range("G" & j).Value
Next j
Next i
End Sub

Ce que je voudrais, c'est que une fois qu'il a trouvé ma condition If, il s'arrête.
Comment faire ?
Merci pour votre aide.

11 réponses

  1. Utilisateur anonyme
     
    Bonjour

    Je ne comprend pas que ça demande beaucoup de temps! Chez moi ca ne fonctionne pas du tout.

    Quelle version utilises-tu ?
    0
  2. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Pour sortir de la boucle dès que la condition If est trouvée :
    If Sheets("1").Range("H" & j).Value = Sheets("2").Range("C" & i).Value Then 
       Sheets("2").Range("B" & i).Value = Sheets("1").Range("G" & j).Value
       Exit Sub
    End If 


    Bonne continuation.

    ;o)
    0
  3. Kaddour Jilali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   12
     
    Salut,
    J'ai testé ton code, mais ma macro n'a plus d'effet.
    Voilà à quoi elle ressemble maintenant.

    Sub g()
    Dim i As Integer
    Dim j As Integer
    For i = 3 To 100
    For j = 3 To 100
    If Sheets("1").Range("H" & j).Value = Sheets("2").Range("C" & i).Value Then
    Sheets("2").Range("B" & i).Value = Sheets("1").Range("G" & j).Value
    Exit Sub
    End If
    Next j
    Next i
    End Sub
    0
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Le problème vient des conditions que tu met dans ton IF, elle n'ont probablement pas les bonnes coordonées !!
    Quand tu met Sheets("1") ton "1" c'est le nom que tu a mis sur l'onglet ?? parce qu si tu travail avec l'index de la feuille c'est Sheets(1), sans guillemet
    A+
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Kaddour Jilali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   12
     
    Oui, c'est le nom de mon onglet. La macro initiale fonctionne, le problème c'est que comme je n'arrive pas à l'arrêter quand ma cellule est remplie, elle continue.
    0
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Comme dit, tes conditions ne sont probablement pas bonnes parce que le code est bon.
    Met un STOP avant le exit sub, quand le code s'arrète sur le stop promène la souris sur les valeurs pour voir ce qu'il y à dans les cellules et voir à quelle valeur sont i et j
    Si la bulle des valeur ne s'affiche pas tu peu travailler avec la fenêtre Exécution.
    et tu tape par exemple Print J >> Enter
    pour voir la valeur de j
    etc.. pour les autres données.
    0
  8. Kaddour Jilali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   12
     
    J'ai mis des msgbox i et j juste avant le if. Ca fonctionne comme je le souhaite, c'est à dire i=3 et j=3 puis i=3 et j=4, i=3 et j=5 etc....
    Quand j est arrivé à 100, ça recommence avec i=4 et j=3, i=4 et j=4, etc....
    0
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Vu que tu balaie tout, J'ai peut-être une petite idée...
    remplace par
    Sub g()
    Dim i As Integer
    Dim j As Integer
        For i = 3 To 100
            For j = 3 To 100
                If Sheets("1").Range("H" & j).Value <> "" Then
                    If Sheets("1").Range("H" & j).Value = Sheets("2").Range("C" & i).Value Then
                        Sheets("2").Range("B" & i).Value = Sheets("1").Range("G" & j).Value
                        Exit Sub
                    End If
                End If
            Next j
        Next i
    End Sub

    A+
    0
  10. Kaddour Jilali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   12
     
    Merci pour ton code, je l'ai testé.
    A la place de <>, j'ai mis =. Ca marche bien, c'est beaucoup plus rapide, mais ça reste dépendant du For.
    Je m'explique :
    Pour For i = 3 To 100 le résultat est instantané
    Pour For i = 3 To 5000 j'ai un blocage pendant 5-6 secondes alors que le texte s'affiche immédiatement.
    Est-ce normal ?
    Merci encore.
    0
  11. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    pourquoi...
    A la place de <>, j'ai mis =. ????
    Non, ça ne sait pas aller comme ça, en mettant égal ça ne fonctionne que quand
    Sheets("1").Range("H3").Value ="" et je suppose que ce n'est pas ça que tu veux, si quelque chose s'inscrit c'est pas normal.
    et regarde si c'est bien les bonne adresses tel que tu les veux...
    en supposant i=3 et j=3 tu teste
    If Sheets("1").Range("H3").Value = Sheets("2").Range("C3" ).Value Then
    'Alors tu met dans
    Sheets("2").Range("B3").Value = Sheets("1").Range("G3").Value

    mais sans savoir ce que tu à sur ton classeur ça devient difficile de comprendre.
    0
  12. Kaddour Jilali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   12
     
    C'est bon, je suis aller jusqu'à 1000 et ça fonctionne sans trop attendre.
    Merci pour votre aide qui m'a été très utile.
    0