Microsoft 365 VBA - Survol d'un Label déclenchement action

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

patricko-13

XLDnaute Nouveau
Bonjour à vous,

Sur une feuille excel j'ai crée deux labels.

Lorsque l'on passe la souris sur un de ces labels, cela vient inscrire des données dans les cellules U7:U8

Pour se faire j'ai un code dans un module de classe:

VB:
Public WithEvents GroupeLabel As MSForms.Label

Private Sub GroupeLabel_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    
   Static DernierLabel As String
  
   If GroupeLabel.Name = DernierLabel Then
   Exit Sub
  
   Else
    
    Dim NomCellule As String
  
    Set c = Worksheets("TCTC").Range("w7:w15").Find(What:=Cells(8, GroupeLabel.TopLeftCell.Column).Value)

    Cells(7, 21).Value = Cells(c.Row, 24).Value
    Cells(8, 21).Value = Cells(c.Row, 25).Value

    End If
End Sub

Le code fonctionne, j'ai bien les données qui se mettent à jour lorsque je bouge la souris et que je change de label; cependant je pense que dès que je déplace la souris sur le label il execute le vba constamment ce qui fait apparaitre un logo de chargement au dessus du curseur de la souris.

Est ce que vous auriez une piste pour que le code ne tourne pas en boucle à chaque mouvement de souris si je suis dans le même label ?

Enfin, s'il est possible, est ce que l'on peut enlever les données des cellules U7:U8 si la souris n'est sur aucun label ?

Je vous remercie pour votre aide et vous joint un fichier exemple.

Cordialement,

Patrick
 

Pièces jointes

Bonjour.
Avec un MouseDown au lieu d'un MouseMove, non ?
Un MouseUp permettrait alors d'effacer les cellules U7:U8
J'aurais de quoi habiller les Label d'images de boutons, lesquels pourraient se traiter dans le module de la feuille.
 
bonsoir
c'est normal que ton test "Dernier label" ne fonctionne pas
tu confond module classe et instance de module classe
dans ton workbook open tu ouvre deux instance de classe
dans chaque instance tu teste
VB:
Private Sub GroupeLabel_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    
    
   Static DernierLabel As String
  
   If GroupeLabel.Name = DernierLabel Then
   Exit Sub
mais ce test ce fait dans chaque instance avec le label classé attaché a l'instance de classe
du coup dans tes deux instances de classe tu teste toujours le même (celui qui est attaché )


tu a deux solutions
soit une variable publique dans un module ou dans le thisworkbook pour memoriser le control soit une instance de classe (une 3eme )

a noter que cette forme d'ecriture de code classe est un peu viellotte
ca me fait penser aux bon vieux tutos dans les années 2000

ci joint l'exemple avec la variable dans le thisworkbook
tu n'a plus le repeat event si tu bouge 36 fois dans le label
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
415
Réponses
12
Affichages
1 K
Réponses
6
Affichages
669
Retour