Macro tri tableau - pb-

Résolu
benji71 Messages postés 738 Date d'inscription   Statut Membre Dernière intervention   -  
benji71 Messages postés 738 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous et toutes,

j'espère que vous allez bien.
je poste ce message car j'ai un souci avec l'éxécution de ma macro.
cherchant à faire un tri dans le sens plus petit plus gard, j'ai trouvé cette macro que j'ai mis sur ma woorkdsheet :

rivate Sub Worksheet_Change(ByVal Target As Range)
Static EnCours As Boolean 'Evite l'effet de boucle sur l'évènement Change()
If EnCours Then Exit Sub
If Not Application.Intersect(Target, Range("k3:l35")) Is Nothing Then
EnCours = True
Range("k3:l35").Sort Key1:=Range("l2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
EnCours = False
End If
End Sub


le hic, c'est que ne s'applique pas..."Ah ! voila les petits futés qui vont "piqué" les macros des autres et quine savent pas l'utiliser :-)"

je suis sur que parmi vous il y a des petits "bisons" qui auront la solution..

je joins le fichier histoire que je sois compris par le plus grand nombre : https://www.cjoint.com/?3GttaIk1ewU

merci de votre aide et très bonne soirée à vous,

cdlmnt,

berni///



A voir également:

10 réponses

eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

Range("k3:l35").Sort Key1:=Range("l2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Key1:=Range("l2") : non, c'est en dehors de ta plage. Donc L3 (ou K3 si tu veux trier par nom)
Header:=xlYes : non, tu n'as pas de ligne de titre, donc xlno

Range("k3:l35").Sort Key1:=Range("L3"), Order1:=xlAscending, Header:=xlNo
devrait suffire.

eric
0
benji71 Messages postés 738 Date d'inscription   Statut Membre Dernière intervention   23
 
bonjour eriiic, bonjour à tous,

merci à vous de m'avoir répondu. mais visiblement il y a qq chose que j'ai pas compris car cela ne fonctionne pas. voici le macro que je placé :

Private Sub Worksheet_Change(ByVal Target As Range)
Static EnCours As Boolean 'Evite l'effet de boucle sur l'évènement Change()
If EnCours Then Exit Sub
If Not Application.Intersect(Target, Range("k3:l35")) Is Nothing Then
EnCours = True
Range("k3:l35").Sort Key1:=Range("L3"), Order1:=xlAscending, Header:=xlNo
EnCours = False
End If
End Sub

mais ,cela n'a pas d'effet.. :-(

je ne comprends pas...

l'objectif es de trier la tableau sur base de la colonne L mais ça prends pas...

aurai-je commis une erreur ?

merci de votre aide...

cdlmnt,

berni///
0
benji71 Messages postés 738 Date d'inscription   Statut Membre Dernière intervention   23
 
bonjour eriiic, bonjour à tous,

merci à vous de m'avoir répondu. mais visiblement il y a qq chose que j'ai pas compris car cela ne fonctionne pas. voici le macro que je placé :

Private Sub Worksheet_Change(ByVal Target As Range)
Static EnCours As Boolean 'Evite l'effet de boucle sur l'évènement Change()
If EnCours Then Exit Sub
If Not Application.Intersect(Target, Range("k3:l35")) Is Nothing Then
EnCours = True
Range("k3:l35").Sort Key1:=Range("L3"), Order1:=xlAscending, Header:=xlNo
EnCours = False
End If
End Sub

mais ,cela n'a pas d'effet.. :-(

je ne comprends pas...

l'objectif es de trier la tableau sur base de la colonne L mais ça prends pas...

aurai-je commis une erreur ?

merci de votre aide...

cdlmnt,

berni//
0
benji71 Messages postés 738 Date d'inscription   Statut Membre Dernière intervention   23
 
le problème pourrait-il provenir du fait qu'il y a des les cellules k3:k35 une formule ?
j'ai essayé sur un autre tableau et sans formule et ça semble sauf que le classement ne se fait pas du plus élevé au moins élevé mais du mois élevé au plus élevé.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
Bonjour,

dans la colonne L (difficile de savoir si c'est I majuscule ou L miniscule!!!) tu as
une formule

L'événement "change" ne réagit que sur saisie et non sur calcul d'une cellule...

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
benji71 Messages postés 738 Date d'inscription   Statut Membre Dernière intervention   23
 
Bonjour michel_m,

j'ai une formule en l3:l35.
voici le fichier avec la modification proposé par eriiic :https://www.cjoint.com/?3Gula7nYcgJ

merci pour votre aide

cdlmnt,

berni////
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
désolé, je dois partir!...
bon après midi
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour à tous,

voici le fichier avec la modification proposé par eriiic
Non, j'avais mis Key1:=Range("L3") et tu as laissé Key1:=Range("L2")

sauf que le classement ne se fait pas du plus élevé au moins élevé mais du mois élevé au plus élevé.
Ca trie dans l'ordre que tu lui indiques : Order1:=xlAscending
Si tu te mettais sur .Sort et que tu faisais F1 ?

Et comme dit michel :
L'événement "change" ne réagit que sur saisie et non sur calcul d'une cellule...
Donc soit tu revalides une des cellule de K3:L35 (mets tes ref en majuscule stp), soit tu mets ta macro sur un bouton, soit tu supervises les cellules nécessitant un nouveau tri (colonnes D et/ou E sans doute)

eric
0
benji71 Messages postés 738 Date d'inscription   Statut Membre Dernière intervention   23
 
bonjour eriiic,

merci de votre réponse. désolé de répondre seulement maintenant mais j'ai eu des souci d'accès à l'internet (mon pc me lâche).

j'ai bine compris votre message. en résumé si je comprends bien ma macro doit devenir :

Private Sub Worksheet_Change(ByVal Target As Range)
Static EnCours As Boolean 'Evite l'effet de boucle sur l'évènement Change()
If EnCours Then Exit Sub
If Not Application.Intersect(Target, Range("K3:L35")) Is Nothing Then
EnCours = True
Range("K3:L35").Sort Key1:=Range("L3"), Order1:=Descending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
EnCours = False
End If
End Sub

mais celle-ci ne marche" pas car j'ai des formules dans ma colonne L.
correct ?

si je veux appliquer une macro je dois :
soit créer un bouton pour mettre la macro,
soit je passe par une autre colonne pour appliquer la macro
soit et là j'ai pas compris, je "revalide une des cellule de K3:L35" qu'entendez-vous par revalidez ?

je reposte le fichier : https://www.cjoint.com/?3GvtcSBdX0Z
mais je crois que les carottes sont cuites :-) (comme ça je le sais pour la prochaine)

très cdlmnt,

berni///
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonsoir,,

mais celle-ci ne marche" pas car j'ai des formules dans ma colonne L.
correct ?

Tout à fait, l'évènement Change n'est déclenché que sur une saisie. Et tes saisies nécessitant un recalcul se font en D.
Et Order1:=xlDescending

soit et là j'ai pas compris, je "revalide une des cellule de K3:L35" qu'entendez-vous par revalidez ?
Tu double-cliques en K3 comme si tu voulais l'éditer et tu valides. Ca déclenche l'évènement Change comme c'est une saisie.

Mais surveille D :
Private Sub Worksheet_Change(ByVal Target As Range)
    Static EnCours As Boolean       'Evite l'effet de boucle sur l'évènement Change()
    If EnCours Then Exit Sub
    If Not Application.Intersect(Target, Range("D:D")) Is Nothing Then
        EnCours = True
        Range("K3:L35").Sort Key1:=Range("L3"), Order1:=xlDescending, Header:=xlNo
        EnCours = False
    End If
End Sub

Dès que tu saisiras une commune le classement se refera.

eric

0
benji71 Messages postés 738 Date d'inscription   Statut Membre Dernière intervention   23
 
bonjour eriiic,

super ! ça marche !
un tout grand merci pour votre réponse et de votre patience.

je vous souhaite une belle journée...

cdlmnt,

berni///
0