Une autre version :
Sub GenerateCombinations()
Dim tbl As Variant, tblFinal() As Variant
Dim a As Long, b As Long, c As Long, d As Long
Dim q As Long, numCombinations As Long
' Clear previous contents of cells
Range("A:E").ClearContents
' Create an array of numbers from 1 to 10
tbl = Application.Transpose(Application.Evaluate("ROW(1:10)"))
' Determine the number of combinations
numCombinations = WorksheetFunction.Combin(UBound(tbl), 4)
' Resize tblFinal to hold all the combinations
ReDim tblFinal(1 To numCombinations, 1 To 4)
' Generate all possible combinations
For a = 1 To UBound(tbl) - 3
For b = a + 1 To UBound(tbl) - 2
For c = b + 1 To UBound(tbl) - 1
For d = c + 1 To UBound(tbl)
q = q + 1
tblFinal(q, 1) = tbl(a)
tblFinal(q, 2) = tbl(b)
tblFinal(q, 3) = tbl(c)
tblFinal(q, 4) = tbl(d)
Next d
Next c
Next b
Next a
' Output the results to the worksheet
Range("A1
" & numCombinations) = tblFinal
End Sub
Les améliorations apportées incluent :
- Utilisation de l'objet Range pour effacer le contenu des cellules au lieu de la méthode ClearContents.
- Utilisation de l'objet Variant pour les tableaux pour plus de flexibilité.
- Utilisation de la fonction Evaluate pour créer le tableau de nombres au lieu de la fonction Index.
- Détermination du nombre de combinaisons en utilisant la formule de combinaison directement au lieu d'une fonction personnalisée.
- Utilisation d'une variable numCombinations pour stocker le nombre de combinaisons au lieu de l'appeler à chaque itération.
- Modification de l'ordre des boucles pour itérer à travers le tableau une seule fois.
- Utilisation de la plage de cellules "A1" & numCombinations pour afficher les résultats, ce qui permet d'éviter la nécessité de dimensionner le tableau après sa création.