Incrémentation dans une boucle for imbriquée

Fermé
LM.2g - 4 nov. 2016 à 16:53
LM.2g Messages postés 1 Date d'inscription lundi 7 novembre 2016 Statut Membre Dernière intervention 7 novembre 2016 - 7 nov. 2016 à 09:53
Bonjour,

J'ai beau avoir cherché, je n'arrive pas à trouver de solution à mon problème.
J'ai une macro où j'ai à un endroit deux boucle for imbriquées. La première parcourt une ligne composée d'heures (représentant des heures). La deuxième parcourt une colonne elle aussi composée d'heures et note dans une autre ligne quand les heures de la ligne correspondent aux heures de la colonne.
Ma macro fonctionne, mais seulement seulement très lentement et donc non exportable pour des centaines lignes comparées aux valeurs de la colonne...
J'aimerai que lorsque la valeur de la première ligne de la colonne de la deuxième boucle for soit trouvée elle ne soit plus cherchée dans toute la ligne associée à la première boucle for.
Bref, j'aimerai écrire :

l as long, k as long
k=0
For l=1 To...
For k=0 To...
...
k=k+1


Merci beaucoup d'avoir lu jusque ici !

Le code est assez compliqué ailleurs, j'ai essayé de formuler le plus clairement possible même si j'ai peur que ça ne soit pas le cas.

A voir également:

3 réponses

michelmmm Messages postés 81 Date d'inscription vendredi 11 janvier 2008 Statut Membre Dernière intervention 30 octobre 2022 2
4 nov. 2016 à 18:00
Bonjour,
Je te propose cela, (si j'ai bien compris ton problème)

De la 1ière cellule à la dernière cellule de la ligne
Valeur à chercher reçoit cellule de la ligne
De la 1ière cellule de la colonne à la dernière cellule de la colonne
Si Valeur à chercher égale cellule de la colonne
alors
Écrire Valeur à chercher
sinon
Finsi
Cellule de la colonne suivante
Cellule de la ligne suivante
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
4 nov. 2016 à 18:03
Bonsoir LM, Bonsoir le forum,

Une boucle For... Next s'incrémente seule. Quand tu veux sortir de la boucle il suffit d'utiliser Exit For. Ça donnerait un code du type :

For I = 1 To ...
     For J = 1 To ...
          If Cells(1, I).Value = Cells(J, 2).Value Then 
               '... ton code
               Exit For
          End If
     Next J
Next I

0
LM.2g Messages postés 1 Date d'inscription lundi 7 novembre 2016 Statut Membre Dernière intervention 7 novembre 2016
7 nov. 2016 à 09:53
Bonjour,

Je vous remercie pour vos réponses elle m'ont déjà aider à gagner du temps !

Je vais cependant essayer de reformuler ma question (le lundi étant plus clair que le vendredi).

J'ai une colonne A de données horaires ( associées à une colonne B), qui correspondes aux heures auxquelles des maintenances doivent être réalisées dans un onglet 1.
Une ligne 2 correspondant aux heures de service réelle d'un système selon la date dans un onglet 2.
Une ligne 4 affichant la valeur de la colonne B de l'onglet 1 si la valeur de la colonne A vaut celle de la ligne 2, toujours selon la date.


J'aimerai que quand une valeur de A est trouvée (et donc reportée dans la ligne 4) elle ne soit plus recherchée par la suite. Je cherche donc à réduire le nombre de cellules/ligne de A parcourues si une valeur de A et de 2 correspondes.


J'espère que cela clarifie ma question.

Merci beaucoup pour votre aide.
0