Programme VBA

Laetitia -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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

michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
Laetitia
 
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?
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
quelle version Excel?
0
Laetitia
 
Word 2007
0
Laetitia
 
Pardon excel 2007
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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


..
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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.
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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???
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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
0
Laetitia
 
Merci beaucoup pour l'aide dsl de rpdre que maintenant. Je vais voir ce que ca donne.
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
Salut laetitia,
Utilise la méthode de michel :
1- elle fonctionne,
2- elle est plus rapide...
0
Laetitia
 
Ok merci encore pour l'aide
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
bonjourLaetitia,

Pijaku,

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

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

essaies
0