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 :

Bouton et macros en serie


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 94
    Par défaut Bouton et macros en serie
    Bonjour a tous,

    J'ai un fichier Excel avec plusieurs feuilles et sur chaque feuille, je dois lancer une macro differente.

    Comment combiner tout cela, afin d'avoir sur une premiere feuille un bouton a cliquer et qui operera toutes les operations sur les differentes feuilles, tout en appliquant correctement a chaque feuille sa macro correspondante ?

    Voici par exemple mon premier code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub CopierGlisser()
    '
    ' CopierGlisser Macro
    ' Macro recorded 5/29/2012 by merlinus3000
    '
     
    '
        Range("A2:L2").Select
        Selection.AutoFill Destination:=Range("A2:L1000"), Type:=xlFillDefault
        Range("A2:L1000").Select
        Range("A2").Select
    End Sub
    Merci a tous pour votre aide.

    P.s. : j'ai utilise la recherche pour le mot cle "bouton" mais cela n'a pas donne grand chose.

  2. #2
    Membre expérimenté Avatar de CODYCO
    Homme Profil pro
    Webplanneur
    Inscrit en
    Avril 2009
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 217
    Par défaut
    Cela peux etre relativement simple je pense, exécute une seule et même macro placer dans "Thisworkbook" qui démarrera à l'ouverture du fichier donc et ensuite pour chaque feuille tu execute ta macro en commencant par "With /End With" et la page concerné.

    Si cela ne te parles pas je te conseil fortement de consulter les tuto de base avant de te lancer...

    (Voir silkyRoad.developpez.com)

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 94
    Par défaut
    Mon souci etant une contrainte de temps

  4. #4
    Membre éclairé Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Par défaut
    Bonjour

    Dans un module, tu appelles toutes les macro de tes feuilles et ensuite sur ton bouton, tu attributs la macro du module. (ici, macro_all)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub macro_all()
     
    Call feuil1.macro1
     
    Call feuil2.macro2
     
    Call feuil3.macro3
     
     
    End Sub
    "feuil1", c'est le CodeName de la feuille, pas son nom.

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 94
    Par défaut
    J'ai fini par sortir ce 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Sub Button()
     
    '
    ' Copy of RuleA to avoid break in the rules
     
        Sheets("RuleA").Select
        Range("A2:L2").Select
        Selection.AutoFill Destination:=Range("A2:L1000"), Type:=xlFillDefault
     
    ' Copy of RuleB to avoid break in the rules
     
        Sheets("RuleB").Select
        Range("A2:L2").Select
        Selection.AutoFill Destination:=Range("A2:L1000"), Type:=xlFillDefault
     
    ' Copy of RuleC to avoid break in the rules
     
        Sheets("RuleC").Select
        Range("A2:L2").Select
        Selection.AutoFill Destination:=Range("A2:L1000"), Type:=xlFillDefault
     
    ' Copy of LiteD to LiteDraw, so the sorting can be done
     
        Sheets("LiteD").Select
        Range("A2:J2000").Select
        Selection.Copy
     
        Sheets("RuleDraw").Select
        Range("A2").Select
        ActiveSheet.Paste
     
        Columns("A:K").Sort Key1:=Range("K2"), Order1:=xlAscending, Header:= _
            xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
     
    ' Copy of RuleD to avoid break in the rules
     
        Sheets("RuleD").Select
        Range("A2:J2").Select
        Selection.AutoFill Destination:=Range("A2:J1000"), Type:=xlFillDefault
     
    ' Cleaning of RuleEraw
     
        Sheets("RuleEraw").Select
        Range("A2:J2000").Select
        Selection.ClearContents
     
    ' Copy of the content of LiteE and LiteD_E
     
        Sheets("LiteE").Select
        Range("A2:J750").Select
        Selection.Copy
     
        Sheets("RuleEraw").Select
        Range("A2").Select
        ActiveSheet.Paste
     
        Sheets("LiteD_E").Select
        Range("A2:J2000").Select
        Selection.Copy
     
        Sheets("RuleEraw").Select
        Range("A1000").Select
        ActiveSheet.Paste
     
    ' Sorting of RuleEraw
     
        Columns("A:K").Sort Key1:=Range("K2"), Order1:=xlAscending, Header:= _
            xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
     
    ' Find and replace the strings difference between RuleD and RuleE
     
        Cells.Replace What:="Approved Purchasing Process (Under Scrutiny)", _
            Replacement:="UNDER SCRUTINY", LookAt:=xlPart, SearchOrder:=xlByRows, _
            MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
     
        Cells.Replace What:="Approved Purchasing Process", Replacement:= _
            "EXCEPTION VIA CONTRACT", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase _
            :=False, SearchFormat:=False, ReplaceFormat:=False
     
     
    End Sub
    Que j'ai insere dans un module.

    Et une fonction dans une feuille, pour le bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton1_Click()
     
    Operations.Button
     
    End Sub
    Cela fonctionne, mais des que j'ai une autre feuille Excel ouverte, ca bugge.

    Est-ce qu'il y a des conseils a suivre, ou des trucs a eviter pour etre sur que mon code ne crash pas ches les utilisateurs finaux ?

    Merci de votre aide !!!

  6. #6
    Membre éclairé Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Par défaut
    Bonjour,

    pour ne pas que sa plante si il y a plusieurs classeur d'ouvert, tu peux utiliser un With

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Button()
     
    With ThisWorkBook
    ' Copy of RuleA to avoid break in the rules
     
        .Sheets("RuleA").Select
        Range("A2:L2").Select
        Selection.AutoFill Destination:=Range("A2:L1000"), Type:=xlFillDefault
    
    'met la suite de ton code et n'oublie pas le 
    End with

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 94
    Par défaut
    Et cela fonctionnera meme si j'ai mis le code dans un module ?

  8. #8
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Tu dois éviter les « Select » autant que possible et surtout indiquer explicitement sur quelle feuille tu effectues le traitement.
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Sub Button()
     
        ' Copy of RuleA to avoid break in the rules
        With Sheets("RuleA")
            .Range("A2:L2").AutoFill Destination:=.Range("A2:L1000"), Type:=xlFillDefault
        End With
     
        ' Copy of RuleB to avoid break in the rules
        With Sheets("RuleB")
            .Range("A2:L2").AutoFill Destination:=.Range("A2:L1000"), Type:=xlFillDefault
        End With
     
        ' Copy of RuleC to avoid break in the rules
        With Sheets("RuleC")
            .Range("A2:L2").AutoFill Destination:=.Range("A2:L1000"), Type:=xlFillDefault
        End With
     
        ' Copy of LiteD to LiteDraw, so the sorting can be done
        Sheets("LiteD").Range("A2:J2000").Copy
        With Sheets("RuleDraw")
            .Paste Destination:=.Range("A2")
            .Columns("A:K").Sort Key1:=.Range("K2"), Order1:=xlAscending, Header:= _
            xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
        End With
     
        ' Copy of RuleD to avoid break in the rules
        With Sheets("RuleD")
            .Range("A2:J2").AutoFill Destination:=.Range("A2:J1000"), Type:=xlFillDefault
        End With
     
        ' Cleaning of RuleEraw
        Sheets("RuleEraw").Range("A2:J2000").ClearContents
     
        ' Copy of the content of LiteE and LiteD_E
        Sheets("LiteE").Range("A2:J750").Copy
        With Sheets("RuleEraw")
                .Paste Destination:=.Range("A2")
        End With
     
        Sheets("LiteD_E").Range("A2:J2000").Copy
        With Sheets("RuleEraw")
            .Paste Destination:=.Range("A1000")
            'Sorting of RuleEraw
            .Columns("A:K").Sort Key1:=.Range("K2"), Order1:=xlAscending, Header:= _
            xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
        End With
     
        'Find and replace the strings difference between RuleD and RuleE
        Sheets("RuleD").Cells.Replace What:="Approved Purchasing Process (Under Scrutiny)", _
            Replacement:="UNDER SCRUTINY", LookAt:=xlPart, SearchOrder:=xlByRows, _
            MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
     
        Sheets("RuleE").Cells.Replace What:="Approved Purchasing Process", Replacement:= _
            "EXCEPTION VIA CONTRACT", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase _
            :=False, SearchFormat:=False, ReplaceFormat:=False
     
    End Sub
    Cordialement.

  9. #9
    Membre éclairé Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Par défaut
    Citation Envoyé par merlinus3000 Voir le message
    Et cela fonctionnera meme si j'ai mis le code dans un module ?
    Si le module est dans le même Workbook sa devrait fonctionner oui. Et comme l'a si bien dit gFZT82, tu peux même faire mieux.

    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .Sheets("RuleA").Select
    Range("A2:L2").Select
    Selection.AutoFill Destination:=Range("A2:L1000"), Type:=xlFillDefault
    tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ThisWorkbook
        .Sheets("RuleA").Range("A2:L2").AutoFill Destination:=.Sheets("RuleA").Range("A2:L1000"), Type:=xlFillDefault
        .Sheets("RuleB").Range("A2:L2").AutoFill Destination:=.Sheets("RuleB").Range("A2:L1000"), Type:=xlFillDefault
    end with
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With ThisWorkBook
        With .Sheets("RuleA")
            .Range("A2:L2").AutoFill Destination:=.Range("A2:L1000"), Type:=xlFillDefault
        End With 'RuleA
        With .Sheets("RuleB")
            .Range("A2:L2").AutoFill Destination:=.Range("A2:L1000"), Type:=xlFillDefault
        End With 'RuleB
    End With 'ThisWorkBook
    Voilà c'est des exemples de code que tu peux utiliser pour eviter d'avoir des problèmes entre tes différents classeurs et feuilles utilisés

Discussions similaires

  1. Création automatique de plusieurs boutons avec macro associées
    Par barjovial dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/06/2008, 10h08
  2. creation/suppression bouton via macro
    Par sebhm dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/06/2008, 12h35
  3. Bouton supprimer Macro
    Par ANTMA dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/09/2007, 13h40
  4. Création d'un bouton avec macro pour impression rapide
    Par citrouilllle dans le forum VBA Word
    Réponses: 16
    Dernier message: 14/07/2007, 00h20
  5. Modifier le nom d'un bouton par macro
    Par COCONUT2 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/06/2007, 12h19

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