Macro tri tableau - pb-

Résolu/Fermé
benji71 Messages postés 738 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 4 janvier 2015 - 19 juil. 2013 à 19:00
benji71 Messages postés 738 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 4 janvier 2015 - 22 juil. 2013 à 08:29
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 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
19 juil. 2013 à 20:23
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 samedi 22 mars 2008 Statut Membre Dernière intervention 4 janvier 2015 23
20 juil. 2013 à 09:55
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 samedi 22 mars 2008 Statut Membre Dernière intervention 4 janvier 2015 23
20 juil. 2013 à 09:57
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 samedi 22 mars 2008 Statut Membre Dernière intervention 4 janvier 2015 23
20 juil. 2013 à 10:42
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
20 juil. 2013 à 10:50
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 samedi 22 mars 2008 Statut Membre Dernière intervention 4 janvier 2015 23
20 juil. 2013 à 11:02
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
20 juil. 2013 à 11:46
désolé, je dois partir!...
bon après midi
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
20 juil. 2013 à 12:23
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 samedi 22 mars 2008 Statut Membre Dernière intervention 4 janvier 2015 23
21 juil. 2013 à 19:03
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 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
21 juil. 2013 à 20:59
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 samedi 22 mars 2008 Statut Membre Dernière intervention 4 janvier 2015 23
22 juil. 2013 à 08:29
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