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 colore les sélections


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Magasinnière
    Inscrit en
    Novembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Magasinnière
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2017
    Messages : 8
    Par défaut Togglebutton colore les sélections
    Bonjour,

    Je cherche à créer un planning pour mon service. Il calcule les rotations de chaque agent du service pour chaque mois selon les sélections mise dans le userform de saisie. Jusque là je m'en sortait ^^,
    Mais je bute sur une commande probablement très bête avec des ToggleButton. Mon but est que lorsque l'utilisateur clique sur un ToggleButton dans le userform "Saisie exceptions et congés", le pinceau (ou souris) applique une certaine mise en forme sur une sélection d'une ou plusieurs cellules sur la feuille excel.

    Par exemple :
    l'utilisateur clique sur le toggleButton"matin 1ère semaine" dans le userform1.
    Le fond des cellules qu'il sélectionne ensuite sur la feuille excel devraient se colorer en vert.
    Nom : feuille excel.png
Affichages : 2012
Taille : 314,3 Ko

    J'ai essayé avec ceci, mais rien ne se passe :
    (Les togglebutton sont déclarer en temps que "Boolean" en "Public" du début de macro)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public MATButton1 As Boolean, MATButton2 As Boolean, AMButton1 As Boolean, AMButton2 As Boolean, NUButton As Boolean, WEButton As Boolean, JOButton As Boolean, PRButton As Boolean, CPButton As Boolean, RTTButton As Boolean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub clic_togglebutton()
     
    With MATButton1 'matin 1
        If .Value = True Then 'action quand bouton activé
            While MATButton1 = True
                Selection.Interior.ColorIndex = 43 'colore l'interieur des cases sélectionnées en vert
            Wend
        ElseIf .Value = False Then 'action quand bouton désactivé
            'rien
        End If
    End With
     
    End Sub

  2. #2
    Expert éminent 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
    Par défaut
    Il y a tellement de trucs anormaux dans ton code que je ne sais pas par où commencer.
    On va donc le faire chronologiquement :

    Pourquoi se compliquer à faire un With alors que tu n'utilises cette variable que deux fois (en fait, tu n'en as besoin que d'une fois, voir la suite).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If .Value = True Then 'action quand bouton activé
    Il ne sert à rien de mettre = True puisque en fait le If test si la condition est True.
    C'est un peu comme demander la couleur du cheval blanc d'Henry IV.
    Il suffit d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            While MATButton1 = True
                Selection.Interior.ColorIndex = 43 'colore l'interieur des cases sélectionnées en vert
            Wend
    Un bis pour le = True (idem que pour le If).

    Déjà, je ne comprends pas pourquoi tu veux faire une boucle.

    Tu fais une boucle avec un condition sur une variable qui n'est pas modifiée dans la boucle.
    Donc, soit l'exécution ne rentrera jamais dans la boucle, soit, si elle rentre, elle tournera à l'infini (puisque le contenu ne change pas la condition).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ElseIf .Value = False Then 'action quand bouton désactivé
            'rien
    On en remet un coup sur le = False qui n'est pas utile. Là, il suffit de mettre un Not devant la valeur booléenne.

    Le Else n'est pas utile puisque tu ne fait "rien" si la condition désignée dans le If n'est pas remplie.

    A Forciori, un ElseIf est encore moins utile.

    Et en plus, c'est un ElseIf pour la condition contraire du If, ce qui correspond à un simple Else.

    Je n'ai pas tout compris sur ta méthode utilisée pour obtenir ce que tu souhaites (en particulier la façon de renseigner MATButton1), mais ce code pourrait se résumer à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub clic_togglebutton()
       If MATButton1.Value Then Selection.Interior.ColorIndex = 43
    End Sub

  3. #3
    Membre du Club
    Femme Profil pro
    Magasinnière
    Inscrit en
    Novembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Magasinnière
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2017
    Messages : 8
    Par défaut
    Merci pour votre réponse Menhir.

    C'est la première fois que j'utilise un toggleButton donc j'avoue avoir tourné le truc un peu trop dans tous les sens (ce qui donne un résultat effrayant :o)
    Je comprends tes explications et j'avais démarré sur un système similaire mais les cellules que je sélectionne sur la feuilles excel ne changent pas de couleur quand mon bouton est actif. (J'avais mis un système de boucle car j'avais eu espoir que l'action du togglebutton ne se faisait qu'au moment où l'utilisateur cliquait sur le bouton, mais ça n'a rien donné n'ont plus.)

    En résumé, même une action simple comme...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If MATButton1.Value Then Selection.Interior.ColorIndex = 43
    ...ou encore...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If MATButton1.Value Then Cells(1, 1).Select
    ...ne veut pas fonctionner. Je clique sur le toggleButton mais rien ne se passe.

    Le fait que mon togglebutton soit dans un userform_non_modal et non sur la feuille excel peut-il rendre la macro inefficace ?

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    C'est la première fois que j'utilise un toggleButton donc j'avoue avoir tourné le truc un peu trop dans tous les sens
    Et c'est également lka première fois que tu insères puis utilises un contrôle sur un userform, peut-être ?

    On n'invente pas les procédures évènementielles (qui se déclenchent lors d'évènements subis par un contrôle). La déclaration de ces procédures est prédéfinie (ainsi que le sont ses paramètres éventuels)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub clic_togglebutton()
    n'est pas une procédure évènementielle d'un contrôle togglebutton !
    Là, vraiment ....

  5. #5
    Membre du Club
    Femme Profil pro
    Magasinnière
    Inscrit en
    Novembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Magasinnière
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2017
    Messages : 8
    Par défaut
    Citation Envoyé par unparia Voir le message
    Et c'est également lka première fois que tu insères puis utilises un contrôle sur un userform, peut-être ?
    Oui. Je ne suis pas du tout issu du milieu informatique et ce projet est mon premier avec des userform. Grace au net, j'ai pu comprendre comment en créer et utiliser des ComBox dedans. Comme je disais jusque là je m'en sortais à tâtons mais concernant le togglebutton je ne saisis pas la subtilité et malgré plusieurs essais je n'arrive vraiment à rien quand j'active et désactive ce togglebutton. Désolé si mes questions vous frustre

    Citation Envoyé par unparia Voir le message
    n'est pas une procédure évènementielle d'un contrôle togglebutton !
    Là, vraiment ....
    Puisque que mon idée de départ semble complètement fausse, comment dois-je m'y prendre pour qu'une fois le togglebutton actif, les sélections sur la feuille excel se colorent ?
    J'ai joins mon fichier si cela peut rendre mon problème plus clair.
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent 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
    Par défaut
    Citation Envoyé par Vélina Voir le message
    En résumé, même une action simple ne veut pas fonctionner. Je clique sur le toggleButton mais rien ne se passe.
    Il faut faire un travail de débugage rigoureux pour localiser le problème.

    Avec ce code, tu pourras déjà vérifier si le problème vient du déclenchement de la macro ou du test qu'elle contient.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub clic_togglebutton()
       Debug.Print "Déclenchement Ok ";Now()
       If MATButton1.Value Then Debug.Print "Test Ok ";Now()
    End Sub
    N'oublie pas d'ouvrir ta fenêtre d'exécution pour avoir les résultats des Debug.Print.

  7. #7
    Membre du Club
    Femme Profil pro
    Magasinnière
    Inscrit en
    Novembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Magasinnière
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2017
    Messages : 8
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Il faut faire un travail de débugage rigoureux pour localiser le problème.
    Merci de votre réponse

    J'ai tester avec votre macro et il semblerait que se soit le déclenchement de la macro qui pose problème. J'ai l'erreur "Qualificateur incorrect" qui me surligne le nom de mon togglebutton "MATButton1".
    Nom : togglebutton.jpg
Affichages : 1452
Taille : 75,7 Ko

    J'ai vérifié de ne pas avoir fait d'erreur de saisie en copiant le nom du bouton dans le userform, puis en le collant dans la macro mais cela n'a rien changé.
    J'ai ensuite essayé de cacher la déclaration de variable...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     'Public MATButton1 As Boolean, MATButton2 As Boolean, AMButton1 As Boolean, AMButton2 As Boolean, NUButton As Boolean, WEButton As Boolean, JOButton As Boolean, PRButton As Boolean, CPButton As Boolean, RTTButton As Boolean, ATButton As Boolean
    ...mais là l'erreur à changer. J'ai eu alors l'erreur '424' objet requis.

  8. #8
    Membre du Club
    Femme Profil pro
    Magasinnière
    Inscrit en
    Novembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Magasinnière
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2017
    Messages : 8
    Par défaut
    Menhir,

    avec vos explications j'ai réussis à faire fonctionner mon togglebutton. Je n'avais pas saisis tout simplement que le code du togglebutton devait aller dans le code du userform et non dans un module, et que je ne pouvais faire une macro d'ensemble dans ce userform pour tous les togglebutton. Chacun doivent avoir leur propre macro dans le userform.

    Mon problème porte finalement sur le but premier de mon togglebutton. Avec le code ci-dessous inscrit dans le code du userform, je n'arrive qu'à colorer les cellules présélectionnées quand j'active le bouton et non toutes les cellules que je sélectionne après avoir activé le bouton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub MATButton1_Click()
     
    If MATButton1.Value = True Then
        MATButton1.BackColor = &HFF00& 'Vert
        Selection.Interior.ColorIndex = 43
        Else
        MATButton1.BackColor = &HE0E0E0 'gris
    End If
     
    End Sub

  9. #9
    Expert éminent 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
    Par défaut
    Citation Envoyé par Vélina Voir le message
    J'ai tester avec votre macro et il semblerait que se soit le déclenchement de la macro qui pose problème. J'ai l'erreur "Qualificateur incorrect" qui me surligne le nom de mon togglebutton "MATButton1".
    Euh... visiblement, c'est le contraire : ta macro se déclenche bien mais c'est le test qui pose problème (d'après ce que tu montres).

    J'ai vérifié de ne pas avoir fait d'erreur de saisie en copiant le nom du bouton dans le userform, puis en le collant dans la macro mais cela n'a rien changé.
    ...mais là l'erreur à changer. J'ai eu alors l'erreur '424' objet requis.
    Je ne comprends pas ton système.
    MATButton1 c'est quoi ? Ta déclaration Public semble laisser penser que c'est une variable booléenne mais l'usage que tu en fais dans le If ressemble à une variable objet dans laquelle tu aurais mis la référence du bouton et j'ai en plus l'impression d'après ton dernier message que c'est aussi le nom du bouton lui-même.
    Tu ne serais pas en train de tout mélanger ?...

    Citation Envoyé par Vélina Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If MATButton1.Value = True Then
    Surtout ne perdons pas les mauvaises habitudes...

    je n'arrive qu'à colorer les cellules présélectionnées quand j'active le bouton et non toutes les cellules que je sélectionne après avoir activé le bouton.
    Ta macro n'est pas activée, elle est déclenchée.
    C'est-à-dire qu'au moment où tu appuies sur le bouton, elle réalise les actions de son code, avec les données dont elle dispose à cet instant (cellules sélectionnées) puis elle s'arrête.
    Elle ne reste pas active en boucle à attendre d'autres sélections.

Discussions similaires

  1. Colorer les Scrollbars
    Par 306vh dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 21/03/2007, 10h24
  2. Réponses: 1
    Dernier message: 12/07/2006, 09h51
  3. [VBA-E] Colorer les lignes sous-total
    Par steps5ive dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/07/2006, 18h47
  4. Réponses: 29
    Dernier message: 03/11/2005, 10h37
  5. colorer les scrollbars
    Par reg11 dans le forum Composants VCL
    Réponses: 19
    Dernier message: 06/06/2005, 20h42

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