Macro - Tri Automatique par Ordre Alphabetique

Bonjour a tous.

Je sais que ce sujet a deja ete poste mais malgre toutes mes tentatives je n'arrive pas a obtenir le resultat escompte (a vrai dire je n'arrive pas a obtenir de resultat du tout...)

Je suis chef de cuisine et je suis en train de lister tous les produits que l'on utilise avec leur prix, l'unite de mesure et le fournisseur chez qui on achete le produit, le tout divise en plusieurs categories de produits.

J'aimerai que quand j'ajoute un nouveau produit, celui ci se classe automatiquement dans la liste par ordre alphabetique.

Mon principal probleme est que je n'ai jamais cree de macro du coup je n'arrive pas a appliquer a mon tableau les formules que j'ai pu trouver en ligne.

Merci beaucoup par avance.

PS: J'utilise Excel en version anglaise

Bonjour

Cela simplifierait les choses de laisser une colonne vide, même très étroite ou masquée entre tes catégories.

De même chaque catégorie mise sous forme de tableau améliorerait les choses.

Classer au moment où tu saisis n'est pas forcément très confortable. Je te conseille plutôt un bouton.

Mais j'ai fait un exemple qui réagit à la saisie de la 4ème colonne de la catégorie

Salut la compagnie,

tant que les 4 colonnes ne sont pas vides, il peut y avoir tri...

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Target.Row < 3 Then Exit Sub
'
iTRow = Target.Row
iTCol = Target.Column
iCol = iTCol - (IIf(iTCol Mod 4 = 0, 3, iTCol Mod 4 - 1))
'
For x = iCol To iCol + 3
    If Cells(iTRow, iCol) <> "" And Cells(iTRow, iCol + 1) <> "" And Cells(iTRow, iCol + 2) <> "" And Cells(iTRow, iCol + 3) <> "" Then
        sCol1 = Split(Columns(iCol).Address(ColumnAbsolute:=False), ":")(1)
        iRow = Range(sCol1 & Rows.Count).End(xlUp).Row
        If Cells(4, iCol) <> "" Then
            sCol2 = Split(Columns(iCol + 3).Address(ColumnAbsolute:=False), ":")(1)
            Range(sCol1 & "3:" & sCol2 & iRow).Sort key1:=Range(sCol1 & 3), order1:=xlAscending, Orientation:=xlTopToBottom
        End If
        Exit For
    End If
Next
'
End Sub

A+

Bonjour,

Même principe que Chris, mais !...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lo As ListObject
    If Target.ListObject Is Nothing Then Exit Sub
    Set lo = Target.ListObject
    If Target.Column - lo.HeaderRowRange.Cells(1).Column = 0 Then
        With lo
            .Sort.SortFields.Add .ListColumns(1).DataBodyRange, xlSortOnValues, xlAscending
            .Sort.Apply
            .Sort.SortFields.Clear
        End With
    End If
End Sub

Salut l'équipe,

vous aurez certainement corrigé vous-mêmes...

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Target.Row < 3 Then Exit Sub
'
iTRow = Target.Row
iTCol = Target.Column
iCol = iTCol - (IIf(iTCol Mod 4 = 0, 3, iTCol Mod 4 - 1))
'
If Cells(iTRow, iCol) <> "" And Cells(iTRow, iCol + 1) <> "" And Cells(iTRow, iCol + 2) <> "" And Cells(iTRow, iCol + 3) <> "" Then
    sCol1 = Split(Columns(iCol).Address(ColumnAbsolute:=False), ":")(1)
    iRow = Range(sCol1 & Rows.Count).End(xlUp).Row
    If Cells(4, iCol) <> "" Then
        sCol2 = Split(Columns(iCol + 3).Address(ColumnAbsolute:=False), ":")(1)
        Range(sCol1 & "3:" & sCol2 & iRow).Sort key1:=Range(sCol1 & 3), order1:=xlAscending, Orientation:=xlTopToBottom
    End If
End If
'
End Sub

@Jean-Eric : solution de pro! Tu pardonneras mes habitudes de vieux dinosaure...

A+

Rechercher des sujets similaires à "macro tri automatique ordre alphabetique"