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 :

Changement de couleur au passage de la souris


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 362
    Points : 70
    Points
    70
    Par défaut Changement de couleur au passage de la souris
    Bonjour à tous,

    Je viens avec un sujert abordé à maintes reprises sur votre forum.

    Le changement de couleur d'un bouton en l'occurence via l'utilisation de mousemove.

    J'ai parcouru vos solutions et n'ai pu de manière satisfaisante les appliquer.

    Dans un post il était question de créer deux procédures. L'une avec Mousemove et une autre appelée "détail_mousemove". Alors que je sais que Mousemove est un évenement geré par VBA, je n'ai pas bien compris comment utiliser Détail_Mousemove....


    Il fut aussi question d'api. Il me faut reconnaître que je ne connais rien au monde API. Il était question d'obtenir les coordonnées de la souris via getcursorpos ou quelque chose comme çà et d'interpréter les dites coordonnées....

    Bref en résumé je ne sais toujours pas comment au survol d'un bouton faire en sorte que la couleur de fonds change.

    Quelqu'un pourrait donc m'expliquer clairement comment faire en sorte que la couleur change au passage de la souris et que évidemment lorsque cette dernière quitte le bouton la couleur d'origine revienne ?

    PS désolé de ne pas avoir repris tels quels les messages écris dont je parle ci-dessus mais il est 7h du mat et viens de me lever. J'ai les yeux encore clos et pas le courage de les rechercher maintenant.

  2. #2
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Bonjour,
    si ton bouton de commande est dans un userform tu peux faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Const couleurorigine = &H8000000F
    Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Me.CommandButton1.BackColor = vbGreen
    End Sub
    Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Me.CommandButton1.BackColor = couleurorigine
    End Sub
    Le premier code permet le changement de couleur et fonctionne aussi sur une feuille du classeur avec un bouton activex.
    mais il ne permet pas de remettre la couleur d'origine lorsqu'on est sur une feuille.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 362
    Points : 70
    Points
    70
    Par défaut
    Ok pour le code et d'ailleurs c'était une des procédures vues lors de mes recherches.

    Le souci est que je ne travaille ni avec des boutons ActiveX, directement mis sur une feuille donc, ni avec un UserForm sur lequel j'aurais mis des contrôles type boutons de commandes.

    Mon application et en l'occurence les menus développés se subdivisent comme suit:

    Bouton ActiveX sur ligne 1
    form importé de Microsoft Form 2.0 Frames sur lequel je place des boutons via Objet Cadre -> Edit.

    Est-il donc possible de le faire sur les boutons d'un frame importé et sur un simple bouton ActiveX ?

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Dans un module de Classe nommé Classe1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public WithEvents Btn As MSForms.CommandButton
    Private Sub Btn_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
     
    With Btn
         .BackColor = IIf(X > 10 And X < .Width - 10 And Y > 10 And Y < .Height - 10, vbGreen, &H8000000F)
    End With
    End Sub
    Dans le module de la feuille
    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
    Dim Collect As New Collection
     
    Private Sub Frame1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim ctrl As Control
    Dim Bouton As Classe1
     
    If Collect.Count = 0 Then
         For Each ctrl In Frame1.Controls
              If TypeOf ctrl Is MSForms.CommandButton Then
                   Set Bouton = New Classe1
                   Set Bouton.Btn = ctrl
                   Collect.Add Bouton
              End If
         Next ctrl
    End If
    End Sub

  5. #5
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Bonjour, Mercatog
    bravo super

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 362
    Points : 70
    Points
    70
    Par défaut
    Coucou merci pour ton code mais cela ne marche pas.

    Il me dit que le Type défini par l'utilisateur non défini !!!!
    Ci-dessous je te mets le code que tu m'as donné modifié légèrement étant donné que mon bouton s'appelle BTNShowGraph (un parmi tant d'autres)


    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
    Public WithEvents BTNGMShowGraph As MSForms.CommandButton
    
    Private Sub BTNGMShowGraph_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
     
    With BTNGMShowGraph
         .BackColor = IIf(X > 10 And X < .Width - 10 And Y > 10 And Y < .Height - 10, vbGreen, &H8000000F)
    End With
    End Sub
    
     
    Private Sub FRM_Graph_Menu_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim ctrl As Control
    Dim Bouton As Classe1
    Dim Collect As New Collection 
    
    ' Ce Dim Collect As a New Collection vient avant la procédure ou est integré tel que je le montre ici ?
    
    If Collect.Count = 0 Then
         For Each ctrl In FRM_Graph_Menu.Controls
              If TypeOf ctrl Is MSForms.CommandButton Then
                   Set Bouton = New Classe1
                   Set Bouton.BTNGMShowGraph = ctrl
                   Collect.Add Bouton
              End If
         Next ctrl
    End If
    End Sub
    Pourrais-tu en français expliquer ton code de sorte que je fasse pas un bête copier coller. Je voudrais comprendre.

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Non,
    Btn est une variable abstraite, tu peux la nommer comme tu veux.

    Dans un module de Classe (Insertion> Module de classe)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public WithEvents Btn As MSForms.CommandButton
    Private Sub Btn_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
     
    With Btn
         .BackColor = IIf(X > 10 And X < .Width - 10 And Y > 10 And Y < .Height - 10, vbGreen, &H8000000F)
    End With
    End Sub
    Approximativement: on crée une variable abstraite de type msforms.commandbutton, à laquelle on associe sont évènement MouseMove
    Dans la module de ta feuille
    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
    Dim Collect As New Collection
     
    Private Sub Frame1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim ctrl As Control
    Dim Bouton As Classe1
     
    If Collect.Count = 0 Then
         For Each ctrl In Frame1.Controls
              If TypeOf ctrl Is MSForms.CommandButton Then
                   Set Bouton = New Classe1
                   Set Bouton.Btn = ctrl
                   Collect.Add Bouton
              End If
         Next ctrl
    End If
    End Sub
    la collection Collect est une variable global pour le module de la feuille. on y "insère" tous les CommandButtons de ta frame. Collect est bien déclarée dans le début et non à l'intérieur de la sub Frame1_MouseMove.

    Fonctionnement:
    Au premier déplacement du curseur sur la frame Frame1, on parcourt tous les contrôles et on remplit la collection Collect par les commandButton appartenant au frame1
    On crée une variable de type Classe1 (cf module de classe) à laquelle on affecte chaque bouton. De ce fait, le bouton réagit à la procédure événementielle MouseMove crée dans le module de Classe.

    Je ne sais pas si je suis arrivé à expliquer

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 362
    Points : 70
    Points
    70
    Par défaut
    Ok ca marche j'ai pu tout placer aux bons endroits. Ceci dit je fais ca sans tout comprendre.

    Les modules de classes pour autant que je sache intervienne lorsque l'on veut créer de nouveaux objets c'est çà ? Avec leurs propres propriétés et méthodes...

    Dernière question et cela sans vouloir abuser. Je remarque que lorsque je ferme mon application et la réouvre dans le menu testé l'un des boutons est vert d'entrée de jeu. C'est lorsque je repasserai sur lui qu'il régira comme les autres. Quant aux autres ils deviennent vert et puis à nouveau bleu en fonction de la présence de la souris ou non.

    Est-ce moi ou d'autres penses que cette histoire de menus déroulants à laquelle je me suis attaqué est très complexe ?

    Je suis débutant en VBA et sincèrement j'ai le sentiment d'avoir appris beaucoup mais aussi d'avoir touché un domaine très complexe:

    Public WithEvents Btn As MSForms.CommandButton
    Microsoft Form 2.0 Frames

    Obligatoire pour rendre les boutons d'un frame hors userform cliquables;

    Module de classe
    tout aussi obligatoire ou nécéssaire à tout le moins pour le changement de couleurs;

    Il y a deux semaine je ne connaissais rien de tout çà.

    Un grand merci à vous mais ma tête va exploser.

Discussions similaires

  1. Changement de couleur au passage de la souris
    Par librepierre dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/02/2009, 15h32
  2. Changement de style au passage de la souris
    Par kimcharlene dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 26/04/2007, 12h25
  3. Changement d'image au passage de la souris
    Par dessinateurttuyen dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 18/07/2006, 13h05

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