bonjour,
Voici une proposition ...
Si tu as de la patience et assez de mémoire (7 ^ 101 combinaisons possibles, parmi lesquelles il faut sélectionner celles qui totalisent 100, tu n'as pas assez de l'âge de l'univers) . Je pense qu'il serait plus efficace de nous indiquer ce que tu cherches à optimiser avec quelles contraintes.
Dim t$(1 To 1000000, 1 To 1), col&, sol&
Sub aargh()
Erase t ' tableau pour recevoir 1000000 de résultats
col = 0 'n° de colonne résultat en cours
sol = 0 ' n° de solution de la colonne en cours
combine 'on produit les combinaisons
If sol > 0 Then 'affichage colonne de résultat résiduelle
col = col + 1
Cells(1, col).Resize(sol, 1) = t
End If
End Sub
Sub combine(Optional n& = 1, Optional tot& = 0&, Optional s$ = "", Optional tt& = 100)
'sub récursive de génération des combinaisons, n=niveau (s'arrête au niveau 7), tot=total jusqu'à présent, s=liste des %, tt=total à atteindre
Dim st As Boolean
os$ = s
ot& = tot
For i& = 0 To tt - tot
s = s & i & "% "
tot = tot + i
st = False
If tot = tt Then
For j& = 1 To 7 - n
s = s & "0% "
Next j
st = True
ElseIf n = 6 And tot <= tt Then
s = s & tt - tot & "% "
st = True
End If
If st Then
sol = sol + 1
t(sol, 1) = s
If sol = 1000000 Then
col = col + 1
Cells(1, col).Resize(sol, 1) = t
sol = 0
End If
ElseIf tot < tt Then
combine n + 1, tot, s
Else
Exit For
End If
s = os
tot = ot
Next i
End Sub