Rechercher : dans
Par :

Sortir boucle for VBA

Dernière réponse le 9 avr 2009 à 17:21:15 Kaddour Jilali, le 7 avr 2009 à 16:25:32 
 Signaler ce message aux modérateurs

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.

Meilleures réponses pour « Sortir boucle for VBA » dans :
Trier un tableau sans utiliser la fonction sort VoirTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle...
PHP - Structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1...
Java: Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditonnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...
Langage C++ - Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...

1

Priouman, le 7 avr 2009 à 18:21:47

Bonjour

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

Quelle version utilises-tu ?

Répondre à Priouman

2

Polux31, le 7 avr 2009 à 18:30:49

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) «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

3

Kaddour Jilali, le 8 avr 2009 à 09:51:30

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

Répondre à Kaddour Jilali

4

lermite222, le 8 avr 2009 à 10:38:15

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+ L'expérience instruit plus sûrement que le conseil. (André Gide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

5

Kaddour Jilali, le 8 avr 2009 à 10:44:50

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.

Répondre à Kaddour Jilali

6

lermite222, le 8 avr 2009 à 10:57:50

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. L'expérience instruit plus sûrement que le conseil. (André Gide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

7

Kaddour Jilali, le 8 avr 2009 à 11:13:51

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....

Répondre à Kaddour Jilali

8

lermite222, le 8 avr 2009 à 11:52:05

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+ L'expérience instruit plus sûrement que le conseil. (André Gide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

9

Kaddour Jilali, le 8 avr 2009 à 13:33:11

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.

Répondre à Kaddour Jilali

10

lermite222, le 8 avr 2009 à 13:52:34

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.
L'expérience instruit plus sûrement que le conseil. (André Gide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

11

 Kaddour Jilali, le 9 avr 2009 à 17:21:15

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.

Répondre à Kaddour Jilali