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

Nicolas JACQUIN

XLDnaute Occasionnel
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...

patricktoulon

XLDnaute Barbatruc
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
 

fanch55

XLDnaute Barbatruc
Je n'ai plus de pb de pile mais le survol de checkbox2 vers commandbutton n'affiche pas le bon message ...
pat.gif
 

patricktoulon

XLDnaute Barbatruc
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
 

Dudu2

XLDnaute Barbatruc
Je comprends toujours pas pourquoi tu t'emm...bêtes avec ces timers inutiles. C'est que des ennuis !
 

Pièces jointes

  • commentaire infobule pour control dans userform.xlsm
    31 KB · Affichages: 4
Dernière édition:

fanch55

XLDnaute Barbatruc
@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 ;)
 

Nicolas JACQUIN

XLDnaute Occasionnel
Supporter XLD
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 ;) ;) ;)
 

patricktoulon

XLDnaute Barbatruc
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
 

Dudu2

XLDnaute Barbatruc
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.
 

Discussions similaires

Statistiques des forums

Discussions
312 555
Messages
2 089 547
Membres
104 208
dernier inscrit
laura29180