XL 2019 PB de copier de valeur dans le presse papier

JPaul78

XLDnaute Junior
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
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Bonjour,
VB:
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
 

Eric C

XLDnaute Barbatruc
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
 
Dernière édition:

Eric C

XLDnaute Barbatruc
Re le fil,

(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
 

JPaul78

XLDnaute Junior
Re le fil,

(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
 

JPaul78

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

Discussions similaires

Réponses
47
Affichages
3 K

Statistiques des forums

Discussions
315 098
Messages
2 116 190
Membres
112 679
dernier inscrit
Yupanki