XL 2021 Commentaire au survol d'un checkbox d'un userform

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 !

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour à tous,

Comme le titre le dit, je cherche à mettre un commentaire ou note au survol d'un checkbox d'un userform,
je sais que ça se fait et qui en a qui savent faire, mais plus moyen de trouver.

Merci d'avance à tous
 
Solution
Bonjour tous le monde,
J'ai trouvé ma solution je pense

Dans un module

VB:
Public Const MyString1 = "Les 1"
Public Const MyString2 = "Les 2"
Public Const MyString3 = "Les 3"
Public Const MyString4 = "Les 4"

Et dans le userform

Code:
Private Sub CheckBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    commentary CheckBox1, vbCrLf & MyString1
End Sub

Private Sub CheckBox2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    commentary CheckBox2, vbCrLf & MyString2
End Sub

Private Sub CheckBox3_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    commentary CheckBox3, vbCrLf & MyString3...
petit correctif dans la fonction
VB:
 If mode = 0 Then
            EmplacementControl = Array(Lft / PPx, Ltop / PPx, (Lft + Obj.Width) / PPx, (Ltop + Obj.Height) / PPx)
        Else
            EmplacementControl = Array(Lft - Me.Left, Ltop - Me.top - (P.Height - P.InsideHeight), (Lft - P.Left) + Obj.Width, (Ltop - P.top - (P.Height - P.InsideHeight)) + Obj.Height)
        End If
 
VB:
Sub InfoBulle(check As Object, msg)
    Dim A, Tim#, Criter, B
    A = EmplacementControl(check)
    B = EmplacementControl(check, 1)
    Dim pos    As pointapi
Debug.Print "verif"
    With commentaire
        If Not .Visible Then
            .Visible = True
            .ZOrder 0
            End If
          .Controls("message").Caption = UCase(check.Name) & vbCrLf & msg
      .Move B(0) + check.Width, B(1) - .Height
        If .top < 0 Then .top = check.top + check.Height
        If .Left > Me.InsideWidth - .Width Then .Left = check.Left - .Width
    End With
    Tim = timer
    Do While timer - Tim < 0.05: GetCursorPos pos: DoEvents
        Criter = (pos.X > A(0) And pos.X < A(2)) And pos.Y > A(1) And pos.Y < A(3)
        If Not Criter Then
Debug.Print "on est sorti du control du périmètre du control"
            commentaire.Visible = False
            Exit Do
        End If
    Loop
    'Debug.Print "fin de sub infobulle"
End Sub
demo.gif
 
@patricktoulon ,
L'espace pile est insuffisant dans ta dernière version ... ( mais il faut vraiment faire pas mal de va et viens entre les 2 contrôles), de plus le scintillement est parfois très visible ( flip-flop entre les 2 contrôles ?)
1715447924607.png


Dans la version de @Dudu2, pas de problème d'espace pile et pas de scintillement non plus .

Je vais arrêter de tester les versions, car j'ai peur qu'on phagocyte quelque peu le post de Nicos 😉
 
Ah oui, au fait, @Nicos, depuis une semaine qu'on squatte ton sujet, comment vas-tu ? Regarde la pièce jointe 1196596
Et finalement, tu as gardé la solution avec les "sur-Controls" à débordement je suppose... ?

Bonjour Dudu2, ça va merci, comme je disais à l'instant, je suis le fil, j'en suis resté à ma version modifiée que Patrick avais proposé au début, mais j'attends 😉 😉 😉
 
j'apprecie vraiment
je fait le job
@Dudu2 change le doWhile/loop timer pour un dowhile true et et on dit "sa version" après on dit "j’attends du concret "
j’apprécie vraiment les gars
rendez a césar ce qui est à césar SVP
je rappelle que le travail de @Dudu2 c'est celui ci

ce qui n'a rien à voir avec ma méthode

je prépare une ressource avec cette méthode et je suis en train de corriger ce problème de mémoire insuffisante

pour info le même code avec le commentaire (un control label) et la version avec le label dans une frame ca change tout le comportement du procc (je n'ai pas d'explication pour le moment)
mais j'y travaille
 
et oui mais moi je suis en 32 bit et les boucles éternelles en 32 font monter le procc
Tu parles de boucle Do While True avec un DoEvents ?
Dans ta version modifiée j'ai fait une telle boucle avec seulement un DoEvents pour laisser passer les clics et autres évènements, mais dans la version que tu cites dans ton Post ci-dessus, j'ai aussi inséré un Sleep(200) avec le Doevents pour calmer la CPU. 200 ms, ça ne change rien à la fonctionnalité et ça limite considérablement la CPU.
 
- 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
Microsoft 365 Formulaire
Réponses
2
Affichages
43
Réponses
90
Affichages
5 K
Retour