Type structData
Debut As Long
Fin As Long
Count As Long
End Type
Sub AllCombi_3D()
Dim Unite As structData
Dim Centaine As structData
Dim Decimale As structData
Dim uni@
Dim cen@
Dim dec@
Dim T()
Dim T2()
Dim S As Worksheet
Dim R As Range
Dim cpt&
Dim g&
Dim i&
Dim j&
Dim k&
Dim Lig&
'#########################################################
'### Les Debut et les Fin sont à adapter à votre usage ###
'#########################################################
'--- Initialisation (Réglages appropriés) ---
With Unite
.Debut = 1
.Fin = 10
.Count = .Fin - .Debut + 1
End With
With Centaine
.Debut = 100
.Fin = 109
.Count = .Fin - .Debut + 1
End With
With Decimale
'°°° Exprimer des entiers (la conversion en décimale aura lieu plus loin dans le code (/10) °°°
.Debut = 1
.Fin = 10
.Count = .Fin - .Debut + 1
End With
'--------------------------------------------
'#########################################################
ReDim T(1 To Unite.Count * Centaine.Count * Decimale.Count, 1 To 4)
For uni@ = Unite.Debut To Unite.Fin
For cen@ = Centaine.Debut To Centaine.Fin
For dec@ = Decimale.Debut To Decimale.Fin
cpt& = cpt& + 1
T(cpt&, 1) = uni@
T(cpt&, 2) = cen@
T(cpt&, 3) = dec@ / 10
'### Le type d'opération est à adapter ###
T(cpt&, 4) = T(cpt&, 1) * T(cpt&, 2) * T(cpt&, 3)
'#########################################
Next dec@
Next cen@
Next uni@
Set S = Sheets.Add
cpt& = 0
Lig& = 1
For k& = Unite.Debut To Unite.Fin
Erase T2
ReDim T2(1 To Centaine.Count + 1, 1 To Decimale.Count + 1)
For i& = 1 To UBound(T2, 1)
For j& = 1 To UBound(T2, 2)
'--- les bordures ---
If i& = 1 And j& = 1 Then
T2(i&, j&) = T(1 + ((Centaine.Count * Decimale.Count) * (k& - 1)), 1)
ElseIf i& > 1 And j& = 1 Then
T2(i&, j&) = T(((Decimale.Count) * (i& - 1)), 2)
ElseIf i& = 1 And j& > 1 Then
T2(i&, j&) = T(1 + ((j& - 2)), 3)
Else
'--- les Data ---
cpt& = cpt& + 1
T2(i&, j&) = T(cpt&, 4)
End If
Next j&
Next i&
Set R = S.Range(Cells(Lig&, 1), Cells(Centaine.Count + Lig&, Decimale.Count + 1))
R = T2
Lig& = Lig& + R.Rows.Count + 1
With R
.Cells.NumberFormat = "#0.0"
.Columns(1).NumberFormat = "#0"
.Columns(1).Interior.Color = vbYellow
.Rows(1).Interior.Color = vbYellow
.Cells(1, 1).Font.Bold = True
.Cells(1, 1).HorizontalAlignment = xlCenter
For g& = 7 To 12
.Borders(g&).LineStyle = xlContinuous
Next g&
End With
Next k&
S.Columns.AutoFit
End Sub