Bonjour,
Peut-on autoriser un click gauche et droit de la souris dans une TextBox pour sélectionner et copier son contenu.
Par quel moyen ?
Par avance merci
Bien cordialement,
Bonjour,
Peut-on autoriser un click gauche et droit de la souris dans une TextBox pour sélectionner et copier son contenu.
Par quel moyen ?
Par avance merci
Bien cordialement,
Bonjour,
Comment celà, un "clic gauche et droit" ?
Les deux ensemble ?
Et qu'entends-tu par "autoriser" ?
Un click gauche (traditionnel) se constate si la propriété enabled = True par le déclenchement de l'évènement Click
Un click est par ailleurs un MouseDown suivi d'un MouseUp
L'évènement MouseUp permet de différencier le bouton de la souris.
Te reste plus qu'à utiliser tout celà (c'est facile...)
Bonsoir ucfoutu,
Et bien voilà:
Je me suis peut-être mal expliqué !
Tu viens de me répondre, et, si je veux avec ma souris:
je peux bien à l'aide du click gauche surligné ton message et à l'aide du bouton droit copier le texte et éventuellement le recoller ailleurs.
Dans un TextBox on ne peut pas .
d'ou ma question; comment faire ?
Merci
En t'intéressant à Selstart et à SelLength (dans ton aide en ligne, sur TA machine)
Lis celà, essaye... et reviens en nous exposant ce que tu n'aurais pas pu réaliser après cette lecture...
Re bonjour,
Et bien non, je n'y arrive pas.
Je suis désolé, j'ai réussi à fabriquer ce bout de code...Mais ma textbox n'accepte toujours pas le click droit pour copier.
Merci pour votre aide .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Dim MyData As DataObject Private Sub TextBox3_ClickRight(ByVal Cancel As MSForms.ReturnBoolean) Dim MyData As DataObject Set MyData = New DataObject MyData.GetFromClipboard TextBox3.SelStart = 0 TextBox3.SelLength = 0 End Sub
Bonsoir
Pour moi, il faut y aller par étapes.
1. Créer un menu contextuel avec les boutons souhaités via une procédure dans un module standard
2. Créer les procédures pour copier et coller, toujours dans un module standard
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Sub CreerContextuel() Dim Barre As CommandBar Dim Controle As CommandBarControl Set Barre = CommandBars.Add(Name:="Contexte", Position:=msoBarPopup, temporary:=True) Set Controle = Barre.Controls.Add With Controle .Caption = "Copier" .OnAction = "mnCopier" End With Set Controle = Barre.Controls.Add With Controle .Caption = "Coller" .OnAction = "mnColler" End With Set Controle = Nothing Set Barre = Nothing End Sub
3. Il faut placer dans les évènements MouseUp des contrôles souhaités la procédure suivante. Dans le code que je donne, j'ai deux zones de texte et je place la même procédure pour chaque zone de texte. Cette procédure appelle simplement le menu contextuel créé au point 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Sub mnCopier() Dim Donnee As New DataObject Donnee.SetText UserForm1.ActiveControl.Value Donnee.PutInClipboard End Sub Sub mnColler() Dim Donnee As New DataObject Donnee.GetFromClipboard UserForm1.ActiveControl.Value = Donnee.GetText End Sub
Attention! Le code de l'étape 2 copie TOUT le contenu du textbox. Il faudra jouer avec SelStart, SelLength pour ne copier (ou remplacer) que la partie sélectionnée du texte...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Select Case Button Case XlMouseButton.xlSecondaryButton CommandBars("Contexte").ShowPopup End Select End Sub Private Sub TextBox2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Select Case Button Case XlMouseButton.xlSecondaryButton CommandBars("Contexte").ShowPopup End Select End Sub
A toi d'adapter et d'améliorer au besoin. Ceci n'est qu'une piste.
Ok?
Bonsoir,
Bon, malgrès toutes ces explications je pensais avoir compris !!!
Voir le fichier ci-joint .
Ais-je bien compris ?
3 modules (CreerContexte, copier et coller)
Puis la macro TextBox2.
Et bien le click droit fait resortir un défault :
Merci pour ton aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part CommandBars("Contexte").ShowPopup
Bien cordialement
Bonjour tlm,
Une solution éventuelle :
Un seul clic droit dans le TextBox sélectionne tout le texte et l'envoit dans le presse papier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) SendKeys "^A" SendKeys "^C" End Sub
Bonsoir à tous,
Bon, malgrès tous ces codes et bien je n'ai pas réussi.
Malgrès l'aide d'Excel je n'y arrive pas.
Apparemment il doit être impossible d'effectuer un click droit et d'avoir un message permettant de copier l'élément choisi.
Bien cordialement à vous .
Bonsoir,
Je crois que BRUNO71 n'est pas encore assez "avancé" pour bien comprendre ce qui lui a été dit.
Fring : je vais éviter l'utilisation du SendKeys (je ne l'aime pas et il ne permet pas de bien contrôler ce que l'on fait).
Le code de Pierre Fauconnier me parait bien mieux, mais fait encore peur à BRUNO
@ BRUNO71 ===>> Bon... nous allons utiliser la méthode de Pierre Fauconnier, mais en l'adaptant pour te la rendre compréhensible.
Tu vas essayer ce qui suit, analyser, puis, pas à pas (quand tu auras mieux compris), tenter de mettre en place la méthode complète proposée par Pierre Fauconnier (elle est plus élégante)...
Pour l'instant :
Tu vas créer une petite appli avec un userForm sur lequel tu vas mettre une textbox TextBox1 et une listbox Listbox1 et ce code :
Lance, écris ce que tu veux dans la textbox, puis sélectionnes'en un bout de ton choix à l'aide du bouton gauche (maintenu enfoncé) de la souris
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Private Sub UserForm_Initialize() With ListBox1 .AddItem "copier" .AddItem "annuler" .Visible = False .Move TextBox1.Left, TextBox1.Top + _ TextBox1.Height, TextBox1.Width, 26 End With End Sub Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If TextBox1.SelText <> "" Then ListBox1.Visible = True ListBox1.ZOrder End If End Sub Private Sub ListBox1_Click() If ListBox1.Selected(0) = True Then Dim toto As DataObject Set toto = New DataObject toto.SetText TextBox1.SelText toto.PutInClipboard End If ListBox1.Visible = False TextBox1.SetFocus End Sub
Tu verras apparaître ta listbox avec 2 choix (copier ou annuler) clique sur copier.
Va ensuite dans ta feuille et fais un coller dans une cellule, par exemple ... tu vas voir.
Bonne chance
Bonsoir,
Si ton code fonctionne
Mais je pensais qu'on pouvais avoir le style de message, voir le document word ci joint.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) SendKeys "^A" SendKeys "^C" End Sub
Tanpis, ton code est très très bien.
Je ne connais pas assez VBA, j'apprend seul donc voilà.
Je suis très content d'avoir accès au forum de développez.com, c'est vraiment bien.
J'espère acquérir beaucoup de connaisance.
Bien cordialement
Bonjour,
Houaa, ça décoiffe !
Fabuleux, quand j'en serais là !!!
Merci à vous, alors je viens de vérifier le code de Pierre et j'ai bien une petite liste déroulante avec copier coller...parfait! mais, ça ne colle pas l'élément choisi ? Bon ce n'est pas grave.
Merci ucfoutu, super...
Comment faites vous pour en arriver là ?
Peut -être est-ce votre job ??
J'ai pourtant des bouquins, surtout Excel 2003 programmation VBA de chez EYROLLES, il est super.
Mais seul, ces quand même dur.
Merci beaucoup
Bien cordialement
Bonjour à tous,
Je débarque plus de 10 ans après la clôture de ce post, mais je viens de tomber dessus et il répond à ce que je recherche.
Malheureusement je tombe sur un os à la ligne :Puisque visiblement la propriété .Value n'existe pas pour ActiveControl (Erreur d'exécution '438')
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Sub mnCopier() Dim Donnee As New DataObject Donnee.SetText UserForm1.ActiveControl.Value
Peut-être une nouveauté survenue avec les nouvelles versions d'Excel ? (Excel 2013 dans mon cas) En effet certains Control ne possède pas de propriété .Value.
Quelqu'un aurait-il une idée pour contourner ce soucis, tout en permettant d'utiliser la procédure de Pierre Fauconnier sur différents ComboBox sans avoir à les désigner ?
Merci par avance.
PE
Bonjour
La fonction typename retourne le type de ce qui lui est passé en paramètre
Ainsi
msgbox typename(totoi) retournera Textbox si toto est le nom d'une textbox
Il te faut donc jouer avec l'instruction selectcase, genre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 select case typename(le_contrôle_concerné) case"texttbox", "combobox" titi = le_contrôle_concerné.value case "..." titi = .... end select donnee.settext = titi
Bonjour Unparia,
Merci pour la réponse !!
Grâce au à la fonction Typename j'ai pu découvrir qu'en fait lorsque je clique sur mon ComboBox, l'ActiveControl n'est pas mon ComboBox mais le Frame dans lequel est positionné le ComboBox, c'est complètement inattendu !
Une idée de la parade pour permettre à mon ComboBox d'être l'ActiveControl lorsque je clique dessus ?
PE
Pas personnellement dans un tel cas.Une idée de la parade pour permettre à mon ComboBox d'être l'ActiveControl lorsque je clique dessus ?
Mais j'ai par contre une autre idée --->> ouvre ta propre discussion à ce sujet (qui n'a rien à voir avec le propos initial de la présente discussion) si tu veux avoir plus de chance d'obtenir des réponses.
EDIT : Bon-->> après réflexion --->> acrobatie plutôt scabreuse (et que je n'aime pas) --->>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 If TypeName(ActiveControl) = "Frame" Then Dim toto As MSForms.Frame Set toto = ActiveControl MsgBox TypeName(toto.ActiveControl) End If
Effectivement c'est une curieuse acrobatie, et qui fonctionne, bien que je ne comprenne pas vraiment pourquoi et comment... on fait un .ActiveControl.ActiveControl, c'est étrange !
Sans compter qu'ensuite j'ai un MutliPage qui contient le TextBox pour le collage de mon texte, donc ça devient tordu, mais j'ai réussi à dépatouiller quelque chose... ça me donne ceci (pour la création du menu contextuel :Mais voilà que j'ai un nouveau problème : lorsque je colle le contenu de mon presse papier, le résultat est deux carrés : (qui contiennent des points d'interrogation si je colle le presse-papiers dans une cellule excel).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 Sub CréerContextuel() Dim Barre As CommandBar Dim Controle As CommandBarControl Set Barre = CommandBars.Add(Name:="Contexte", position:=msoBarPopup, temporary:=True) Set Controle = Barre.Controls.Add With Controle .Caption = "Copier" .OnAction = "mnCopier" End With Set Controle = Barre.Controls.Add With Controle .Caption = "Coller" .OnAction = "mnColler" End With Set Controle = Nothing Set Barre = Nothing End Sub Sub mnCopier() Dim Donnée As New DataObject Dim res As String Select Case TypeName(ActiveUserform.ActiveControl) Case "TextBox", "ComboBox" res = ActiveUserform.ActiveControl.Value Case "Frame" Dim ObjFrame As MSForms.Frame Set ObjFrame = ActiveUserform.ActiveControl 'MsgBox TypeName(ObjFrame.ActiveControl) & " : " & ObjFrame.ActiveControl.name res = ObjFrame.ActiveControl.Value End Select Donnée.SetText res Donnée.PutInClipboard End Sub Sub mnColler() Dim Donnée As New DataObject Donnée.GetFromClipboard Select Case TypeName(ActiveUserform.ActiveControl) Case "TextBox", "ComboBox" ActiveUserform.ActiveControl.Value = Donnée.GetText Case "MultiPage" Dim ObjMultiPage As MSForms.MultiPage Set ObjMultiPage = ActiveUserform.ActiveControl If TypeName(ObjMultiPage.SelectedItem.ActiveControl) = "Frame" Then Dim ObjFrame As MSForms.Frame Set ObjFrame = ObjMultiPage.SelectedItem.ActiveControl ObjFrame.ActiveControl.Value = Donnée.GetText End If End Select End Sub
Je vais ouvrir un nouveau poste comme tu me l'as conseillé
PE
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager