glisser déposer un objets dans un userform (VBA)

  • Initiateur de la discussion Initiateur de la discussion A2H
  • Date de début Date de début

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 !

A

A2H

Guest
Bonsoir
Je veux savoir s'il est possible de créer un code VBA pour glisser déposer un objet (Text, image) dans un userform), comme la cas d'un puzzle
exemple j'ai 3 textes et 3 TextBox et je veux deplacer avec la souris le text1 dans le textBox 3 , le texte2 dans le textbox1 …
Merci d'avance
 
Mais non. Regarde comment est fait le module de classe LabelGlissable du Temp.xlsm joint poste #21 et fait à peu près pareil, mais en plus simple parce qu'il n'y a qu'une instruction à mettre dans la Property Set et ensuite tes deux Sub _BeforeDragOver et _BeforeDropOrPaste
Et s'il y a quelque chose que tu ne comprends pas au passage pose moi des questions.
 
À mon avis il n'y a pas de raison de nommer GroupLabel le contrôle central du module de classe. Beaucoup le font et c'est complètement absurde parce que cette propriété représente une seul Label propre à l'exemplaire de l'objet et pas un groupe de Label ou je ne sais quoi.
J'avais demandé à ce que l'UserForm_Initialize telle que je l'avais écrite fonctionne avec tes modules de classe.
Alors s'il te plait appelle la propriété Label Lab et dans l'autre la TextBox TBx, c'est tout.
Il n'est pas utile que les variables LabelGlissable et TextBoxCible soient globales dans l'UserForm: elles ne sont utilisées que dans l'UserForm_Initialize et elles peuvent donc y être des variables locales.
Le module de classe LabelGlissable tel que je l'avais écrit, avec glissement visible, ça aussi j'y tiens :
VB:
Option Explicit
Private WithEvents LabI As MSForms.Label, Left As Single, Top As Single, X0 As Single, Y0 As Single
Public Property Set Lab(ByVal Lab As MSForms.Label)
   Set LabI = Lab
   Left = LabI.Left: Top = LabI.Top
   End Property
Private Sub LabI_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   X0 = X: Y0 = Y
   End Sub
Private Sub LabI_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   If Button = 0 Then Exit Sub
   LabI.Left = LabI.Left + X - X0
   LabI.Top = LabI.Top + Y - Y0
End Sub
Private Sub LabI_Click()
   LabI.Left = Left: LabI.Top = Top
   With New MSForms.DataObject: .SetText LabI.Caption: .StartDrag: End With
   End Sub
 
Eh ben voilaaaaaa !
Bon je l'avais écrite comme ça parce que je ne vois pas l'utilité que la propriété TBx soit en lecture/écriture, mais ce n'est qu'un détail :
VB:
Option Explicit
Private WithEvents TBxI As MSForms.TextBox
Public Property Set TBx(ByVal TBx As MSForms.TextBox)
   Set TBxI = TBx
   End Property
Private Sub TBxi_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As Long, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
   Cancel = True: Effect = 1
   End Sub
Private Sub TBxI_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
   Cancel = True: Effect = 1
   TBxI.Text = Data.GetText
   End Sub
En tout cas ça marche comme tu l'as écrit 🙂
 
Re

Encore une fois, merci Dranreb. 😉

Au faite, si au lieu du texte on utilise la propriété BackColor comme dans l'exemple que j'ai montré au post #20(ici il inscrit le numéro de la couleur, si je ne dis pas de bétises), comment faudrait procéder?
 
Dernière édition:
Bonsoir Lone-wolf
Bonsoir Dranreb

juste une question
je ne comprends pas l'utilisation du
VB:
With New MSForms.DataObject:
Je comprends que cela a une relation avec les TextBox , mais je ne vois nulle part de référence a ces Trois TextBox.
Pourrais tu (Dranreb ou lone-wolf) m'expliquer l'utilisation de cette procédure .
Merci par avance
jean marie
 
@Lone-wolf Oui ben je traiterais la couleur en la transmettant en même temps que le texte derrière un séparateur peu usité, au .SetText, que je récupèrerais sûrement au Data.GetText et décomposerais en 2 parties avec la fonction Split pour le texte et la couleur.
@ChTi160 C'est qu'à vrai dire je ne sais toujours pas comment ça marche.
Je sais seulement que c'est la même chose en plus court que de déclarer une variable locale As MSForms.DataObject, faire un Set dessus et travailler avec set méthodes SetText et StartDrag. C'est cette dernière qui est importante, je crois, mais je ne sais ce qu'elle fait. Enfin les deux sont importantes sûrement mais la SetText je la connaissais déjà: Suivie d'un PutInClipboard elle copie le texte dans le presse papier.
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
2 K
Retour