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.
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