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

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

Bonjour
et bien oui de la même façon que tu les changes
si tu peux modifier tu peux effacer
d'ailleurs le 3eme label le fait puisqu'il n'y a rien dans la cellule de dessus
Oui j'ai bien vu mais si je passe la souris sur une zone sans label les données en colonne U restent avec les infos du dernier label survolé.

Je n'arrive pas à voir où modifier le code pour ce cas de figure
 
re
il n'y a pas d'event mouse mouve pour la feuille ca n'existe pas
il te faut mettre un grand label le 3 par exemple plus grand que tout les autres reunis
et le mettre en arrière plan
sinon il va te falloir jouer avec une procedure de surveillence rapide (api timer) donc usine a gaz et fragile et non stable
je t'accompagnerais pas sur se terrain
patrick
 
- 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
428
Réponses
12
Affichages
1 K
Réponses
6
Affichages
689
Retour