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 :

Macro et bouton


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 27
    Points
    27
    Par défaut Macro et bouton
    Bonjour tout le monde,

    J'ai un problème concernant l'exécution d'une macro avec un bouton. En fait la macro marche très bien avec alt+F8 mais ne marche pas (ou du moins une fois sur deux) avec un bouton. Je suis sous Office 2016.

    Ci-joint le 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
    Sub test() 'je lance la macro depuis Feuil1
     
    With Sheets("Feuil2")
        .Unprotect
        .Range("A5:A6").ClearContents
        .Protect
    End With
     
    ActiveSheet.Unprotect
    If Range("A5") <> "Fin" Then
     
        With Range("A5")
            .Locked = False
            .Interior.Color = 150000
        End With
     
    Else
     
        With Range("A5")
            .Locked = False
            .Interior.Color = xlAutomatic
        End With
     
    End If
    ActiveSheet.Protect
     
    End Sub
    Voilà j'ai juste deux feuilles nommées "Feuil1" et "Feuil2". Sur "Feuil2" il n'y a rien et sur "Feuil1" il y a juste un mot quelconque en A5 et le bouton qui lance la macro.

    Merci de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Gordon72 Voir le message
    Bonjour,

    Votre macro placée dans un module standard fonctionne très bien avec le bouton.

    Sinon :

    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
     
     Sub test() 'je lance la macro depuis Feuil1
     
        With Sheets("Feuil2")
            .Unprotect
            .Range("A5:A6").ClearContents
            .Protect
        End With
     
        With Sheets("Feuil1")
             .Unprotect
             If .Range("A5") <> "Fin" Then
                With .Range("A5")
                     .Locked = False
                     .Interior.Color = 150000
                End With
             Else
                With .Range("A5")
                    .Locked = False
                    .Interior.Color = xlAutomatic
                End With
             End If
             .Protect
        End With
     
    End Sub

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Gordon72 Voir le message
    ne marche pas (ou du moins une fois sur deux) avec un bouton. Je suis sous Office 2016.
    Que devrait-elle faire quand sa marche ?
    Que ne fait-elle pas quand ça ne marche pas ? (mauvais résultats ? plantage ? message d'erreur ?)

    Sur "Feuil2" il n'y a rien
    Dans ce cas, pourquoi vouloir effacer le contenu de A5:A6 s'il n'y a rien ?

    Pour la partie du code qui concerne Feuil1, il semblerait qu'une mise en forme conditionnelle pourrait faire la même chose plus simplement.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 27
    Points
    27
    Par défaut
    Bonsoir et merci pour vos réponses,

    Alors déjà en effet oui cette macro ne sert à rien dans le contexte où je la présente ^^. J'ai plus de 6000 lignes de code donc je ne présente ici qu'un exemple.

    Voici ce que j'obtiens :
    *Si je lance la macro avec alt+F8 -> tout fonctionne
    *SI je lance depuis "bouton 1" alors là -> "erreur 1004 : Impossible de définir la propriété Locked de la classe range."

    Ci-joint un exemple :
    erreur.xlsm

    Bon après j'arrive à contourner le problème mais ça me titille de ne pas comprendre ce qui se passe . Je me demande si Excel n'a pas un problème avec les .locked et les .protect dans le même module...

    Merci de votre aide en tout cas.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Gordon72 Voir le message
    Bonjour,

    Effectivement, les boutons sont inopérants avec la protection, les boutons ayant la propriété verrouillé.

    En les déverrouillant (clic droit sur le bouton, puis format de contrôle, onglet protection), les macros se lancent bien à partir des boutons.

    Pièce jointe 235894

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 27
    Points
    27
    Par défaut
    Bonjour Eric,

    Oula 4h00 du mat ça ne chôme pas ^^.

    Alors chez moi le déverrouillage du bouton ne change rien.

    Le petit piège avec le bouton 1 et que l'on croit que la macro marche si on clique une seule fois dessus car elle exécute bien un code. Mais en réalité si on reclique dessus une deuxième fois on voit que ça ne marche pas...

    Le problème vient du fait que si je lance la macro avec le bouton 1 alors ma nouvelle activesheet devient la Feuil2 et on finit d'ailleurs dessus (ce qui n'est pas normal). Par contre si je lance depuis alt+F8 là ça marche bien et on reste bien sur la Feuil1. Maintenant si on essaie avec le bouton 2 (macro où j'ai lancée la suppression des cellules de la Feuil 2 à la fin) là ça fonctionne normalement que ce soit avec bouton 2 ou avec alt+F8. Je ne comprends pas du tout...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Gordon72 Voir le message
    As-tu essayé le code de mon premier message ?

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 27
    Points
    27
    Par défaut
    Alors avec votre code le problème persiste... Avec le bouton mon activesheet passe en Feuil2 (ce qui n'est pas normal) alors qu'en alt+F8 là ben ça marche comme avec mon code... Petite précision il faut appuyer au moins une deuxième fois sur le bouton 1pour constater l'erreur.

    Ce qui me gêne surtout là dedans c'est que j'aimerais si possible déjà comprendre pourquoi j'ai deux actions différentes selon si je lance avec le bouton où depuis alt+F8. Petite faille d'Excel peut-être ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Gordon72 Voir le message
    Ci-joint, ton fichier modifié. Je ne vois pas où est le problème.

    Pièce jointe 236023

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 27
    Points
    27
    Par défaut
    Toujours le même problème. Essayez de lancer depuis alt+F8 et avec le bouton 1 et vous verrez que le comportement du code n'est pas le même... l'activesheet change (elle passe de Feuil1 à Feuil2 avec le bouton) alors que l'on devrait rester sur Feuil1. Du moins moi ça fait comme ça.

    Essayer avec le fichier suivant en prenant soin de cliquer au moins deux fois sur bouton 1 : erreur modifié EK_Gordon.xlsm

    J'aimerais bien comprendre ce qui se passe afin de ne pas réitérer ce problème dans mes programmations futures.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Gordon72 Voir le message
    Tout fonctionne correctement chez moi et je ne constate pas ce que tu décris.
    Justement, le code que j'ai modifié ne travaille que sur les onglets nommément désignés et il n'y a pas de commandes Activate, Select ou Goto.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 27
    Points
    27
    Par défaut
    Avez-vous essayé en cliquant deux fois sur le bouton 1 du fichier de mon dernier message ? Que vous affiche les msgbox que j'ai rajoutées ? Là je ne comprends pas ce qui peut bien se passer... Je vous posterai une vidéo de mon écran si ça ne vous le fait pas.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Gordon72 Voir le message
    Que vous affiche les msgbox que j'ai rajoutées ?
    Feuil1 au début et à la fin chaque fois.

  14. #14
    Invité
    Invité(e)
    Par défaut Une précision pour la macro Test2
    Citation Envoyé par Gordon72 Voir le message
    Si tu es sur Feuill2 et que tu lances test2 avec Alt-F8, c'est la cellule A5 de la Feuill2 qui va changer de couleur et c'est normal par rapport à ce code. Range("A5") ne se rapporte pas Feuil1 mais à l'onglet actif. C'est le . devant Range("A5") qui indique que cette cellule se rapporte à Feuil1.

    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
     
    Sub test2() 
     
        With Sheets("Feuil1")
     
            ActiveSheet.Unprotect
     
            If Range("A5") <> "Fin" Then
                With Range("A5")
                    .Locked = False
                    .Interior.Color = 150000
                End With
            Else
                With Range("A5")
                    .Locked = False
                    .Interior.Color = xlAutomatic
                End With
     
            End If
            .Protect
      End With
     
        With Sheets("Feuil2")
            .Unprotect
            .Range("A5:A6").ClearContents
            .Protect
        End With
     
    End Sub
    Pour éviter cela, le code suivant fonctionne quel que soit l'onglet où tu te situes :

    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
     
    Sub Test2Modifie()
     
        With Sheets("Feuil1")
            .Unprotect
            With .Range("A5")
                 .Locked = False
                 If .Value <> "Fin" Then
                    .Interior.Color = 150000
                 Else
                    .Interior.Color = xlAutomatic
                 End If
            End With
            .Protect
        End With
     
        With Sheets("Feuil2")
             .Unprotect
             .Range("A5:A6").ClearContents
             .Protect
        End With
     
    End Sub

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 27
    Points
    27
    Par défaut
    Si tu es sur Feuill2 et que tu lances test2 avec Alt-F8, c'est la cellule A5 de la Feuill2 qui va changer de couleur et c'est normal par rapport à ce code. Range("A5") ne se rapporte pas Feuil1 mais à l'onglet actif. C'est le . devant Range("A5") qui indique que cette cellule se rapporte à Feuil1.
    Mais c'est justement bien là le problème. Je lance depuis Feuil1 et non pas Feuil2 mais la macro finit sur Feuil2 quand je lance depuis le bouton 1.
    Pour faire plus simple car je ne veux pas vous embêter pour une histoire comme ça plus lgtps : pourquoi la macro marche avec alt+F8 et déconne avec le bouton 1 ?

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Gordon72 Voir le message
    pourquoi la macro marche avec alt+F8 et déconne avec le bouton 1 ?
    Si le fichier essayé est celui que j'ai testé, il y a un autre problème sur ton PC.

  17. #17
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    Sur mon Excel 2007, certaines lignes du code de ton fichier occasionnent des erreurs. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ActiveSheet.Name
    La raison en est peut-etre que la feuille Feuil1 est corrompue. Elle contient du contenu illisible et il m'est impossible de la supprimer.
    Si je copie tout son contenu dans une nouvelle feuille et que je renomme la nouvelle feuille "Feuil1", tout ton code fonctionne sans erreur.
    Cordialement

    Docmarti.

Discussions similaires

  1. macro sur bouton
    Par touche_a_tout dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/09/2007, 23h22
  2. Est il possible de lier une macro à un bouton ?
    Par rimbaut dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/08/2007, 08h17
  3. Affectation de macros à des boutons créés dynamiquement
    Par JM_Cholet dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/07/2007, 14h09
  4. Macro Creation Bouton d'action
    Par nono le golfeur dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/07/2007, 14h17
  5. [VBA Excel] Associer N macros à N boutons suite à un événement
    Par Vorillyan dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 24/11/2006, 08h46

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