Générer une clé primaire : Max(Tableau)

Bonsoir,

Je cherche à générer en dernière ligne une Clé primaire tel que nouvelle clé = max(ancienne clé) +1

Exemple :

Colonne A

S00064

S00110

S00109

S00099

S00080

S00070

S00111

Je joint un fichier exemple sur lequel j'arrive à générer la nouvelle clé avec des formules.

J'ai essayé d'adapter mon raisonnement sur VBA mais je n'arrive pas à récupérer la valeur maximum de mes anciennes clés dans ma variable Max. J'utilise un tableau pour récupérer toutes les valeurs des anciennes clés, est-ce une solution viable?

Ci-après le code :

Sub Test()

Dim Derln, i, Max As Integer
Derln = Range("A" & Rows.Count).End(xlUp).Row
Dim My_Tab()
ReDim My_Tab(Derln)

        For i = 0 To Derln
            My_Tab(i) = Val(Right(Range("A" & i + 1), 5))
                If i = 0 Then
                Else
                    If My_Tab(i) > My_Tab(i - 1) Then
                        Max = My_Tab(i)
                    Else
                        Max = My_Tab(i - 1) + 1
                    End If
                End If
        Next
'Range("A" & Derln + 1) = Max
If Len(Max) = 3 Then
Range("A" & Derln + 1).Value = "S00" & Max
    If Len(Max) = 2 Then
    Range("A" & Derln + 1).Value = "S000" & Max
        If Len(Max) = 1 Then
        Range("A" & Derln + 1).Value = "S0000" & Max
        End If
    End If
End If

End Sub

Je sais que le passage ..

                    If My_Tab(i) > My_Tab(i - 1) Then
                        Max = My_Tab(i)
                    Else
                        Max = My_Tab(i - 1)
                    End If

.. n'est pas bon car il ne compare que 2 valeurs et non l'ensemble de mon tableau... mais là je bloque.

A vous lire

14test.xlsm (19.86 Ko)

Bonjour,

Une proposition !?

Cdlt.

Public Sub PrimaryKey()
Dim lastRow As Long, a, b() As Long, i As Long
    With ActiveSheet
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        a = .Cells(2, 1).Resize(lastRow - 1)
        ReDim b(1 To UBound(a))
        For i = LBound(a) To UBound(a)
            b(i) = Mid(a(i, 1), 2, Len(a(i, 1)))
        Next i
        .Cells(2, 2).Value = Format(Application.Max(b) + 1, """S""00000")
    End With
End Sub

Bonjour,

Ce code fonctionne parfaitement! Je me suis appuyé sur ce dernier pour ajuster le mien (que je comprends mieux), ce qui donne :

Sub Test()
Dim derln, i As Integer, a() As Integer
    With ActiveSheet
        derln = .Range("A" & Rows.Count).End(xlUp).Row
        ReDim a(derln)
            For i = 0 To derln
                a(i) = Val(Right(.Range("A" & i + 1), 5))
            Next
            .Range("A" & derln + 1) = Format(Application.Max(a()) + 1, """S""00000")
    End With
End Sub

Le sujet est clos mais j'aimerais approfondir :

Y-a-t'il un intérêt à utiliser .Cells plutôt que .Range ou est ce une question d'habitude?

Je ne comprend pas l'utilisation de votre variable a. Quelle information renvoie-t-elle?

Quoi qu'il en soit merci pour votre aide!

Bien à vous.

Rechercher des sujets similaires à "generer cle primaire max tableau"