Classer tableau par ordre alphabétique

Bonjour,

J'aimerais trier par ordre alphabétique les en-têtes d'un tableau de façon à ce que les données suivent les en-têtes. J'avais réussi à faire quelque chose, néanmoins seulement les en-têtes se triaient.

Merci!

Cordialement,

Misen

27classer-alpha.xlsm (16.82 Ko)

Bonsoir,

à tester est-ce cela que tu souhaitais ?

crdlt,

André

39classer-alpha1.xlsm (19.18 Ko)
Andre13 a écrit :

Bonsoir,

à tester est-ce cela que tu souhaitais ?

crdlt,

André

Bonjour,

En fait, lorsque j'exécute la macro, les en-têtes ne se trient pas.

Cordialement.

Bonsoir,

Ah ok j'étais à l'Ouest

m'semble que c'est A2 et non A1

à tester chez moi çà fonctionne j'ai ajouté un bouton nikel

Sub sb_VBA_Sort_Data()
Range("A2:H10").Sort _
Key1:=Range("A1"), Header:=xlYes
End Sub

crdlt,

André

Andre13 a écrit :

Bonsoir,

Ah ok j'étais à l'Ouest

m'semble que c'est A2 et non A1

à tester chez moi çà fonctionne j'ai ajouté un bouton nikel

Sub sb_VBA_Sort_Data()
Range("A2:H10").Sort _
Key1:=Range("A1"), Header:=xlYes
End Sub

crdlt,

André

Rebonjour!

Merci beaucoup!

Cordialement.

Bonjour,

En fait, en changeant les titres des en-têtes et en lançant la macro, il me semble que le tri ne se fait pas.

Qu'est-ce que je fais de mal?

Merci!

Salut Misen08, Andre13,

rien trouvé dans SORT qui me permette de faire cela donc je me suis amusé... ce qui m'a permis de découvrir d'autres petits trucs.

Tu double-cliques sur la 1ère cellule en haut à gauche du tableau à trier et la macro fait le reste.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim tData
'
iRow = Target.Row
iRow1 = Target.End(xlDown).Row + 1
iCol = Cells(iRow, Target.Column).End(xlToRight).Column
sColO = Split(Columns(Target.Column).Address(ColumnAbsolute:=False), ":")(1)
sCol = Split(Columns(iCol + 1).Address(ColumnAbsolute:=False), ":")(1)
sCol1 = Split(Columns(iCol).Address(ColumnAbsolute:=False), ":")(1)
'
tData = Range(sColO & iRow & ":" & sCol & iRow1 - 1).Value
Range(sColO & iRow).Resize(iRow1 - iRow, UBound(tData, 2) - 1).Delete
'
For x = 1 To UBound(tData, 2) - 1
    For y = 2 To UBound(tData, 2) - 1
        If UCase(tData(1, y)) < UCase(tData(1, y - 1)) Then
            For Z = 1 To UBound(tData, 1)
                tData(Z, UBound(tData, 2)) = tData(Z, y)
                tData(Z, y) = tData(Z, y - 1)
                tData(Z, y - 1) = tData(Z, UBound(tData, 2))
            Next
        End If
    Next
Next
'
Range(sColO & iRow).Resize(iRow1 - iRow, UBound(tData, 2) - 1) = tData
Columns(sColO & ":" & sCol1).AutoFit
With ActiveSheet
    .ListObjects.Add(xlSrcRange, .Range(sColO & iRow & ":" & sCol1 & iRow1 - 1), , xlYes).Name = "Tableau1"
    .ListObjects("Tableau1").TableStyle = "TableStyleMedium5"
End With
'
End Sub

En l'état, le tableau créé portera toujours le même nom (Tableau1). Faudra prévoir de chercher le nom du tableau traité.

A+

25classer-alpha.xlsm (17.92 Ko)
curulis57 a écrit :

Salut Misen08, Andre13,

rien trouvé dans SORT qui me permette de faire cela donc je me suis amusé... ce qui m'a permis de découvrir d'autres petits trucs.

Tu double-cliques sur la 1ère cellule en haut à gauche du tableau à trier et la macro fait le reste.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim tData
'
iRow = Target.Row
iRow1 = Target.End(xlDown).Row + 1
iCol = Cells(iRow, Target.Column).End(xlToRight).Column
sColO = Split(Columns(Target.Column).Address(ColumnAbsolute:=False), ":")(1)
sCol = Split(Columns(iCol + 1).Address(ColumnAbsolute:=False), ":")(1)
sCol1 = Split(Columns(iCol).Address(ColumnAbsolute:=False), ":")(1)
'
tData = Range(sColO & iRow & ":" & sCol & iRow1 - 1).Value
Range(sColO & iRow).Resize(iRow1 - iRow, UBound(tData, 2) - 1).Delete
'
For x = 1 To UBound(tData, 2) - 1
    For y = 2 To UBound(tData, 2) - 1
        If UCase(tData(1, y)) < UCase(tData(1, y - 1)) Then
            For Z = 1 To UBound(tData, 1)
                tData(Z, UBound(tData, 2)) = tData(Z, y)
                tData(Z, y) = tData(Z, y - 1)
                tData(Z, y - 1) = tData(Z, UBound(tData, 2))
            Next
        End If
    Next
Next
'
Range(sColO & iRow).Resize(iRow1 - iRow, UBound(tData, 2) - 1) = tData
Columns(sColO & ":" & sCol1).AutoFit
With ActiveSheet
    .ListObjects.Add(xlSrcRange, .Range(sColO & iRow & ":" & sCol1 & iRow1 - 1), , xlYes).Name = "Tableau1"
    .ListObjects("Tableau1").TableStyle = "TableStyleMedium5"
End With
'
End Sub

En l'état, le tableau créé portera toujours le même nom (Tableau1). Faudra prévoir de chercher le nom du tableau traité.

A+

Bonjour curulis57,

C'est effectivement ce que je recherchais à 99.9%!

Il y a un petit détail lorsque le tri se produit. Le mois et le jour s'inverse parfois, mais cela ne se produit pas toujours...

Cordialement,

Merci!

Bonjour,

Une autre approche.

On convertit le tableau en plage, on applique le tri et on remet les données sous forme de tableau.

Cdlt.

42classer-alpha.xlsm (25.89 Ko)
Jean-Eric a écrit :

Bonjour,

Une autre approche.

On convertit le tableau en plage, on applique le tri et on remet les données sous forme de tableau.

Cdlt.

Bonjour!

Cela fonctionne parfaitement!

Merci beaucoup pour votre temps.

Bonne fin de semaine!

Cordialement.

Rechercher des sujets similaires à "classer tableau ordre alphabetique"