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

BL -  
ThauTheme Messages postés 1564 Statut Membre -
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

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    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