Comment trier des infos par nom (macro)

Bonjour,

Je sais un peu près comment fonctionne une macro de tri sur une colonne pour une ligne entière mais seulement dans l'ordre alphabétique. Dans un nouveau tableau j'ai besoin de trier des lignes selon une colonne Matin/Soir/Nuit/WE, du coup j'aimerais savoir s'il est possible dans le code VBA d'indiquer cet ordre.

Voici la macro avec laquelle je fonctionne jusqu'à aujourd'hui :

Feuille :

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then

Call Tri

End If

End Sub

Module :

Sub Tri()

Dim LastRow As Long

LastRow = ActiveSheet.Range("B4").End(xlDown).Row

Range("A4:AM21" & LastRow).Sort Key1:=Range("B4"), Order1:=xlAscending, Key2:=Range("B5"), Order2:=xlAscending, Key3:=Range("B6"), Order3:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _

:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _

DataOption2:=xlSortNormal

End Sub

J'ai essayé d'affecter key1 à matin, key2 à soir, key3 à nuit et key4 à WE mais ça ne marche pas.

Merci d'avance pour votre aide!

Bonjour et bienvenue sur le forum

Essaie après correction de cette erreur :

Range("A4:AM" & LastRow).Sort Key1:=......

au lieu de :

Range("A4:AM21" & LastRow).Sort Key1:=....

Bye !

Bonjour,

Merci de ta réponse rapide mais j'ai finalement trouvé en passant par listarray et ça marche comme je l'attendais donc nickel !

Bonjour

J'arrive un peu tard

A tester

Sub Tri()
Dim LastRow As Long

  LastRow = ActiveSheet.Range("B4").End(xlDown).Row
  With ActiveSheet.Sort
    .SortFields.Clear
    .SortFields.Add Key:=ActiveSheet.Range("B4"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="Matin,Soir,Nuit,WE", DataOption:=xlSortNormal
    .SetRange ActiveSheet.Range("A4:M" & LastRow)
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
  End With
End Sub

Il serait intéressant que tu donnes la solution que tu as trouvée

Je mets mon code si ça intéresse quelqu'un :

Sub Tri()

Dim X As Long

X = Application.CustomListCount + 1

Application.AddCustomList ListArray:=Array("Matin", "Soir", "Nuit", "WE")

Range("A4:AN200").Sort Key1:=Range("B4"), Order1:=xlAscending, Key2:=Range("A4"), Order2:=xlAscending, Header:= _

xlGuess, OrderCustom:=X, MatchCase:=False, Orientation:= _

xlTopToBottom

End Sub

Par contre je serais bien intéressé par un autre code, en fait dans mon cas je trie automatiquement la ligne entière en fonction de la colonne B (Matin;Soir...) et la colonne A (les dates) ce tri se fait dès qu'on modifie soit une cellule en A soit une cellule en B. Du coup, j'aimerai savoir si je pourrais faire en sorte que le tri se fasse dès que la ligne entière est remplie.

Merci d'avance !

Bonjour

A tester

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("A4:AN200")) Is Nothing Then
    If Application.CountA(Range("A" & Target.Row & ":AN" & Target.Row)) = 40 Then
      Call Tri
    End If
  End If
End Sub

Merci beaucoup ! Alors la macro marche bien mais je dois l'exécuter en passant par le code VBA, penses-tu qu'il est possible de l'automatiser dès qu'on remplit de A à AN ? Où faut-il lui annexer un raccourci?

Bonjour

Actuellement la macro est automatique

L'utilisateur remplit seulement les données et dès que la "surveillance" constate qu'il y a assez de données, elle effectue le tri

Pas de bouton pour déclencher la macro, c'est ce que l'on appelle automatique

En fait j'ai dû l'exécuter en passant par le code VBA, je vais refaire un test, par contre j'ai un problème, dans l'une des cellules de la ligne il y a une formule qui dépend de plusieurs cellules dont une peut ne pas être remplie donc dur :/


C'est bon je mets 0 ça passera, je regarde si la macro fonctionne en auto


J'ai rempli la ligne de A à AN, la macro marche pas en auto :/ c'est bizarre mais elle fonctionne lorsque j'exécute le code.

Bonjour

Il faut le fichier en cause

Je ne peux pas joindre de fichier mais c'est bon j'avais un terme faux, c'est nickel merci beaucoup !!

Du coup j'ai rebesoin de ton aide, en fait dans le tableau j'ai des cellules qui sont non remplies, j'ai essayé de mettre des zéro et de les masquer par la mise en forme conditionnelle mais le format remplissage peut changer pour certaines cellules (certaines en format rouge et d'autres en "normal"). Donc je voulais savoir si l'on pouvait faire exactement le même tri mais après avoir rempli la première cellule (A) et la dernière (AN) mais en ne prenant pas en compte le remplissage des cellules entre A et AN ^^" un peu compliqué !

Bonjour

A tester

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("A4:AN200")) Is Nothing Then
    If Range("A" & Target.Row) <> "" And Range("AN" & Target.Row) <> "" Then
      Call Tri
    End If
  End If
End Sub

Parfait !! Merci beaucoup de ton aide !!

Rechercher des sujets similaires à "comment trier infos nom macro"