Sub TriPoint()
Dim TabData() As Variant
Dim TabToTri() As Variant
Set plage = Application.InputBox("Cliquez dans la colonne à trier", Type:=8) 'demande à l'utilisateur de cliquer dans la colonne à trier==> !! AUCUN controle sur la validité de la selection
With ActiveSheet 'avec la feuille active
Col = plage.Column 'colonne sélectionné
LastLine = .Cells(.Rows.Count, Col).End(xlUp).Row 'dernière ligne non vide de la colonne selectionnée
TabVal = .Cells(2, Col).Resize(LastLine - 1, 1).Value 'on met juste la colonne dans un tableau vba
For i = LBound(TabVal, 1) To UBound(TabVal, 1) 'pour chaque ligne
nbpoint = WorksheetFunction.Max(nbpoint, Len(TabVal(i, 1)) - Len(WorksheetFunction.Substitute(TabVal(i, 1), ".", ""))) 'on compte le nombre de point, et on met à jour le nombre "max"
Next i
TabData = .Cells(2, Col).Resize(LastLine - 1, nbpoint + 2).Value 'on place la colonne à trier dans un tableau + nb de colonnes fonction du nombre de point (pour les calculs)
End With
For i = LBound(TabData, 1) To UBound(TabData, 1) 'pour chaque ligne du tableau
nb = UBound(Split(TabData(i, 1), ".")) 'nb de points à la ligne
For j = 0 To nb 'on split les valeurs
TabData(i, j + 2) = CInt(Split(TabData(i, 1), ".")(j))
Next j
For j = nb + 1 To nbpoint 'pour le reste, on met 0
TabData(i, j + 2) = 0
Next j
Next i
'ActiveSheet.Range("F2").Resize(UBound(TabData, 1), UBound(TabData, 2)) = TabData
ReDim ColToTri(nbpoint) As Long 'définition d'un array contenant les colonnes à trier
For i = 0 To nbpoint
ColToTri(i) = i + 2 'la colonne 1 contient les données initiales: ne servent pas pour le tri
Next i
Call TriTabMultX(TabData, ColToTri) 'on appelle la macro de tri
'ActiveSheet.Range("I2").Resize(UBound(TabData, 1), UBound(TabData, 2)) = TabData
'on reconstruit le numéro de chapitre selon le contenu des colonnes "splitées"
For i = LBound(TabData, 1) To UBound(TabData, 1)
recons = ""
For j = LBound(TabData, 2) + 1 To UBound(TabData, 2)
recons = recons & "." & TabData(i, j)
Next j
TabData(i, 1) = Mid(recons, 2, Len(recons) - 1)
Next i
ActiveSheet.Range("F2").Resize(UBound(TabData, 1), 1).NumberFormat = "@"
ActiveSheet.Range("F2").Resize(UBound(TabData, 1), 1) = TabData
End Sub