Sub testNumberCode()
MsgBox Left("DUPOND", 3) & CodeEmp(3, 3)
End Sub
' Fonction CodeEmp qui génère un code avec des chiffres suivis de lettres
Function CodeEmp(Optional NbChar& = 0, Optional NbNum& = 0) As String
Dim Y&, DicoLettres As Object, DicoChiffres As Object
Dim StrLettres() As String, StrChiffres() As String, CodeFinale As String
' Initialisation des valeurs par défaut si elles ne sont pas spécifiées
If NbChar = 0 Then NbChar = 2 + (Round(Rnd * 6)) ' Nombre de lettres
If NbNum = 0 Then NbNum = 2 + (Round(Rnd * 3)) ' Nombre de chiffres
' Création de deux dictionnaires distincts
Set DicoLettres = CreateObject("Scripting.Dictionary")
Set DicoChiffres = CreateObject("Scripting.Dictionary")
' Tableaux contenant les lettres et chiffres
StrLettres = Split(StrConv("abcdefghijklmnopqrstuvwxyz", vbUnicode), Chr(0))
StrChiffres = Split(StrConv("0123456789", vbUnicode), Chr(0))
' Remplir le dictionnaire avec les lettres
Do While DicoLettres.Count < NbChar
Y = Round(Rnd * UBound(StrLettres))
DicoLettres(StrLettres(Y)) = ""
Loop
' Remplir le dictionnaire avec les chiffres
Do While DicoChiffres.Count < NbNum
Y = Round(Rnd * UBound(StrChiffres))
DicoChiffres(StrChiffres(Y)) = ""
Loop
' Créer la chaîne finale : d'abord les chiffres, ensuite les lettres
CodeFinale = Join(DicoChiffres.Keys, "") & Join(DicoLettres.Keys, "")
' Retourner le code généré
CodeEmp = CodeFinale
End Function