Programme VBA

Bonjour, Je voudrais savoir comment obtenir des séquences de quatre caractères (2chiffres, 2 lettres) avec une programmation vba. Ces séquences doivent être différentes.

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour
    sans doublons
    nbre de combinaisons différentes: 10*10*26*26= 67600

    Sub test()
    Dim nbre As Long
    nbre = 100
    If nbre < 67600 Then sequences_uniques nbre
    End Sub
    
    '---------
    
    Sub sequences_uniques(fin)
    Dim cptr As Long, xxx As Byte
    Dim uniq As Object
    Dim texto As String, liste
    
    Set uniq = CreateObject("scripting.dictionary")
    
    Range("C1:C10000").Clear
    Randomize
    For cptr = 1 To fin
         texto = ""
         'tirage chiffres
         For xxx = 1 To 2
              texto = texto & CStr(Int(Rnd * 10))
         Next
         'tirages lettres
         For xxx = 1 To 2
              texto = texto & Chr(Int(Rnd * 26) + 65)
         Next
         If Not uniq.exists(texto) Then
              uniq.Add texto, texto
          Else
              cptr = cptr - 1
         End If
     Next
     liste = uniq.items
     Range("C1:C" & UBound(liste) + 1) = Application.Transpose(liste)
     
    End Sub
    
    

    1. Je me retrouve plus dans la programmation. j'ai encore besoin de vous. Lorque j'ai entrer le programme comment je lapplique a ma feuille excel?
    2. Contributeur
      quelle version Excel?
    3. Word 2007
    4. Pardon excel 2007
    5. Contributeur
      tu fais un copier de la macro
      dans XL Alt+F11
      insertion- module
      coller

      Si tu n'as pas pas l'onglet développeur
      Cliquer sur le bouton Office,
      puis sur le bouton Options Excel.
      Cliquer sur le menu Standard.
      Cocher l'option Afficher l'onglet Développeur dans le ruban.
      Cliquer sur le bouton OK pour valider.

      Active le ruban développeur
      dans le groupe "création"
      mode création-insérer
      dans contrôle de formulaire, cliquer sur le bouton
      le dessiner sur la feuille et affecter la macro
      Cliquer sur le bouton OK pour valider.

      si les macros ne sont pas activées
      Cliquer sur le bouton Office,
      puis sur le bouton Options Excel.
      Cliquer sur gestion confidentialité
      Cliquer sur bouton paramètre de gestion..
      Cliquer sur paramètres macros
      cocher "activer toutes les macros

      ..
  2. Modérateur
    Bonjour,
    Une solution, même si ce n'est pas la meilleure...
    Sub SequencesAleatoires()
    Dim Carac As Byte
    Dim Tablo() As String
    
    Tablo = Split("a;z;e;r;t;y;u;i;o;po;q;s;d;f;g;h;j;k;l;m;w;x;c;v;b;n;0;1;2;3;4;5;6;7;8;9;A;Z;E;R;T;Y;U;I;O;P;Q;S;D;F;G;H;J;K;L;M;W;X;C;V;B;N", ";")
    For Carac = 1 To 4
        Randomize
        Cells(1, 1) = Cells(1, 1) & Tablo(CInt(Rnd * 62))
    Next
    End Sub

    N'hésite pas à poser des questions pour une meilleure compréhension.
    1. Modérateur
      Salut,
      Malgré le possible abandon du sujet par sa créatrice, je me permet de revenir ici. Au vu de la tienne Michel, je me suis rendu compte que ma solution ne répondait pas aux contraintes imposées.
      J'ai donc refait le code en conservant mon schéma initial...
      J'obtiens maintenant :
      Sub SequencesAleatoires()
      Dim Carac As Byte
      Dim Lign As Long
      Dim TabloLettres() As String
      
      TabloLettres = Split("a;z;e;r;t;y;u;i;o;p;q;s;d;f;g;h;j;k;l;m;w;x;c;v;b;n;A;Z;E;R;T;Y;U;I;O;P;Q;S;D;F;G;H;J;K;L;M;W;X;C;V;B;N", ";")
      Randomize
      For Lign = 1 To 100
          For Carac = 1 To 2
              Cells(Lign, 1) = Cells(Lign, 1) & CStr(CInt(Rnd * 10))
          Next
          For Carac = 1 To 2
              Cells(Lign, 1) = Cells(Lign, 1) & TabloLettres(CInt(Rnd * 51))
          Next
      Next
      End Sub

      Le problème se situe dans les chiffres.....
      1- Lorsqu'il me "tire" un zéro en début de séquence, il ne l'affiche pas, même si, je pense, CStr() a transformé mon 0 en "0"...
      Bon ce souci est vite réglé en mettant le format de cellule sur "texte" au lieu de "standard", mais je préfèrerais comprendre mon erreur.
      2- Mon tirage aléatoire de chiffres (identique au tien) me sort des 10... Je me retrouve donc parfois avec des séquences de 3 chiffres et 2 lettres...

      Mais pourquoi donc???
      1. Contributeur
        Bonjour,

        a mon avis, tu envoies directement dans une cellule au lieu de concaténer par une variable string: comme il y a 2 lettres, XL gère le tout en tant que texte et accepte le zéro en t^te
        Michel
        1. Modérateur
          Merci.
          Pour le 1- Ok, j'ai modifié en passant par une variable "String" et ça fonctionne.
          Maintenant, pour le 2- j'ai toujours des 10 avec CStr(CInt(Rnd * 10)) et toi non... Donc il arrive que j'obtienne des séquences de 3 chiffres (ex : 108) et 2 lettres...

          J'ai testé ta solution sur 10 000 lignes. Il ne me sort que 4 caractères, 2 chiffres et deux lettres. Ma solution, sur 100 lignes me sort (au dernier essai) 5 séquences de 5 caractères, 3 chiffres et deux lettres. Or notre méthode de tirage aléatoire des nombres est identique :
          Ton code :
          Dim xxx As Byte
          Dim texto As String
          Randomize
          For cptr = 1 To fin
               texto = ""
               'tirage chiffres
               For xxx = 1 To 2
                    texto = texto & CStr(Int(Rnd * 10))
               Next
          

          Mon code :
          Dim Carac As Byte
          Dim Val As String
          
          Randomize
          For Lign = 1 To 100
          Val = ""
              For Carac = 1 To 2
                  Val = Val & CStr(CInt(Rnd * 10))
                  Cells(Lign, 7) = Val
              Next
        2. Merci beaucoup pour l'aide dsl de rpdre que maintenant. Je vais voir ce que ca donne.
        3. Modérateur
          Salut laetitia,
          Utilise la méthode de michel :
          1- elle fonctionne,
          2- elle est plus rapide...
        4. Ok merci encore pour l'aide
        5. Contributeur
          bonjourLaetitia,

          Pijaku,

          essaies cette tite démo
          Sub zero()
          MsgBox 0 & "A"
          End Sub

          heu.... Val est un mot réservé par VBA

          essaies