Excel VBA: générer des codes alphanumérique aléatoires

Ce petit tutoriel vidéo vous montre comment générer un (ou des) code(s) aléatoire(s).
Il montre comment utiliser les fonctions VBA rnd et randomize pour générer des valeurs aléatoires. Comme vous pouvez le voir cet exemple permet de générer des codes composés de lettres et chiffres avec la possibilité de définir la longueur du code, le premier caractères du code et le nombre de codes à générer.

 

Ce code peut être modifié pour s’adapter a votre besoin comme par exemple générer des code en Hexadécimal, ou uniquement de lettres etc…

Tuto excel VBA de génération de code alphanumériques aléatoires avec rnd() 

 

Utilisation de la fonction vab rnd():

Syntaxe :    aela = Int ((valeurSup- valeurInf+ 1) * Rnd + valeurInf)

Ex :    Int ((200 – 150 + 1) * Rnd + 150)    renvoie une valeur entre 150 et 200
Si vous constatez que vous n’obtenez pas un nombre vraiment aléatoire, vous pouvez utiliser la fonction RANDOMIZE pour modifier la valeur d’amorçage(seed) du générateur de nombres aléatoires. L’appel à la fonction RANDOMIZE doit précéder l’appel de RND.

Dim alea As Integer Randomize alea= Int ((300 – 200 + 1) * Rnd + 200)

 

Ci dessous le code complet de l’application.

Fonction VBA de génération de codes alphanumériques aléatoires avec la fonction Rnd()

Public Sub genererCode()
   Dim res As String  ' Champ utilisé pour composer le code
   Dim nbCar  As Integer  ' nombre de caratère coposant le code
   Dim nbCode As Integer  ' nombre de code à générer
   Dim firstCar As String ' premier caractère du code
   Dim value As Integer   ' utiliser pour génerer des valeur aléatoire
   
   ' récupération des données
    firstCar = Sheets("generateur").Range("D4")
    nbCar = Sheets("generateur").Range("C4")
    nbCode = Sheets("generateur").Range("B4")
    
    
    ' On nettoie la zone de cellules contenant les anciens codes
     
     Range(Cells(7, 4), Cells(7, 4).End(xlDown)).ClearContents
     Range(Cells(7, 4), Cells(7, 4).End(xlDown)).ClearFormats
     
     ' on boucle sur le nombre de code à générer que l'on
     ' placera a partir de la ligne 7 en collone D
     Dim i As Integer
     i = 7
     While (i < (6 + nbCode))
        ' on réinitialise le nouveau code avec le premier caractère commun
        res = firstCar
        
         
        ' on boucle sur chaque caractère du code à générer
        ' chaque caratère généré est ajouter a la variable res (code complet à générer)
        For j = 1 To nbCar - 1
        ' on change le seed(graine) du randomizer
          Randomize
            ' on génère un nombre aléatoire entre 0 et 51.
            ' pour être équitable, jusqu'a 26 ce cera un chiffre, au dessus une lettre
            value = CInt(Int((51 * Rnd())) + 1)
         
            If (value < 26) Then
                res = res & Str(value Mod 9) ' chiffre entre 0 et 9
            Else
                res = res & Chr(value + 39) 'code ascci
            End If
        Next j
        res = Replace$(res, " ", "")
        If alreadyExist(res, "generateur", "D7", Cells(7, 4).End(xlDown).Address()) Then
        
            ' ne pas utiliser ce code et en regenénérer un nouveau
        Else
            ' on ajoute le code généré dans la feuille
            Sheets("generateur").Cells(i, 4) = res
            ' on encadre la cellule ou on vien de déposer le code
            Sheets("generateur").Cells(i, 4).Borders.Weight = xlThin
            
            i = i + 1
        End If
    Wend
    
End Sub

Public Function alreadyExist(ByVal code As String, ByVal sheetName As String, ByVal cellStart As String, ByVal cellEnd As String) As Boolean
    With Worksheets(sheetName).Range(cellStart & ":" & cellEnd)
    Set C = .Find(code, LookIn:=xlValues)
    If Not C Is Nothing Then
       alreadyExist = True
    Else
    'Code si pas trouvee
        alreadyExist = False
    End If
End With

End Function