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 :

Uniformiser une code Tri


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Uniformiser une code Tri
    Bonjour,

    Ci-dessous le ci-ode VBA généré par Excel pour trier une sélection dans une feuille donnée (ici ES).
    Je sois effectuer ce même tri dans le même classeur mais pour d'autres feuilles.
    Je voudrais n epas devoir créer la même Macro en changeant seulement le nom de la feuille.
    Comment modifier ce code pour qu'il puisse s'appliquer sur chaque feuille?

    Merci pour votre réponse

    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
    Sub Tri_num_mat()
    ' Tri_num_mat Macro
    '
     
        Range("A82:Q101").Select
        ActiveWorkbook.Worksheets("ES").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("ES").Sort.SortFields.Add Key:=Range("A82:A101"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("ES").Sort
            .SetRange Range("A82:Q101")
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Range("A82").Select
    End Sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 721
    Points : 28 544
    Points
    28 544
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu ajoutes à ta procédure Tri_num_mat() des arguments. Au moins un doit être le nom de la feuille ou l'objet feuille.
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Tri_num_mat(nomFeuille as String)
     
    Range("A82:Q101").Select
    ActiveWorkbook.Worksheets(nomFeuille).Sort.SortFields.Clear
    .....
    End Sub
    Dans ta commande Range("A82:Q101").Select, le Select est déconseillé parce-qu'il ralenti l'exécution et de plus ce il serait mieux de préciser la feuille
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Merci pour votre réponse rapide... et désolé pour le mail. suis vraiment novice sur ce forum.
    Cependant, étant très novice en la matière, je ne parviens pas à transformer le code pour qu'il fonctionne. L'idée est bien de faire tourner cette Macro dans toutes les feuilles différentes en n'écrivant qu'une seule fois la macro et à partir d'une icone sur la feuille de la faire tourner sur la feuille en cours. J'ai 20 feuilles avec des noms différents mais à chaque fois je dois faire tourner la même macro dans chaque feuille.
    Merci

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 721
    Points : 28 544
    Points
    28 544
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Lorsque tu auras adapté ta procédure en lui mettant des arguments comme je te l'ai suggéré.
    Tu peux parcourir toutes les feuilles du classeur avec un code tel que celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub TrieFeuille()
     Dim wSht As Worksheet
     For Each wSht In ThisWorkbook.Worksheets
         Tri_num_mat (wSht.Name)
     Next
    End Sub
    Sub Tri_num_mat(nomFeuille As String)
     MsgBox "Je vais trier la feuille " & nomFeuille
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci pour toutes ces infos,
    Mais je n'arrive pas à adapter mon code d'origine.
    Que dois-je mettre comme argument (c'est un concert que je ne maitrise pas du tout) et comme nomFeuille?

    Et comment adapter Range("A82:Q101").Select ?

    Re merci

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 721
    Points : 28 544
    Points
    28 544
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ton code d'origine dont j'ai mis en gras et souligné les constantes que tu devrais remplacer par des variables.
    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
    Sub Tri_num_mat()
    ' Tri_num_mat Macro
    '
        Range("A82:Q101").Select
        ActiveWorkbook.Worksheets("ES").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("ES").Sort.SortFields.Add Key:=Range("A82:A101"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("ES").Sort
            .SetRange Range("A82:Q101")
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Range("A82").Select
    End Sub
    A une procédure Sub ou Function, tu peux ajouter des arguments.
    Si tu regardes les constantes, tu constates que tu en as 2.
    ES qui représente le nom de la feuille et A82:Q101 qui représente la référence à la plage de cellules qui doit être triée.
    Donc tu dois prévoir au moins un argument (le nom de la feuille) et de préférence un 2ème argument pour le cas où la plage à trier ne serait pas la même sur toutes les feuilles.

    Exemple de ta procédure modifiée :
    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
    Sub Tri_num_mat(nomFeuille as String, maPlage as String)
    ' Tri_num_mat Macro
    '
        Range(maPLage).Select
        ActiveWorkbook.Worksheets(nomFeuille).Sort.SortFields.Clear
        ActiveWorkbook.Worksheets(nomFeuille).Sort.SortFields.Add Key:=Range(maPLage), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets(nomFeuille).Sort
            .SetRange Range(maPLage)
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub
    Pour appeler ta procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tri_num_mat("ES", "A82:Q101")
    Attention, je n'ai pas vérifié si ta procédure d'origine fonctionnait.
    Première remarque, ne pas utiliser la méthode Select, c'est parfaitement inutile et cela ralenti la procédure.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'y suis presque... Merci
    Mais comment faire pour appeler la procédure contenant les variables?

    Est-ce que je peux mettre ces codes pour changer de page ? La page est différente à chaque fois, mais la plage à trier est la même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Tri_num_mat("ES", "A82:Q101")
    Tri-num_mat("ER", "A82:Q101")
    Tri-num_mat("SO", "A82:Q101")
    Tri-num_mat("ME", "A82:Q101")
    ...
    Sur chaque page, j'ai créé un bouton cliquable pour exécuter la macro de tri. le clic doit donc déclencher le tri sur la bonne page.

    Merci

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 721
    Points : 28 544
    Points
    28 544
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Mais comment faire pour appeler la procédure contenant les variables?
    Est-ce que je peux mettre ces codes pour changer de page ? La page est différente à chaque fois, mais la plage à trier est la même.
    Il me semble avoir tout expliqué dans mon post (#6) du 27/03 à 16h53.
    Voir Exemple de ta procédure modifiée et Pour appeler ta procédure
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui, je sais, j'ai bien modifié mon code, mais je ne sais pas où et comment faire tourner l'appel du code Tri_num_mat("ES", "A82:Q101").
    Dois-je créer un code par page ?
    Comment faire tourner cet appel du code.
    Lorsque je veux le faire tourner dans le VBA il me met erreur de compilation , attendu =
    Est-ce que c'est cette ligne de code que je dois lier au bouton créé?

    Il me demande également le nom de la Macro.
    Concrètement, je n'arrive pas à faire le line entre la ligne d'appel de la Macro et la Macro elle-même.

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 721
    Points : 28 544
    Points
    28 544
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Un exemple ici
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Aide pour une code svp
    Par nicotine002 dans le forum Général Java
    Réponses: 1
    Dernier message: 29/12/2008, 15h08
  2. Interpretation d une code C en java
    Par sammyac dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 16/10/2008, 17h27
  3. Réponses: 4
    Dernier message: 06/06/2007, 14h55
  4. [XSLT]Recuperer une valeur parmis une liste. (tri)
    Par Asaturne dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 16/06/2006, 18h27

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