Condition pour retirer des itérations dans for

Bonjour,

Je cherche une condition qui permet de ne pas repasser sur des colonnes "déja traité".

Si O1.Cells(1, i).Value = numero_reference j'aimerai ne pas repasser sur le i correspondant pour le prochain j.

Voici le code simplifié mettant en évidence le problème en espérant être assez claire:

O1 correspond à la feuille 1

'On repéte la prochaine opération 100 fois 
For j = 1 To 100

On parcourt les colonnes de la feuille 1
For i = 2 To 100

'Si on trouve le numéro de référence

If O1.Cells(1, i).Value = numero_reference Then
Msgbox("ça marche")
'J'aimerai ainsi que pour le prochain j il ne repasse pas sur ce i car O1.Cells(1, i).Value = numero_reference a déja été réalisé pour le i.
End If
Next
Next

Merci et bonne journée

Bonjour, je ne comprends pas à quoi sert ton j ? Serait-il possible d'avoir plus de contexte ? ^^

Bonne journée.

Bonjour,

Pourquoi répéter la boucle intérieure 100 fois ? Une fois ne suffit pas ?

La feuille 1 contient les références des produits sur la première colonne. Lorsque un produit va en maintenance on incrémente le numéro de la maintenance sur la ligne de la référence.

La feuille 3 correspond à un tableau à double entrée. Verticalement, sur la première colonne il y a les références des produits et horizontalement sur la première ligne les numéros de maintenances. Lorsque l'appareil a participé à la maintenance, on met la date de "participation".

La feuille 2 va être rempli avec les informations venant des deux feuilles précédentes.

Sub programme()

Dim reference_produit As String

Dim CL1 As Workbook
Dim O1 As Worksheet
Dim O2 As Worksheet
Dim O3 As Worksheet

Dim i As Integer 
Dim k As Integer
Dim u As Integer

Dim numero_maintenance As String
Dim Nombre_maintenance As Integer

'initialisation du nombre_maintenance
Nombre_maintenance = 0

'initialisation de u variable intermédiaire pour connaitre le nombre de maintenance
u = 2

Set CL1 = Workbooks("classeur1.xlsm")
Set O1 = CL1.Sheets("feuille1")
Set O2 = CL1.Sheets("feuille2")
Set O3 = CL1.Sheets("feuille3")

'Recherche dans la feuille 1 de la référence du produit
'330 correspond au nombre de produits
For i = 1 To 330
'Si la référence du produit est détecté dans la feuille 1
If O1.Cells(i, 1).Value = reference_produit Then
'On parcourt les colonnes de la feuille 1 pour voir où s'arrête les numéros de maintenances 
While O1.Cells(i, u).Value <> ""
u = u + 1

Wend
'u permet de voir le nombre de maintenance associé à l'appareil
'On stocke les numéros de maintenance dans la variable numero de maintenance 
For j = 2 To u
numero_maintenance = O1.Cells(i, j).Value

'Recherche dans la feuille 3 de la référence
'330 correspond au nombre d'appareils
'le tableau étant à double entrée la première réf apparait à la seconde ligne
For y = 2 To 331
'si on trouve la référence dans la feuille 3
If O3.Cells(y, 1).Value = reference_produit Then
'initialisation de f permettant de connâitre le nombre de maintenance deja incrémenté sur la feuille 3
f = 2
While O3.Cells(1, f).Value <> ""
f = f + 1
Wend

'on parcourt les colonnes de la feuille 3
For a = 2 To f

'si on trouve le numéro de maintenance venant d'être stocker dans la colonne de la feuille 3
If O3.Cells(1, a).Value = numero_maintenance Then

'on remplit des infos sur la feuille 2

O2.Cells(j + 2, 8).Value = O3.Cells(y, a).Value
'O3.Cells(y, a).Value correspond à la date de participation
(Une fois que l'information de la feuille 2 a été rempli lors de la prochaine incrémentation j'aimerai qu'il ne prenne pas en compte ce a. 

End If
End If
Next
End If
Next

Next

 End If

Next

End Sub

Le problème ici est que sur la feuille 3 il peut y avoir plusieurs fois le numéro de maintenance sur la première ligne et donc la valeur O3.Cells(y, a).Value est toujours celle pour le dernier "a".

En espérant avoir donner un peu plus de contexte

Rechercher des sujets similaires à "condition retirer iterations"