pas distribution ni permutation

f69815

XLDnaute Occasionnel
bonjour le forum,

est-il possible avec une macro ou formule d'avoir toutes les occurences possibles avec le nombres de 0 à 9 et les lettre de A à Z, rassemblées par 3.

ex : 000, 001, 002 ......ZZZ.

au début je pensais que cela correspondait au fonction distribution ou permutation.
j'ai donc trouvé sur le site VeriTi V 3, le site des amis d'Excel et OOo, une solution, mais celle ci, ne prend en compte qu'une fois chaque valeur, ex : 012, 013, 014....102.

auriez-vous une solution.
merci
 

Kotov

XLDnaute Impliqué
Re : pas distribution ni permutation

Bonsoir,

Voici une macro qui devrait répondre à ta demande
Je joins également un fichier pour la démo (cliques sur le bouton)

Code:
Sub Distribution()
Dim i&, ii&, iii&
Dim Tval(35)

For i = 48 To 57
Tval(i - 48) = Chr(i)
Next
For i = 65 To 90
Tval(i - 55) = Chr(i)
Next
Cells(1, 1).Select
For i = 0 To 35
    For ii = 0 To 35
         For iii = 0 To 35
            ActiveCell.Offset(1, 0).Select
            ActiveCell = Tval(i) & Tval(ii) & Tval(iii)
        Next iii
    Next ii
Next i
End Sub

Bonne soirée
Kotov
 

Pièces jointes

  • Distribution.xls
    30.5 KB · Affichages: 137
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Re : pas distribution ni permutation

Bonsoir,
je voudrais juste rebondir sur ce fil pour donner quelques chiffres...

Avec ce code, sous 2007, 51,3 secondes
En rajoutant Application.ScreenUpdating = False, 8,1 secondes

sous 2003, avec ce code : 26 secondes
en rajoutant Application.ScreenUpdating = False, 6,7 secondes

Qu'en penser?????
Le fait de ne pas rafraichir l'écran diminue la différence, mais 2007 semble quand même plus lent que 2003

C'était juste pour le fun, sachant que ce code remplit 46656 lignes

Bonne soirée
 

Kotov

XLDnaute Impliqué
Re : pas distribution ni permutation

Bonsoir BhBh,

Intéressant ton calcul de rapidité. 2007 plus lent que 2003, le progrès n'a pas que des avantages !
Personnellement je suis sur XL2007.

Cela dit tu as raison, c'est judicieux de rajouter Application.ScreenUpdating = False en début de macro, mais également Application.ScreenUpdating = True en fin de macro (je le signale pour les débutants en VBA).

Outre la désactivation de la mise à jour de l'affichage, pour la macro, je ne vois pas comment faire plus rapide, mais il y a peut être une autre façon de procéder.
Qu'en penses-tu ?

Private : merci pour ton gentil mot à l'occasion de mon anniversaire.

Code:
Sub Distribution()
Dim i&, ii&, iii&
Dim Tval(35)

For i = 48 To 57
Tval(i - 48) = Chr(i)
Next
For i = 65 To 90
Tval(i - 55) = Chr(i)
Next
[B] Application.ScreenUpdating = False [/B]
Cells(1, 1).Select
For i = 0 To 35
    For ii = 0 To 35
         For iii = 0 To 35
            ActiveCell.Offset(1, 0).Select
            ActiveCell = Tval(i) & Tval(ii) & Tval(iii)
        Next iii
    Next ii
Next i
[B] Application.ScreenUpdating = True [/B]
End Sub

Amitiés
Kotov
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Re : pas distribution ni permutation

RE-,
Salut Kotov, et re pour ton annif :)

C'est vrai, j'omets régulièrement de remettre à True, sachant, qu'en principe, la valeur de Application.ScreenUpdating revient à True en fin de code

Cependant, quelques codes nécessitent la remise à True, en fonction des instructions demandées, surtout si tu utilises un UserForm

En règle générale, ceci n'est pas nécessaire, mais pour inclure toutes les possibilités, il vaut mieux le faire....

Bonne soirée
 

ya_v_ka

XLDnaute Impliqué
Re : pas distribution ni permutation

Salut

De mon coté avec 2003, 32 secondes
avec updating false = bug sur next iii !!! (et j'ai mis le true à la fin !!!)


waooow avec le tableau ci-dessous 1.34 ! respect


ya'v
 
Dernière édition:

Kotov

XLDnaute Impliqué
Re : pas distribution ni permutation

Bonsoir ya_v_ka,

Bizarre ton bug sur Next iii (??)
Les 3 boucles (i, ii, iii) n'ont logiquement aucun lien avec la désactivation de l'affichage.

Je verrais plutôt une erreur de saisie

Bonne nuit
Kotov
 

Cousinhub

XLDnaute Barbatruc
Re : pas distribution ni permutation

RE-,

avec ce code, un peu plus rapide (utilisation d'un tableau en vba)

Code:
Sub Distribution()
t = Timer
Columns("A:A").NumberFormat = "@"
Dim i&, ii&, iii&
Dim Tval(35), total(0 To 46656, 1 To 1)

For i = 48 To 57
Tval(i - 48) = Chr(i)
Next
For i = 65 To 90
Tval(i - 55) = Chr(i)
Next
Cells(1, 1).Select
For i = 0 To 35
    For ii = 0 To 35
         For iii = 0 To 35
            total(a, 1) = Tval(i) & Tval(ii) & Tval(iii): a = a + 1
        Next iii
    Next ii
Next i
[A1:A46656] = total
MsgBox Timer - t
End Sub

1,7 seconde

mais aucun mérite, tu avais fourni le code pour les différentes combinaisons..
 

Kotov

XLDnaute Impliqué
Re : pas distribution ni permutation

Bravo BhBh,

Super ton record en 1,07 s !
J'ai toujours baigné dans l'esprit de compétition, alors quand je vois un beau record, j'applaudis des 2 mains !

Un contributeur peut aider un demandeur, mais quand 2 contributeurs se complètent, il n'y a que des gagnants.

Bonne journée
Kotov