Problème de génération de codes uniques avec exception

Fermé
BL - 19 mars 2015 à 16:18
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 19 mars 2015 à 17:17
Bonjour,
Voici mon problème :
Je cherche à créer une macro qui génère des codes de la forme "OM-xxxx" sur la colonne 19 de mon tableau. Chaque code doit être unique sauf dans le cas où ce code a déjà été attribué sur une autre ligne dont le contenu textuel de la cellule colonne 7 est le même que celui dont on cherche à générer le code.

Je ne sais pas si c'est bien clair mais voici la macro que j'ai créé :


C = 1
             
   For L = 1 To Range("A" & Rows.Count).End(xlUp).Row

       If Cells(L, 19).Value = "" Then

            For Ligne = 1 To Range("A" & Rows.Count).End(xlUp).Row
                If Cells(Ligne, 19).Value = "OM-" & Format(C, "0000") Then
                    If Cells(Ligne, 7).Value = Cells(L, 7).Value  And Ligne <> L Then
                         Exit For
                    Else
                        C = C + 1
                    End If
                End If
            Next Ligne

            Cells(L, 19).Value = "OM-" & Format(C, "0000")
            C = C + 1     
    
        End If
         
   Next L



Le problème de ma macro est qu'elle ne prend pas en compte l'exception à l'unicité du code.

J'ai longuement réfléchi à ce problème et ai cherché des possibles erreurs de syntaxe sur internet mais je n'ai rien trouvé.

Est-ce que quelqu'un pourrait m'éclairer sur ce problème ?
Je vous remercie d'avance.

1 réponse

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
19 mars 2015 à 17:17
Bonjour BL, bonjour le forum,

Peut-être comme ça (non testé) :

Sub Macro1()
Dim C As Integer
Dim R As Range

C = 1
For L = 1 To Range("A" & Rows.Count).End(xlUp).Row
    If Cells(L, 19).Value = "" Then
        If Cells(L, 7) <> "" Then Set R = Columns(7).Find(Cells(L, 7).Value, , xlValues, xlWhole)
        If Not R Is Nothing And R.Row <> L Then Cells(L, 19).Value = Cells(R.Row, 19).Value
        If R Is Nothing Then
            Cells(Ligne, 19).Value = "OM-" & Format(C, "0000")
            C = C + 1
        End If
    End If
Next L
Range("A1").Select
End Sub


Si tu nous fournissais un petit fichier exemple on pourrais tester avant de te proposer une solution...
0