IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Associer Cellule à un code VBA + tri automatique [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut Associer Cellule à un code VBA + tri automatique
    Bonjour,

    Je souhaiterais avoir un tri automatique d'une colonne par simple clique sur un bouton.
    J'ai trouvé les codes en cherchant sur le net et sur le forum et pourtant j'ai une erreur.

    Je ne m'y connais pas en VBA mais je sais que certains membres avaient pu m'apporter leur aide en prenant de leur temps.

    J'espère ainsi que vous pourrez m'aider.

    Code pour Associer un Code VBA à une cellule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     
        If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
     
        'macro à mettre
     
        End If
    Code pour faire un trie automatique que j'insère sous 'macor à mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Call Private Sub CommandButton1_Click()
        [C7:D660].Select
        Selection.Sort Key1:=Range("C7"), Order1:=xlAscending
        [C7].Select
    J'ai combiné les deux pour avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     
        If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
     
        'macro à mettre
    Call Private Sub CommandButton1_Click()
        [C7:D660].Select
        Selection.Sort Key1:=Range("C7"), Order1:=xlAscending
        [C7].Select
        End If
    Mais j'ai une erreur de synthaxe ou j'ai également eu le message qu' "un End Sub était attendu".

    Je précise que j'ai mis ce code en faisant un clique droit/Visualiser le code sur la feuille que je souhaite.

    J'ai des donnée sur la colonne C, celles-ci commencent en C7 (pour l'instant les données s'arretent en C19 mais je dois en rajouter un grand nombre), et je souhaite ajouter la cellule à cliquer pour le tri en C6.

    Merci d'avance.

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Ci dessous un code qui tri la colonne ou on fait le double click, le tableau commençant ligne 7 (ligne de titre)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Range("A7:D" & Range("C" & Rows.Count).End(xlUp).Row).Sort Key1:=Cells(8, Target.Column), Order1:=xlAscending, Header:= _
            xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    End Sub
    Jérôme

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    Super, ca fonctionne impec.
    UN grand merci pour ta rapidité et ton aide.

    Pourrais tu juste m'expliquer pourquoi tu as écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A7:D" & Range("C" & Rows.Count)
    Juste à titre d'information si on veut "étendre la séelction" lors du tri que faudrait il rajouter au code?

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C" & Rows.Count).End(xlUp).Row
    Le code ci dessus retourne la dernière ligne utilisée de la colonne C.
    On utilise Rows.Count ce qui permet de rendre dynamique le nombre de lignes total d'une feuille et ainsi éviter d'avoir un nombre différent pour excel 2003 et excel 2007-2010
    Jérôme

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    En faite ma question portait surtout sur
    Je me demande sa car je souhaite commencer mon trie à partir de C7.

    Par défaut se trie "étend la sélection"?

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Le code commence le tri de la ligne 8 (on considère la ligne 7 comme titre) jusqu’à la dernière ligne utilisée
    Si le titre est ligne 6 adapte le code en remplacant 7 par 6 et 8 par 7
    Jérôme

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    D'accord, merci pour ces précisions.
    Vu que ce code compte des lignes, il étend la sélection lors du trie. Ce qui implique que toutes les lignes sont triées hors je souhaiterais que seule la colonne soient triées.

    Est ce possible? Après je ne te dérange plus.

  8. #8
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Range(Cells(7, Target.Column), Cells(Range("C" & Rows.Count).End(xlUp).Row, Target.Column)).Sort Key1:=Cells(8, Target.Column), Order1:=xlAscending, Header:= _
            xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    End Sub
    Jérôme

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    super merci.
    Cela me sera très utile.

    Merci pour ton temps.

    Crdt

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    bonjour,

    je reviens vers toi car je souhaiterais une précision.
    Avec le code que tu m'as fourni pour le tri, dès que je fais un double clic dans ma colonne pour faire une modificatin de texte celui ci est trié.

    Est-il possible de localiser le tri à une cellule.

    Pour un tri en colonne B, commencant en B6, je souhaiterais un tri en double cliquant uniquement sur la cellule B5 par exemple. Tu trouveras mon fichier excel en PJ.

    Est ce possible?

    Normalement je n'ai pas attribué de tri à la colonne F mais pourtant dès que je clique sur une cellule de la colonne F il y a un tri...
    dans l'attente de ta réponse.
    merci
    Fichiers attachés Fichiers attachés

  11. #11
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    En reprenant mon code plus haut

    On ne fait l'action que si la ligne double cliquer est la 5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
      if Target.Row = 5 then
        Range(Cells(7, Target.Column), Cells(Range("C" & Rows.Count).End(xlUp).Row, Target.Column)).Sort Key1:=Cells(8, Target.Column), Order1:=xlAscending, Header:= _
            xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
       end if
    End Sub
    Jérôme

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup.

    Et comment ca se fait que quand je double clic sur la colonne F celle ci se trie alors que je ne lui ais pas attribué de code?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        If Target.Row = 5 Then
        Range("A5:J" & Range("B" & Rows.Count).End(xlUp).Row).Sort Key1:=Cells(6, Target.Column), Order1:=xlAscending, Header:= _
            xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
        End If
    End Sub
    Private Sub Worksheet_BeforeDoubleClick2(ByVal Target As Range, Cancel As Boolean)
        If Target.Row = 5 Then
        Range("A5:J" & Range("C" & Rows.Count).End(xlUp).Row).Sort Key1:=Cells(6, Target.Column), Order1:=xlAscending, Header:= _
            xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
        End If
    End Sub
    Private Sub Worksheet_BeforeDoubleClick3(ByVal Target As Range, Cancel As Boolean)
        If Target.Row = 5 Then
        Range("A5:J" & Range("D" & Rows.Count).End(xlUp).Row).Sort Key1:=Cells(6, Target.Column), Order1:=xlAscending, Header:= _
            xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
        End If
    End Sub
    Private Sub Worksheet_BeforeDoubleClick4(ByVal Target As Range, Cancel As Boolean)
        If Target.Row = 5 Then
        Range("A5:J" & Range("G" & Rows.Count).End(xlUp).Row).Sort Key1:=Cells(6, Target.Column), Order1:=xlAscending, Header:= _
            xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
        End If
    End Sub
    J'ai utilisé le code que tu m'avais fournit en en rajoutant un pour les colonnes que je souhaitais pouvoir trier.

    J'ai modifié cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A5:J" & Range("D" & Rows.Count).End(xlUp).Row).Sort
    en mettant A5:J car sinon le tri n'étendait pas la sélection et m'affichais un message d'erreur.

  13. #13
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Pourquoi toutes ces procédures ? Seule la première étant exécutéeWorksheet_BeforeDoubleClickX ?
    Jérôme

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    bin parce que ca ne fonctionnait pas quand je cliquais sur les autres cellules. Mais je viens d'essayer en supprimant le reste et c'est bon.

    C'est grâce Target.Row = 5 du coup.
    merci pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Code VBA tri de cellules suivant l'heure et la date
    Par Chachoumie dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 15/04/2015, 10h12
  2. changer un code cellule en code vba
    Par UDSP50 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/12/2013, 21h31
  3. Afficher dans une cellule le code VBA d'un bouton
    Par greenzephyr dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/11/2010, 10h01
  4. [Excel\VBA] tri par ordre alphabatique et cellule associée
    Par jefe.k dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2007, 15h40
  5. Réponses: 2
    Dernier message: 27/10/2005, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo