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 46 47 48 49 50 51 52 53 54 55 56 57 58
| Option Explicit
Dim TbGeneral, x As Integer, i As Integer, y As Integer
Sub repartition()
Dim Dl As Integer, InscritS1(), inscritS2(), S1
With Sheets("Feuil1")
Dl = .Range("A" & .Rows.Count).End(xlUp).Row 'donc dernère ligne renseignée
TbGeneral = .Range("A7:H" & Dl)
Tri_Tableau 'on trie la variable tableau pour laisser les données intactes
If WorksheetFunction.IsEven(.Range("A" & Dl)) Then 'si ".Range("A" & Dl)" est un nombre pair
S1 = .Range("A" & Dl) / 2 'on donne la moitié de la valeur à la variable
ReDim InscritS1(1 To S1, 1 To 8): ReDim inscritS2(1 To S1, 1 To 8) 'et on redimensionne les 2 tableaux
Else
S1 = Int(.Range("A" & Dl) / 2) + 1 'sinon on redimensionne de l'intégrale de la moitié +1
ReDim InscritS1(1 To S1, 1 To 8): ReDim inscritS2(1 To S1 - 1, 1 To 8) 'et on redimensionne les 2 tableaux
End If
i = 0
For x = 1 To UBound(TbGeneral, 1) Step 2 'une boucle incrémentée par un pas de 2
i = i + 1
For y = 1 To 8 'une autre boucle imbriquée pour parcourir les colonnes
If x < UBound(TbGeneral, 1) Then 'si on atteint pas la dernière ligne
'ci-dessous, on alimente les 2 tableaux pour les 2 dimensions (1 ligne, 8 colonnes)
InscritS1(i, y) = TbGeneral(x, y)
inscritS2(i, y) = TbGeneral(x + 1, y)
Else
InscritS1(i, y) = TbGeneral(x, y) 'sinon, on alimente que le 1er tableau
End If
Next y
Next x
End With
'enfin ci-dessous, on affecte les résultats obtenus aux tableaux "serie1" et "serie2"
With Sheets("Séries")
.Range("A7").Resize(UBound(InscritS1, 1), UBound(InscritS1, 2)) = InscritS1 'à partir de A7, on redimensionne le tableau
.Range("J7").Resize(UBound(inscritS2, 1), UBound(inscritS2, 2)) = inscritS2 'à partir de J7, on redimensionne le tableau
'pour "Resize", voir l'aide
End With
End Sub
Sub Tri_Tableau()
Dim Cible As Variant
Do
x = 0
For i = UBound(TbGeneral, 1) To 2 Step -1 'on part de la fin du tableau
If TbGeneral(i, 4) < TbGeneral(i - 1, 4) Then 'on compare la ligne "club" à la ligne "club" précédente
'ci-dessous, une variable qui reprend toute les données (colonnes) de la ligne avec "|" en séparateur (pourquoi pas ?)
Cible = TbGeneral(i, 1) & "|" & TbGeneral(i, 2) & "|" & TbGeneral(i, 3) & "|" _
& TbGeneral(i, 4) & "|" & TbGeneral(i, 5) & "|" & TbGeneral(i, 6) & "|" & TbGeneral(i, 7) & "|" & TbGeneral(i, 8)
For y = 1 To 8 'on effectue le tri sur la deuxième dimension (8 colonnes)
TbGeneral(i, y) = TbGeneral(i - 1, y)
TbGeneral(i - 1, y) = Split(Cible, "|")(y - 1) 'sachant que cible commence obligatoirement à 0
Next y
x = 1
End If
Next i
Loop While x = 1
End Sub |