Calcul de combinaisons

  • Initiateur de la discussion Initiateur de la discussion Moa
  • 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 !

M

Moa

Guest
Bonjour à tous !

Voilà, je cherche à faire une macro, qui me donnerait toutes les combinaisons possibles de trois lettres mais sur plusieurs lignes.

J'explique :

En A1 = A, A2 = B, A3 = C.

Là c'est assez simple :

ABC, ACB, BAC, BCA, CAB, CBA

Mais ce que je cherche à faire est plus complexe :

Je voudrais arrivé à faire la même chose, mais en partant de trois colonnes sur dix lignes et en ayant le choix, de ne pas remplir une cellule.

Exemple :

En A1 = A, en B1 = B, en C1 = C
En A2 = A, en B2 = B
En A3 = A, en B3 = B, en C3 = C
En A4 = A
en A5 = A,...................en C5 = C

Et j"aimerais qu'excel me donne

AAAAA, AAAAC, AABAA, AABAC.......

Pas facile..héhé

En fait j'ai trouvé sur le net une macro, qui fait à peu près cela mais sur une une seule ligne, et voici ce qu'elle fait :

En A1 = A, en B1 = B, en C1 = C ( donc tout sur la même ligne)

Résultat : ABC, ACB, BAC, BCA, CAB, CBA.

Je vous donne cette macro :

Option Base 1
Dim Combine(10)
Sub RunCombinaison()
For Each Chif In Selection
i = i + 1
Combine(i) = Chif
Next
CalculCombine Combine, i, 0
End Sub
Sub CalculCombine(Combine As Variant, Result, Traitement)
Application.ScreenUpdating = False
Dim Combine2(10)
If Result < 1 Then
Selection.Offset(1, 0).Activate
Selection.Value = Combine
Else
For i = 1 To Result
z = Combine(i)
For j = 1 To Result + Traitement - 1
Combine2(j) = Combine(j + (j >= i) * -1)
Next j
Combine2(j) = z
CalculCombine Combine2, Result - 1, Traitement + 1
Next i
End If
End Sub


En fait elle donne la possibilité de faire le calcul de A1 à H1, soit sur huit valeurs.

J'ai donc éssayé de la comprendre et de la modifier, pour mon cas, mais mes faibles connaissances en Vba, ne peuvent m'aider à résoudre ce problème.

Aussi si l'un d'entre vous c'est déjà posé ce genre de question et a trouvé une solution.....merci à lui de me faire part de sa connaissance.

Merci d'avance de votre aide

@ +

Moa
 
Salut Moa,

Eh! non, pas facile, comme tu dis !
Et une question pareille à la réouverture d'XLD (longue vie à XLD) !

Heureusement que j'ai un week-end pas trop chargé.
Mais j'ai déjà une petite idée, par formules évidemment.

Le temps d'essayer, de voir que cela ne marche pas, d'y penser cette nuit, ... (ah! un homme dans mes rêves ..., cela ne m'était jamais arrivé)

A (très) bientôt.
André.
 
Salut Moa,

J'ai regardé ta question plus à fond, mais je ne comprends pas exactement ce que tu veux faire, notamment lorsque tu écris "je voudrais qu'Excel me donne ...".

Pourrais-tu me faire un exemple et me l'envoyer par courriel (pour ne pas surcharger XLD) ?

André.
 
Salut Moa , André et le forum

Voila pas compliquer a comprendre mais long comme Macro 🙂

Toutes les combinaisons de 10 caracteres pour 3 colonnes et 10 rangées

Sub all()
rang = 1
Dim code1(3)
Dim code2(3)
Dim code3(3)
Dim code4(3)
Dim code5(3)
Dim code6(3)
Dim code7(3)
Dim code8(3)
Dim code9(3)
Dim code10(3)
For i = 1 To 3
code1(i) = Cells(1, i)
code2(i) = Cells(2, i)
code3(i) = Cells(3, i)
code4(i) = Cells(4, i)
code5(i) = Cells(5, i)
code6(i) = Cells(6, i)
code7(i) = Cells(7, i)
code8(i) = Cells(8, i)
code9(i) = Cells(9, i)
code10(i) = Cells(10, i)
Next i
For a = 1 To 3
For b = 1 To 3
For c = 1 To 3
For d = 1 To 3
For e = 1 To 3
For f = 1 To 3
For g = 1 To 3
For h = 1 To 3
For i = 1 To 3
For j = 1 To 3
combine$ = code1(a) & code2(b) & code3(c) & code4(d) & code5(e) & _
code6(f) & code7(g) & code8(h) & code9(i) & code10(j)
If Len(combine$) = 10 Then
Cells(rang, 5).Value = combine$
rang = rang + 1
End If
Next j
Next i
Next h
Next g
Next f
Next e
Next d
Next c
Next b
Next a
End Sub

Mytå
 
Gros gros Merci Mytå, cela marche impec.

J'avais oublié de préciser, qu'il fallait que les combinaisons ne soient pas concaténées, mais c'est pas grave, j'ai fait une macro pour convertir derrière.

En fait je n'aurais jamais pensé que cela soit aussi simple.J'étais parti dans des délires pas possible.

Encore bravo et merci à Toi.

@ +

Moa
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
482
Réponses
10
Affichages
714
  • Question Question
Microsoft 365 VBA Transpose
Réponses
11
Affichages
727
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
45
Retour