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 :

Afficher/Masquer un bouton de commande selon la valeur d'une zone de liste modifiable [XL-MAC 2016]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2023
    Messages : 3
    Par défaut Afficher/Masquer un bouton de commande selon la valeur d'une zone de liste modifiable
    Bonjour,

    Je me retrouve face à un problème sur Excel 2021 version Mac pour lequel je n'arrive pas à trouver de solution malgré de (très) nombreuses recherches.

    J'aimerais afficher/Masquer un bouton de commande selon la valeur d'une zone de liste modifiable.
    Pour cela j'ai créé une zone de liste modifiable (plage d'entrée = A1:A3 ; réponses = "", "oui", "non" ; cellule liée = D1, valeurs affichées dans la cellule liée = 1,2,3) et un bouton de contrôle nommé "Button2" pour lequel je n'ai pas encore affecté de macro mais cela ne change pas mon problème.

    J'ai inséré le code suivant dans la page de code de la feuille active (Feuil1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Worksheet_SelectionChange (ByVal Target As Range)
    If Range("D1").Value = 2 Then
    ActiveSheet.Shapes("Button2").Visible = True
    Else
    ActiveSheet.Shapes("Button2").Visible = False
    End If
    End Sub
    Ce code fonctionne mais je suis obligé de sélectionner une autre cellule après avoir fait mon choix dans la zone de liste afin de déclencher l'évènement et donc de masquer/afficher le bouton de commande.

    J'aimerais ne pas avoir à cliquer sur une autre cellule pour déclencher l'évènement.
    Parmi les solutions proposées j'ai trouvé :
    - Worksheet_Change (ByVal Target As Range) mais cette solution a pour effet d'afficher constamment le bouton de commande
    - Contrôle ActiveX mais non disponible sur Mac

    J'arrive un peu à court d'idée malheureusement....

    Merci d'avance pour votre aide !

  2. #2
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    tu as essayé avec Worksheet_Change ?

    Attention l'utilisation des sub Worksheet_Change worksheet_SelectionChange peut s'avérer coûteux puis que le sub va se déclencher sans arrêt quand tu vas travailler sur a feuille....

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2023
    Messages : 3
    Par défaut Worksheet_change
    Oui j’ai déjà essayé de changer pour worksheet_change() mais cela a pour effet d’afficher le bouton de commande quelle que soit la réponse saisie sur la zone de liste modifiable

  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
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une cellule liée à un contrôle "Formulaire" ne déclenche par la procédure événementielle Worksheet_Change si c'est le contrôle qui écrit dans cette cellule.
    En revanche, vous pouvez utiliser une Validation de donnée-Liste qui elle va déclencher l'événement depuis la cellule où a lieu la sélection.

    Avec une validation de données Liste, placée en cellule C3, qui fait référence à la plage A1:A3 où se trouve une cellule vide, "Oui" et "Non"

    Dans l'exemple de code ci-dessous le bouton formulaire nommé "Bouton 3" est visible uniquement lorsque vous sélectionnez "Oui"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
      With Target
       If .Address = "$C$3" Then
         Me.Shapes("Bouton 3").Visible = (.Value = "Oui")
       End If
      End With
    End Sub
    Test effectué sur un PC Windows, n'ayant pas de Mac à ma disposition
    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
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2023
    Messages : 3
    Par défaut
    Merci infiniment pour cette réponse très claire et détaillée !!

    J'ai tenté de rentrer le code proposé. Cela a eu pour effet de masquer effectivement le bouton de contrôle lorsque je selectionnais "non" dans la liste déroulante mais ce dernier ne réapparaissait pas lorsque je sélectionnais "oui".

    J'ai donc modifié le code de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub Worksheet_Change(ByVal Target As Range)
      With Target
       If .Address = "$C$3" Then
         If Range("C3").Value = "oui" Then
            ActiveSheet.Shapes("Bouton 3").Visible = True
         Else
         ActiveSheet.Shapes("Bouton 3").Visible = False
         End If
       End If
      End With
    End Sub
    Tout fonctionne parfaitement !! Bon j'imagine que le code n'est pas optimal mais je suis très content du résultat !

    Problème résolu, encore un grand merci pour votre aide.

  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
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Merci pour votre retour.
    C'est effectivement curieux que le code que j'ai publié et que j'ai évidemment testé, comme tout ce que je publie, n'ait pas fonctionné car c'est la façon la plus simple de modifier une valeur booléenne sans passer par un If...Then...Else.
    De plus Target est bien la cellule C3

    Dans mon code le O de "Oui" est en majuscule, le problème vient certainement de là.

    Pour ne pas avoir de problème de casse, il faut remplacer la ligne Me.Shapes("Bouton 3").Visible = (.Value = "Oui") par Me.Shapes("Bouton 3").Visible = (LCase(.Value) = "oui") ou Me.Shapes("Bouton 3").Visible = Not (StrComp(.Value, "Oui", vbTextCompare))
    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

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 28/11/2015, 13h39
  2. Réponses: 3
    Dernier message: 18/07/2007, 10h16
  3. Réponses: 4
    Dernier message: 23/04/2007, 14h01
  4. Réponses: 7
    Dernier message: 03/04/2007, 08h30
  5. Réponses: 2
    Dernier message: 04/09/2006, 16h58

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