VBA - combinaisons n chiffres x iterations

Bonjour,

Je voudrais réaliser une macro dans une variable tableau permettant de générer les combinaisons possibles de n chiffres sur x itérations. Ces 2 valeurs seront renseignées au début de la macro.

Je m'explique par un exemple être plus concret.

2 chiffres & 3 itérations --

1 1 1

2 1 1

1 2 1

2 2 1

1 1 2

2 1 2

1 2 2

2 2 2

3 chiffres & 2 itérations --

1 1

2 1

3 1

1 2

1 3

2 2

2 3

3 2

3 3

J'ai passé du temps sur cette macro, mais impossible de la réaliser et encore moins de la rendre paramétrable en fonction du nombres de chiffres et du nombres d'itérations.

Pour un gain de temps, je désire la créer dans une variable tableau et la transférer ensuite dans une feuille Excel.

Un grand merci pour votre aide ...

bonsoir

j'avais proposé il y a quelque temps cette fonction personnalisée

Function cvntocomb(n, bs, lg) As String
' les paramètres
' n =numéro de la combinaison à générer
' bs =valeurs possibles pour produire une combinaison
' lg = longueur de la combinaison à générer
' pour une combinaison le nombre de combinaisons possibles est donné par (nombre de valeurs possibles ^ longueur)
' =cvntocomb(155,"1234",4) donne comme résultat 3234
' =cvntocomb(1255,"ABCDEFGHIJKLMNOPQRSTUVWXYZ",4) donne comme résultat ABWH
'=cvntocomb(0;"AB";3) donne AAA
'=cvntocomb(1;"AB";3) donne AAB
'=cvntocomb(2;"AB";3) donne ABA
'=cvntocomb(3;"AB";3) donne ABB
'=cvntocomb(4;"AB";3) donne BAA
'=cvntocomb(5;"AB";3) donne BAB
'=cvntocomb(6;"AB";3) donne BBA
'=cvntocomb(7;"AB";3) donne BBB
'=cvntocomb(8;"AB";3) donne numéro de combinaison dépasse la limite de 7

'

b = Len(bs)
If b < 2 Then cvntocomb = "le nombre de valeurs possibles doit être supérieur à 1": Exit Function
If n >= b ^ lg Then cvntocomb = "numéro de combinaison dépasse la limite de " & (b ^ lg) - 1: Exit Function
q = n
While q > 0
r = q Mod b
l = Mid(bs, r + 1, 1) & l
q = Int(q / b)
Wend
cvntocomb = String(lg - Len(l), Left(bs, 1)) & l
End Function
 

tu peux l'appeler à partir de vba

Sub test1()
' valeur contient la liste des N chiffres possibles
valeur = "1234"
' position contient le nombre "d'itérations"
position = 4

' nombre = numéro de la combinaison en cours
nombre = 1
' basev nombre de valeurs possibles
basev = Len(valeur)
' max = nombre de combinaisons possibles
Max = basev ^ position
' on adapte les dimensions du tableau
ReDim t(Max, position)
' on lance la procédure récursive

For i = 0 To Max - 1
q = cvntocomb(i, valeur, position)
For j = 1 To position
 t(i + 1, j) = Mid(q, j, 1)
Next j
Next i
' on copie le tableau résultant dans les cellules excel en A1
Range(Cells(1, 1), Cells(Max, position)) = t
End Sub

rebonsoir,

une autre solution avec uen procédure récursive.

Option Base 1
Public t(), valeur, position, nombre, basev, Max

Sub test()
' valeur contient la liste des N chiffres possibles
valeur = "1234"
' position contient le nombre "d'itérations"
position = 4

' nombre = numéro de la combinaison en cours
nombre = 1
' basev nombre de valeurs possibles
basev = Len(valeur)
' max = nombre de combinaisons possibles
Max = basev ^ position
' on adapte les dimensions du tableau
ReDim t(Max, position)
' on lance la procédure récursive
combine (1)
' on copie le tableau résultant dans les cellules excel en A1
Range(Cells(1, 1), Cells(Max, position)) = t
End Sub

Sub combine(niveau)
' pour chaque position, on lance une boucle pour attribuer toutes les valeurs possibles
For i = 1 To Len(valeur)
  t(nombre, niveau) = Mid(valeur, i, 1)
 ' y a-t-il encore une position à générer
  If niveau < position Then
  ' on passe à la position suivante 
   combine (niveau + 1)
  ElseIf niveau = position Then
  ' toutes les positions pour la combinaison en cours sont remplies, on passe à la combinaison suivante
   nombre = nombre + 1
   If nombre <= Max Then
   For j = 1 To niveau
    t(nombre, j) = t(nombre - 1, j)
   Next j
   End If
  End If
Next i
End Sub

Bonjour,

Ta 2éme réponse correspond tout à fait à la solution que je recherchai.

Ainsi, je vais pouvoir continuer à développer ma macro en cours ...

Un très grand merci pour ton aide très rapide.

Bon week-end.

Et merci encore !

Rechercher des sujets similaires à "vba combinaisons chiffres iterations"