Calcul de combinaisons

  • Initiateur de la discussion Moa
  • Date de début
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
 
A

andré

Guest
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é.
 
A

andré

Guest
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é.
 
M

Mytå

Guest
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å
 
M

Moa

Guest
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
 

Statistiques des forums

Discussions
314 644
Messages
2 111 533
Membres
111 180
dernier inscrit
Angeline4