Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Code fonction pour création code aléatoire

NONO14

XLDnaute Occasionnel
Bonjour à toutes et à tous,
Comment à partir de cette fonction, créée par patricktoulon que je remercie au passage, peut-on placer les chiffres en premiers et les lettres à la suite, pour former par exemple 123abc. Ce code viendra s'ajouter au 3 premières lettres du Nom de la TextBox1 comme indiqué dans le 2ème code.
Il faut donc au final que le code ressemble à ça : (si le NOM est DUPONT) DUP123abc
La fonction CodeEmp fonctionne bien, mais mélange les lettres et les chiffres.
J'espère avoir été assez clair dans mes explications.

VB:
Function CodeEmp(Optional NbChar& = 0, Optional NbNum& = 0)
Dim Y&, C&, L

    If NbChar = 0 Then NbChar = 2 + (Round(Rnd * 6))
    If NbNum = 0 Then NbNum = 2 + (Round(Rnd * 3))
    
    Set Dico = CreateObject("Scripting.Dictionary")
    StrLettres = Split(StrConv("abcdefghijklmnopqrstuvwxyz", vbUnicode), Chr(0))
    StrChiffres = Split(StrConv("0123456789", vbUnicode), Chr(0))
    
    Do While Dico.Count < NbChar
        Y = Round(Rnd * UBound(StrLettres))
        Dico(StrLettres(Y)) = ""
    Loop
    
    Do While Dico.Count < NbChar + NbNum
        Y = Round(Rnd * UBound(StrChiffres))
        Dico(StrChiffres(Y)) = ""
    Loop
    
    L = Dico.Keys
    For C = 1 To 7
        y1 = Round(Rnd * UBound(L))
        y2 = Round(Rnd * UBound(L))
        yy = L(y1)
        L(y1) = L(y2): L(y2) = yy
    Next C
    
    CodeEmp = Join(L, "")
End Function

Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    With Me.TextBox3
        .Value = Left(Me.TextBox1, 3) & CodeEmp(3, 3)
        .SelStart = 100
    End With
        
    With Me.TextBox4
        .Value = CreatePassWord(5, 2)
        .SelStart = 100
    End With
End Sub
 
Solution
Voici la solution apportée par Jean marie et que je remercie encore

VB:
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 =...

NONO14

XLDnaute Occasionnel
Me voilà revenu. Désolé d'avoir tardé à te répondre.
Je n'ai pas testé ton code car il a fallut restructuré mon application, mais je vais m'en servir car je dois revoir le code agent et ta proposition va beaucoup m'aider en ce sens.
Encore mille excuses pour le retard de près d'une semaine.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…