1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| Option Explicit
Option Base 0
Sub Combinaison()
Dim Wb As Workbook
Dim Ws_Source As Worksheet, Ws_Resultat As Worksheet
Dim Tab_ValeurBase As Variant
Dim Tab_Resultat() As Long
Dim NombreCombi As Long
Dim X As Long, Y As Long
Dim CursPos As Long
'Sur un traitement qui va prendre du temps,
'il est preférable de garder la référence du document en cours
Set Wb = ThisWorkbook
'Les feuilles
Set Ws_Source = Wb.Sheets("Feuil1") 'à adapter
Set Ws_Resultat = Wb.Sheets("Feuil2") 'à adapter
'On place les valeurs source dans une variable sous forme de tableau
With Ws_Source
Tab_ValeurBase = .Range("A2", .Cells(.Rows.Count, "A").End(xlUp))
End With
'On calcule le nombre de combinaison
NombreCombi = UBound(Tab_ValeurBase) - 1
NombreCombi = (NombreCombi * (NombreCombi + 1)) / 2
'On dimenssionne le tableau qui va recevoir les solutions
ReDim Tab_Resultat(0 To NombreCombi - 1, 0 To 1)
'Ensuite on rempli
For X = 0 To UBound(Tab_ValeurBase) - 1
For Y = X + 1 To UBound(Tab_ValeurBase) - 1
Tab_Resultat(CursPos, 0) = Tab_ValeurBase(X + 1, 1)
Tab_Resultat(CursPos, 1) = Tab_ValeurBase(Y + 1, 1)
CursPos = CursPos + 1
Next
Next
'On place dans la feuil resultat
Ws_Resultat.Cells.Clear
Ws_Resultat.Range("A2").Resize(UBound(Tab_Resultat) + 1, UBound(Tab_Resultat, 2) + 1) = Tab_Resultat
End Sub |