Liste des combinaisons (Microsoft Excel)
Ron sait qu’il peut utiliser la fonction COMBIN pour déterminer le nombre de combinaisons qui peuvent être faites à partir d’un certain nombre de chiffres. Il se demande cependant s’il existe un moyen de lister toutes les combinaisons elles-mêmes.
Il n’y a pas de moyen intégré de répertorier les combinaisons dans Excel. Vous pouvez cependant créer une macro pour faire la liste à votre place. Si vous voulez trouver les combinaisons uniques dans un ensemble de nombres séquentiels commençant à 1, alors l’ensemble de macros suivant fera l’affaire. Tout ce que vous avez à faire est d’exécuter la fonction TestCNR et vous vous retrouverez avec une « matrice » de cellules représentant le nombre de combinaisons à 4 chiffres dans l’ensemble séquentiel de valeurs allant de 1 à 10.
Sub TestCNR() Cnr 10, 4 End Sub
Sub Cnr(n, r) i = 1 For j = 1 To r Cells(i, j).Value = j Next Do Until Finished(n, r, i) j = FindFirstSmall(n, r, i) For k = 1 To j — 1 Cells(i + 1, k).Value = Cells(i, k).Value Next Cells(i + 1, j).Value = Cells(i, j).Value + 1 For k = j + 1 To r Cells(i + 1, k).Value = Cells(i + 1, k - 1).Value + 1 Next i = i + 1 Loop End Sub
Function Finished(n, r, i) Temp = True For j = r To 1 Step -1 If Cells(i, j).Value <> j + (n - r) Then Temp = False End If Next Finished = Temp End Function Function FindFirstSmall(n, r, i) j = r Do Until Cells(i, j).Value <> j + (n - r) j = j - 1 Loop FindFirstSmall = j End Function
La macro écrase tout ce qui se trouve dans votre feuille de calcul, assurez-vous donc d’exécuter le test avec une feuille de calcul vierge affichée. Si vous souhaitez modifier la taille de l’ensemble ou le nombre d’éléments dans le sous-ensemble, modifiez simplement les valeurs passées dans la routine TestCNR.
Si vous souhaitez extraire des combinaisons uniques d’une chaîne de caractères (par exemple, les lettres de l’alphabet), vous devez utiliser un autre ensemble de macros. Ce qui suit fonctionnera bien; il suppose que les caractères que vous souhaitez utiliser comme « univers » se trouvent dans la cellule A1 et que le nombre souhaité dans chaque combinaison unique se trouve dans la cellule A2.
Sub FindSets() Dim iA() As Integer Dim sUniv As String Dim iWanted As Integer Dim j As Integer Dim k As Integer sUniv = Cells(1, 1).Value iWanted = Cells(2, 1).Value ReDim iA(iWanted) For j = 1 To iWanted iA(j) = j Next j iRow = PutRow(iA, sUniv, 1) Do Until DoneYet(iA, Len(sUniv)) j = WorkHere(iA, Len(sUniv)) iA(j) = iA(j) + 1 For k = j + 1 To iWanted iA(k) = iA(k - 1) + 1 Next k iRow = PutRow(iA, sUniv, iRow) Loop End Sub
Function DoneYet(iB, n) As Boolean iMax = UBound(iB) Temp = True For j = iMax To 1 Step -1 If iB(j) <> j + (n - iMax) Then Temp = False End If Next DoneYet = Temp End Function
Function WorkHere(iB, n) As Integer iMax = UBound(iB) j = iMax Do Until iB(j) <> j + (n - iMax) j = j - 1 Loop WorkHere = j End Function
Function PutRow(iB, sUniv, i) iMax = UBound(iB) sTemp = "" For j = 1 To iMax sTemp = sTemp & Mid(sUniv, iB(j), 1) Next j Cells(i, 2).Value = sTemp PutRow = i + 1 End Function
Exécutez la macro FindSets et les différentes combinaisons souhaitées se retrouvent dans la colonne 2. Soyez cependant prudent lorsque vous exécutez la macro. Le nombre de combinaisons peut devenir très important très rapidement. Par exemple, si vous mettez 26 lettres (A à Z) dans la cellule A1 et la valeur 5 dans la cellule A2, la macro se bloque. Pourquoi? Parce qu’il y a 65 780 combinaisons de cinq caractères possibles et seulement 65 536 lignes dans lesquelles les placer.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (6766) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:
link: / excelribbon-Listing_Combinations [Liste des combinaisons]
.