A voir également:
- Programme VBA
- Programme demarrage windows - Guide
- Programme word gratuit - Guide
- Message programmé - Guide
- Mettre en veille un programme - Guide
- Desinstaller un programme - Guide
4 réponses
Bonjour
sans doublons
nbre de combinaisons différentes: 10*10*26*26= 67600
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
Bonjour,
Une solution, même si ce n'est pas la meilleure...
N'hésite pas à poser des questions pour une meilleure compréhension.
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.
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 :
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???
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???
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
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
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 :
Mon code :
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
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
..