Bonjour à tous,
J'ai un soucis d'utilisation du presse-papier en VBA.
L'idée est de double-cliquer sur une label d'une USF pour en copier le contenu dans le presse papier afin de l'utiliser dans une autre application.
J'ai utilisé la solution de @Pierrot93 que j'ai adapté pour mon cas de figure. De plus j'ai bien la référence Microsoft Forms 2.0 Object Library d'activée.
j'utilise W11 et Excel 2021
VB:
Sub Label_E_Mail_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim x As New DataObject, machaine As String
machaine = Label_E_Mail.Caption
x.SetText machaine
x.PutInClipboard
MsgBox "Adresse e-mail " & machaine & " copiée dans le presse-papier", vbOKOnly, "Information"
End sub
et j'obtiens des trucs comme cela quand je fais un Crlt+V: , 2 signes cabalistiques dans certains cas j'ai un "?" dans le rectangle
je précise que ma Msgbox affiche la bonne valeur
Un point que j'aurai oublié?
Merci de votre aide car je n'ai rien trouvé d'équivalent à ce pb dans le forum.
JPaul
Option Explicit
'Pour utiliser le type DataObject il faut avoir la référence de "Microsoft Forms 2.0 Object Library"
'dans les références du Projet VBA (VBA / Outils / References [/ Parcourir si besoin]).
'S'il faut parcourir, aller dans C:\Windows\SysWOW64\FM20.DLL pour trouver cette référence !
'-------------------------------------------------
'-------------------------------------------------
'Placer une chaine de caractères dans le Clipboard
'-------------------------------------------------
Sub PutInClipBoard(Chaine As String)
Dim DataObject As New MSForms.DataObject
If Len(Chaine) > 0 Then
With DataObject
.SetText Chaine
.PutInClipBoard
End With
End If
Set DataObject = Nothing
End Sub
'---------------------------
'Check the Clipboard content
'---------------------------
Function GetFromClipBoard() As String
Dim DataObject As New MSForms.DataObject
With DataObject
.GetFromClipBoard
On Error Resume Next
GetFromClipBoard = .GetText
On Error GoTo 0
End With
Set DataObject = Nothing
End Function
'---------------------------
'Effacement du presse-papier
'---------------------------
Sub ClearClipboard()
Dim DataObject As New MSForms.DataObject
With DataObject
.SetText ""
.PutInClipBoard
End With
Set DataObject = Nothing
End Sub
Bonjour le forum
Bonjour JPaul78--- Oupsssss. Bonjour Dudu2 (Pas bien, je vais 3 choses en même temps....)
Oui, c'est étrange, j'ai testé moi aussi et j'obtiens 2 sigles étranges (??).
J'ai testé une macro qui donne la même chose puis celle-ci basique, mais qui fonctionne :
VB:
Sub coller()
ActiveSheet.Paste
End Sub
Bonne après-midi à toutes & à tous –
Cela fait toujours plaisir de savoir que la contribution a aidé (ou pas).
N'hésitez pas à marquer le sujet comme résolu le cas échéant ou à liker.
@+ Eric c
(Peut être que JPaul78 va enfin s'apercevoir que je suis aussi présent ????).
Ce code chez moi fonctionne :
VB:
Sub coller()
Dim MSForm As Object
Set MSForm = New DataObject
MSForm.GetFromClipBoard
ActiveSheet.Range("A1").Value = MSForm.GetText
Set MSForm = Nothing
End Sub
Bon bah si quelqu'un me voit, bonne soirée à lui ou à elle.
@+ Eric c
(Peut être que JPaul78 va enfin s'apercevoir que je suis aussi présent ????).
Ce code chez moi fonctionne :
VB:
Sub coller()
Dim MSForm As Object
Set MSForm = New DataObject
MSForm.GetFromClipBoard
ActiveSheet.Range("A1").Value = MSForm.GetText
Set MSForm = Nothing
End Sub
Bon bah si quelqu'un me voit, bonne soirée à lui ou à elle.
@+ Eric c
Oui Eric C je t'ai vu et je te remercie de ton aide. j'étais sur la toile pour trouver des solutions. D'une part il semblerait que c'est un pb récurent d'Excel depuis au moins Excel 2016! et pour contourner le pb il faut passer par des API que je ne maitrise pas du tout .
j'ai testé ton 1ier code mais cela ne fonctionnait pas. par contre le 2ième semble fonctionner et le fait de le coller dans une feuille permet d'utiliser le contenu du presse-papier dans une autre application (le vrai but).
je continue les tests avec ta proposition, par contre je ne comprend pas du tout le pourquoi du comment!
encore merci
JPaul
Pour information et si quelqu'un sait m'expliquer, je suis tout ouïe!
j'ai appliquer le "coller" d'Eric c. une fois, le collage du presse papier dans Word fonctionne. Puis j'ai supprimé l'appel à la fonction "Coller" d'Eric, cela continue de fonctionner. j'ai redémarrer le PC et donc Excel, et cela fonctionne toujours (sans passer par le coller!)
Allez-y comprendre quelque chose ou les joies de l'informatique!
Avis aux amateurs d'explication et en attendant, la solution d'Eric c est un très bon palliatif!
JPaul