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 :

Togglebutton dans un UserForm


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut Togglebutton dans un UserForm
    Bonjour,

    Au départ de l'action losque la colonne J est affichée, mon bonton foctionne à merveille.

    Mais si au départ de l'action, la colonne J est masquée, je dois appuyer 2 fois sur le bouton et il y a un clignotement de l'écran, ensuite la macro focntionne.

    J'ai testé plusieurs solution, mais je tourne en rond ...

    Merci pour votre aide
    Meilleures salutations
    Philippe



    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
    Private Sub ToggleButton_Planning_Click()
        If ToggleButton_Planning.Value = True Then
    '        ToggleButton_Planning.BackColor = vbGreen
            ToggleButton_Planning.Caption = "Afficher le PV"
            Liaisons_Dossier_Onglet_Divers.Activer_Afficher_que_le_planning
    'End If
    Else
    '    If ToggleButton_Planning.Value = False Then
    '        ToggleButton_Planning.BackColor = vbRed
            ToggleButton_Planning.Caption = "Afficher le planning"
            Liaisons_Dossier_Onglet_Divers.Annuler_Afficher_que_le_planning 'afficher PV
        End If
    End Sub
    'Private Sub UserForm_Initialize()
    '    If Columns("J").Hidden = False Then
    '        ToggleButton_Planning.BackColor = vbGreen
    '        ToggleButton_Planning.Caption = "Afficher le PV"
    '    End If
    '        If Columns("J").Hidden = False Then
    '        ToggleButton_Planning.BackColor = vbRed
    '        ToggleButton_Planning.Caption = "Afficher le planning"
    '    End If
    'End Sub
    ToggleButton_Planning.xlsm

  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
    13 156
    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 156
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le contrôle ToggleButton ayant comme valeur un booléen, il est plus pratique de jouer sur la valeur des propriétés des objets concernés plutôt que d'utiliser la fonction SI
    Quant au texte (propriété Caption) du ToggleButton, personnellement j'utilise une variable tableau telle que Msg(0 to 1) qui permet d'afficher le message en fonction de la valeur renvoyée par le ToggleButton
    Ainsi si l'on souhaite masquer une colonne à l'aide d'un ToggleButton et afficher le message adéquat

    Voici un exemple rapide qui permet de masquer ou d'afficher la colonne 3 de la feuille nommée Feuil1 en cliquant sur le bouton bascule
    En tête du module du UserForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Explicit
    Dim Msg() As Variant
    Dim sht As Worksheet
    La procédure nommée CtrlStatus qui modifie la propriété Hidden de la colonne 3 et affiche le bon message du ToggleButton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub CtrlStatus()
      With Me.ToggleButton1
      sht.Columns(3).Hidden = .Value
      .Caption = Msg(Abs(.Value))
      End With
    End Sub
    La procédure événementielle UserForm_Initialize
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub UserForm_Initialize()
      Set sht = ThisWorkbook.Worksheets("Feuil1")
      Msg = Array("Masquer la colonne", "Afficher la colonne")
      Me.ToggleButton1.Value = sht.Columns(3).Hidden ' A l'initialisation du UserForm le ToggleButton prend la valeur de la propriété de la colonne 3
      CtrlStatus
    End Sub
    La procédure événementielle ToggleButton1_Click
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ToggleButton1_Click()
      CtrlStatus
    End Sub
    Et si tu souhaites que le bouton soit Rouge et Vert suivant sa valeur, tu ajoutes la ligne ci-dessous à l'intérieur du bloc With...End With de la procédure CtrlStatus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      .BackColor = IIf(.Value, vbRed, vbGreen)
    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
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut
    Bonjour Philippe Tulliez,

    Impeccable enfin ça marche, par contre j'ai un soucis, car le masquage ou l'affichage des colonnes se fait dans 2 autres macros et je vérifie l'état d'une seule colonne faisant partie de l'un des groupes par exmple la colle "J".

    Comment adapter votre macro pour quelle appel à 2 autres macro masquer = Activer_Afficher_que_le_planning et Afficher = Annuler_Afficher_que_le_planning ?

    Merci pour votre soutien
    Bonne soirée
    Philippe

  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 156
    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 156
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'exemple que j'ai publié avait pour but que tu comprennes le principe de combiner la propriété Hidden d'une colonne avec la propriété Value du contrôle ToggleButton
    Si tu as compris le principe, le reste doit être aisé à mettre en place mais personnellement je n'ai pas compris ce que tu cherches à obtenir exactement.
    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
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut
    Hello,

    Lorsque je clique sur le bouton, il doit lancer une macro qui masque plusieurs séries de colonnes et de lignes et fait plein d'autre chose, puis au nouveau clic je fais l'inverse.
    Je dois avoir ces 2 macros dans un modules séparés afin de pouvoir les appeler par d’autre macros.
    Je contrôle les actions et les affichages des boutons par l'état d'affichage de la colonne "J"
    En fait je n'arrive pas à comprendre votre code pour incorporer mes 2 macros.

    Merci
    Philippe

    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    L'exemple que j'ai publié avait pour but que tu comprennes le principe de combiner la propriété Hidden d'une colonne avec la propriété Value du contrôle ToggleButton
    Si tu as compris le principe, le reste doit être aisé à mettre en place mais personnellement je n'ai pas compris ce que tu cherches à obtenir exactement.

  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 156
    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 156
    Billets dans le blog
    53
    Par défaut
    Bonjour Philippe,
    En fait je n'arrive pas à comprendre votre code pour incorporer mes 2 macros
    Qu'est-ce que vous ne comprenez pas dans le code qe j'ai publié ?

    La propriété Hidden de Columns(3) prend la même valeur que la propriété Value du contrôle ToggleButton et cette valeur vaut soit True soit False.
    True vaut -1 et False 0 ce qui permet d'avoir le bon message dans la la propriété Caption de ToggleButton
    La fonction Abs permet d'éliminer le signe négatif ainsi Abs(-1) renvoie 1. Donc Caption a comme valeur soit Msg(0) soit Msg(1)

    Est-ce plus lair ?
    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
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour philippe

    pas mal du tout le principe pour msg()
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut
    Tout est plus clair et ça fonctionne à merveille, je vous en remercie.

    Mais dans mon cas, je pense que je ne peux pas l'utiliser, car lorsque je masque les colonnes, je dois également masquer des lignes et appliquer des filtres et inversement.

    Pensez-vous que ces actions peuvent être intégrée à votre macro ?

    Je vous ai mis le fichier en copie avec les 2 macros à intégrer qui sont dans le Module 1.


    Encore merci pour tout
    Meilleures salutations
    Philippe

    ToggleButton_Planning.xlsm

    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour Philippe,

    Qu'est-ce que vous ne comprenez pas dans le code qe j'ai publié ?

    La propriété Hidden de Columns(3) prend la même valeur que la propriété Value du contrôle ToggleButton et cette valeur vaut soit True soit False.
    True vaut -1 et False 0 ce qui permet d'avoir le bon message dans la la propriété Caption de ToggleButton
    La fonction Abs permet d'éliminer le signe négatif ainsi Abs(-1) renvoie 1. Donc Caption a comme valeur soit Msg(0) soit Msg(1)

    Est-ce plus lair ?

  9. #9
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut
    Merci Philippe pour toute ces précisions.

    Comment fermer automatiquement le UserForm, car le "unload me" beug

    A+ Philippe

  10. #10
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut
    Hello,

    Personne n'a de solution ?

    Bon week-end
    Meilleures salutations
    Philippe



    Citation Envoyé par goninph Voir le message
    Merci Philippe pour toute ces précisions.

    Comment fermer automatiquement le UserForm, car le "unload me" beug

    A+ Philippe

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour goninph
    Philippe t'a donner une solution très simple a comprendre et a mettre en place et dans ton code tu n'a absolument rien appliqué de tout cela
    tu continu avec tes if a la pelle

    comme tu n'a rien pris de Philippe
    je te le fait selon les instructions de philippe et j'inclus bien evidement les appels de tes deux subs

    et pour ton bouton unload faudrait il encore que le"unload me" soit dans le bon évènement du bon bouton il était dans commandbutton_click" ors ce bouton n'existe pas
    donc vire tout code !!!!!!!! de ton UserForm
    et colle ceci

    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
     
    Option Explicit
    Dim msg
    Dim couleur
    Dim subs
    Private Sub ToggleButton_Planning_Click()
        subs = Array("Annuler_Afficher_que_le_planning", "Activer_Afficher_que_le_planning")    'nom des subs a appeler
        With ToggleButton_Planning
            .Caption = msg(Abs(.Value))
            .BackColor = couleur(Abs(.Value))
            Sheets(1).Range("A:J").EntireColumn.Hidden = .Value
            Application.Run subs(Abs(.Value))    'on appelle la sub en fonction de l'etat du toggle
        End With
    End Sub
    '
    '
    Private Sub UserForm_Initialize()
        msg = Array("Afficher le planning", "Afficher le PV")
        couleur = Array(vbGreen, vbRed)
        ToggleButton_Planning.BackColor = couleur(Abs(Columns("J").Hidden))
        ToggleButton_Planning.Caption = msg(Abs(Columns("J").Hidden))
    End Sub
    '
    '
    Private Sub BT_OK_Click()
        Unload Me
    End Sub
    '
    '
    Private Sub Btn_Maj_meteo_Click()
    'mettre ton code ici pour ce bouton avec l'image
    End Sub
    c'est de suite plus simple d'un coup
    j'ai testé sur 2007
    ps :encore merci Philippe cette méthode me plait beaucoup
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut
    Bonjour Patrick,

    En fait j'avais oublié de supprimer le bonton OK car j'aimerai que le UserForm se ferme automatiquement.
    Avec votre macro j'ai pu ajouter le Unload me sans que la macro beug, mais lorsque la colonne "J" est masquée la macro ne démarre pas.

    Sans le Unload me et lorsque la colonne "J" est masquée il faut appuyer 2 fois sur le Toggle après une initialization de UserForm

    Merci
    Philippe



    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
    Option Explicit
    Dim msg
    Dim couleur
    Dim subs
    Private Sub ToggleButton_Planning_Click()
        subs = Array("Liaisons_Dossier_Onglet_Divers.Annuler_Afficher_que_le_planning", "Liaisons_Dossier_Onglet_Divers.Activer_Afficher_que_le_planning")    'nom des subs a appeler
        With ToggleButton_Planning
            .Caption = msg(Abs(.Value))
    '        .BackColor = couleur(Abs(.Value))
            Sheets(1).Range("A:J").EntireColumn.Hidden = .Value
            Application.Run subs(Abs(.Value))    'on appelle la sub en fonction de l'etat du toggle
        End With
        Unload Me
    End Sub
    '
    '
    Private Sub UserForm_Initialize()
        msg = Array("Afficher le planning", "Afficher le PV")
        couleur = Array(vbGreen, vbRed)
    '    ToggleButton_Planning.BackColor = couleur(Abs(Columns("J").Hidden))
        ToggleButton_Planning.Caption = msg(Abs(Columns("J").Hidden))
    End Sub

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

Discussions similaires

  1. [VBA-E] Problème avec ShowModal dans un UserForm
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/07/2006, 09h19
  2. [VBa-E] Object Ole "image bitmap" dans une Userform?
    Par gootsu dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/07/2006, 14h24
  3. Réponses: 8
    Dernier message: 11/06/2006, 12h23
  4. [VBA excel]graph dans un userform .._
    Par SpaceFrog dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 31/05/2006, 18h45
  5. [VBA-E]graphique excel dans un userform
    Par alex_95 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/03/2006, 09h03

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