Microsoft 365 Trier les colonnes d'un tableau de A à Z en VBA

  • Initiateur de la discussion Initiateur de la discussion iliess
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

iliess

XLDnaute Occasionnel
Bonjour
Voici mon tableau TBl1.Toujours commencer par la colonne Clé et après les colonnes leur entête numérique, et ce terminer par les 4 colonnes totales.
1710708491125.png


Je souhaite en VBA classer uniquement les colonnes leur entête est numérique de A à Z.
voici résultat souhaiter

1710708668128.png


Slutations.
 

Pièces jointes

Bonjour

On peut convertir en plage et trier de façon simple les colonnes numériques sélectionnées

1710717909277.png


Sinon via PowerQuery
VB:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    #"Supprimer le tableau croisé dynamique des autres colonnes" = Table.UnpivotOtherColumns(Source, {"Cle", "Total EXO", "Total Tax", "Total Tva", "Diff"}, "Attribut", "Valeur"),
    #"Type modifié" = Table.TransformColumnTypes(#"Supprimer le tableau croisé dynamique des autres colonnes",{{"Attribut", Int64.Type}}),
    #"Lignes triées" = Table.Sort(#"Type modifié",{{"Attribut", Order.Ascending}}),
    PStep = Table.Pivot(Table.TransformColumnTypes(#"Lignes triées", {{"Attribut", type text}}, "fr-FR"), List.Distinct(Table.TransformColumnTypes(#"Lignes triées", {{"Attribut", type text}}, "fr-FR")[Attribut]), "Attribut", "Valeur"),
    #"Colonnes permutées" = Table.ReorderColumns(PStep,List.Combine({{"Cle"},List.LastN(Table.ColumnNames(PStep), Table.ColumnCount(PStep)-5),List.LastN(Table.ColumnNames(Source),4)}))
in
    #"Colonnes permutées"
 
Bonjour à tous,

Le plus simple est d'utiliser 2 boucles imbriquées :
VB:
Sub Tri_Colonnes()
Dim cc%, i%, j%
Application.ScreenUpdating = False
With [A1].CurrentRegion
    cc = .Columns.Count
    For i = 1 To cc - 1
        If IsNumeric(.Cells(1, i)) Then
            For j = i + 1 To cc
                If IsNumeric(.Cells(1, j)) Then _
                    If Val(.Cells(1, j)) < Val(.Cells(1, i)) Then .Columns(j).Cut: .Columns(i).Insert xlToRight
            Next j
        End If
    Next i
End With
End Sub
A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
250
Affichages
15 K
Retour