combinaison de 5 chiffres

  • Initiateur de la discussion Initiateur de la discussion achile.2.3
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

achile.2.3

XLDnaute Nouveau
Bonjour,

je souhaiterai obtenir toutes les combinaisons de 5 chiffres (sans doublons), sous forme de tableau excel

exemple
j'ai 20 numéros (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)
j'aimerai obtenir TOUTES LES COMBINAISONS de 5 chiffres dans n'importe quel sens (avec 14, puis 15, puis 16, puis 17, puis 18, puis 19, puis 20 numéros) - il doit bien y avoir des formules pour ça...

1 5 3 8 9
18 20 11 6 7
3 6 8 4 1
6 7 5 12 18
etc etc etc

si quelqu'un peut m'aider SOUS FORME DE TABLEAU EXCEL
je ne connais pas grand chose au formule
Merci
Achile
 
Re : combinaison de 5 chiffres

Re...
EXemple intéressant


Bien que la récursivité doit à mon avis être utliser pour remplacer l'imbrication de plusieurs boucle.
Je suis plus nuancé. Dans l'exemple que je donne pour la suite du Fibonacci, je préfère la solution non récursive qui me donne un résultat quasi instantané pour le quarantième terme à la solution récursive qui demande 56 secondes de patience.
Je pense que la nature du problème à traiter peut conduire à privilégier tantôt l'une tantôt l'autre solution.
En tous cas, c'est une question intéressante...​
ROGER2327
#2884
 
Re : combinaison de 5 chiffres

Suite...
Je me suis aperçu que les comparaisons que nous faisons sont biaisées par le fait que nos procédures respectives ne font pas la même chose. (La mienne arrange les données qui sont dans la colonne A, qu'elles soient les entiers de 1 à 20 ou autre chose ; de plus elle prévoit des arrangements par 3, 4,... et pas seulement par 5.)
Si j'adapte la version non récursive pour faire exactement la même chose que votre procédure, j'obtiens le classeur ci-joint.
La rapidité est la même.
ROGER2327
#2885
 

Pièces jointes

Re : combinaison de 5 chiffres

Bonjour à tous,
J'utilise la macro récursive de Roger (Fichier "Arrangement Recursif 2875") qui, sur mon PC, termine au bout de 48 sec. (un peu plus lent !)
Je souhaiterais une modification dans le code:
- toujours 5 nombres mais de 1 à 49
- pas plus de 2 nombres dans une tranche (unité,dizaine...quarantaine)
ex: 1 2 10 11 20 ok
mais 1 2 3 10 11 20 non car 3 unités.
- au maximum 3 nombres pairs parmi les 5 nombres.

Je serais bien curieux de savoir si la liste des combinaisons passera dans une seule colonne avec les 65500 lignes d'Excel 2003?
et la durée de la procédure?
merci et bon AM
 
Re : combinaison de 5 chiffres

Bonjour JJ1
Je ne vois pas bien l'intérêt d'écrire les 1 208 205 arrangements qui répondent à vos conditions, mais pourquoi pas...
Ce code fait le boulot :
Code:
[COLOR="DarkSlateGray"][B]Private Sub Arrangements_Click()
Dim t As Single
   t = Timer
   tata_49
   MsgBox Round(Timer - t, 2) & " s"
End Sub

Sub tata_49()
Dim i&, j&, k&, l&, m&, y&, z&
Dim sDat(1 To 65000, 1 To 19)
   Range("C1:U65000").ClearContents
   y = 1
   For i = 1 To 45
      For j = i + 1 To 46
         For k = j + 1 To 47
            For l = k + 1 To 48
               For m = l + 1 To 49
                  If i Mod 2 + j Mod 2 + k Mod 2 + l Mod 2 + m Mod 2 > 1 Then
                     If (i < 10) + (j < 10) + (k < 10) + (l < 10) + (m < 10) > -3 Then
                        If (i > 39) + (j > 39) + (k > 39) + (l > 39) + (m > 39) > -3 Then
                           If (i > 9) * (i < 20) + (j > 9) * (j < 20) + (k > 9) * (k < 20) + (l > 9) * (l < 20) + (m > 9) * (m < 20) < 3 Then
                              If (i > 19) * (i < 30) + (j > 19) * (j < 30) + (k > 19) * (k < 30) + (l > 19) * (l < 30) + (m > 19) * (m < 30) < 3 Then
                                 If (i > 29) * (i < 40) + (j > 29) * (j < 40) + (k > 29) * (k < 40) + (l > 29) * (l < 40) + (m > 29) * (m < 40) < 3 Then
                                    z = z + 1
                                    sDat(z, y) = i & "-" & j & "-" & k & "-" & l & "-" & m
                                    If z = 65000 Then
                                       y = y + 1
                                       z = 0
                                    End If
                                 End If
                              End If
                           End If
                        End If
                     End If
                  End If
               Next m
            Next l
         Next k
      Next j
   Next i
   Range(Cells(1, 3), Cells(65000, 21)) = sDat
   Erase sDat
End Sub[/B][/COLOR]
Il y a juste un problème : ce code s'exécute en 18 minutes et 9 secondes sur ma machine, dont guère plus de 18 minutes et 2 secondes pour la seule ligne
Range(Cells(1, 3), Cells(65000, 21)) = sDat !!!
Merci, Bill, c'est merveilleux.
De la patience, donc !​
ROGER2327
#3137
 

Pièces jointes

Re : combinaison de 5 chiffres

Bonjour Roger, le Forum
Bravo pour cette adaptation du premier code, j'utilisais MOD() en formule mais pas en VBA.
Malheureusement, je pensais être en dessous d'1 million de combinaisons (limite supérieure d'Excel2007) pour une colonne.
Je vais utiliser ce code en refléchissant au moyen de le faire passer dans une colonne...
Merci encore Roger (voir MP)
A bientôt pour une éventuelle suite...
on passe de 48 sec à 18minutes! il va falloir que je pense à investir dans un 16 coeurs!!!!!!
 
Re : combinaison de 5 chiffres

Re,
Je viens de faire tourner ta macro en à peine 4 minutes ? j'ai utilisé Excel 2007 en remplaçant 65000 par 900000?
Résultat: 2 colonnes C et D : une de 900000 combinaisons et la 2ème s'arrête à la ligne 308025 par la combinaison 29-38-39-48-49
Merci, ton code est très efficace!
Bon AM
 
Dernière modification par un modérateur:
Re : combinaison de 5 chiffres

Re...
Avez-vous pensé aussi à remplacer
Code:
[COLOR="DarkSlateGray"][B]Dim sDat(1 To 65000, 1 To [COLOR="Red"]19[/COLOR])
   Range("C1:[COLOR="Red"]U65000[/COLOR]").ClearContents
'(...)
   Range(Cells(1, 3), Cells(65000, [COLOR="Red"]21[/COLOR])) = sDat
[/B][/COLOR]
par
Code:
[COLOR="DarkSlateGray"][B]Dim sDat(1 To 900000, 1 To [COLOR="Red"]2[/COLOR])
   Range("C1:[COLOR="Red"]D900000[/COLOR]").ClearContents
'(...)
   Range(Cells(1, 3), Cells(900000, [COLOR="Red"]4[/COLOR])) = sDat
[/B][/COLOR]
ROGER2327
#3147
 
Dernière édition:
Re : combinaison de 5 chiffres

Bonjour Roger,
Non je n'ai modifié que le nombre de lignes (900000) et pas les colonnes.
Ce matin j'ai fait mieux: j'ai enlevé la condition If pour avoir les 2 millions de combinaisons sur 3 colonnes concaténées en à peine 2 minutes.....(j'avais fermé toutes les autres applis, dont internet, uniquement Excel 2007...)
Pas mal comme record non?
Merci et bonne journée
 
Re : combinaison de 5 chiffres

Bonjour à tous
À JJ1 :
Suite à votre message personnel, je dépose ici un essai visant à répondre à votre demande :
(…) Je voudrais supprimer les 2 test existants (parité et nb) et remplacer par un unique test:

la combinaison de 5 nombres de 1 à 49 est écrite si au moins 2 nombres(ou plus) de la combinaison sont présents en plage H$1:AF$1, sinon la macro passe à la combinaison suivante. (…)
Dites-moi si j'ai bien compris votre demande.
ROGER2327
#4533


Vendredi 13 As 138 (Moustaches du Dr Faustroll, ST)
25 Brumaire An CCXIX
2010-W46-1T01:08:58Z
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
927
Réponses
9
Affichages
898
Retour