Microsoft 365 Function fSendTextToClipboard, ne fonctionne pas

ecrivain77

XLDnaute Nouveau
Bonjour,
Depuis plus d'une semaine lorsque j'active la Function Copier dans le presse papier, cela n'enregistre pas le texte mais des symboles.
VB:
Public Function fSendTextToClipboard(strToSend As String) As Boolean   ' APPEL DE LA FONCTION PRESSE PAPIER
    Dim dObj As Object
    Set dObj = New DataObject
    With dObj
        .SetText strToSend
        .PutInClipboard
    End With
    Set dObj = Nothing
End Function

'
'*******************  COPIER DANS LE PRESSE PAPIER *******************
'
Sub CmdBtnCopier_Click()
fSendTextToClipboard (TxtBxTitre.Text & vbCrLf & "<br/>" & vbCrLf) _
    & (TxtBxDetail.Text & vbCrLf & "<br/>" & vbCrLf) _
    & ("<b><u>Solution:</u></b>" & vbCrLf & "<br/>" & vbCrLf & TxtBxSolution.Text & vbCrLf) _
    & ("<b><u><center><span style=""color: red"">" & TxtBxAlerte.Text & vbCrLf & "</span></center></u></b>") & vbCrLf _
    & (TxtBxMot.Text)

End Sub

Merci.
 

Pièces jointes

  • Tips.xlsm
    30.4 KB · Affichages: 5
Solution
Re

Ce que je voulais dire, c'est que ton fichier affiche un Userform et met Excel en invisible. Si on clique sur la croix de l'userform, Excel reste ouvert derrière mais n'est plus accessible. Une personne pas très à l'aise avec la programmation ne comprendra pas ce qui se passe.

Sinon pour ton problème, il suffisait de faire un petit fichier simple comme ceci.

Par contre, je n'ai pas compris ce qui ne fonctionnait pas, chez moi le copier coller fonctionne normalement.

dysorthographie

XLDnaute Accro
Bonjour,
Code:
Sub CmdBtnCopier_Click()
PressePapier = (TxtBxTitre.Text & vbCrLf & "<br/>" & vbCrLf) _
    & (TxtBxDetail.Text & vbCrLf & "<br/>" & vbCrLf) _
    & ("<b><u>Solution:</u></b>" & vbCrLf & "<br/>" & vbCrLf & TxtBxSolution.Text & vbCrLf) _
    & ("<b><u><center><span style='color: red'>" & TxtBxAlerte.Text & vbCrLf & "</span></center></u></b>") & vbCrLf _
    & (TxtBxMot.Text)

End Sub
Public Property Let PressePapier(Value) 'Ici  place un texte dans le press papier
Const DATAOBJECT_BINDING As String = "new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"
    With CreateObject(DATAOBJECT_BINDING)
        .SetText Value
        .PutInClipboard
    End With
End Property
Public Property Get PressePapier() 'Ici  on récupère le  texte du  press papier
Const DATAOBJECT_BINDING As String = "new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"
    With CreateObject(DATAOBJECT_BINDING)
        .GetFromClipboard
        PressePapier = .GetText
    End With
End Property
 

MJ13

XLDnaute Barbatruc
Re

Ce que je voulais dire, c'est que ton fichier affiche un Userform et met Excel en invisible. Si on clique sur la croix de l'userform, Excel reste ouvert derrière mais n'est plus accessible. Une personne pas très à l'aise avec la programmation ne comprendra pas ce qui se passe.

Sinon pour ton problème, il suffisait de faire un petit fichier simple comme ceci.

Par contre, je n'ai pas compris ce qui ne fonctionnait pas, chez moi le copier coller fonctionne normalement.
 

Pièces jointes

  • Tips MJ Test.xlsm
    18.1 KB · Affichages: 5

ecrivain77

XLDnaute Nouveau
Bonjour MJ13,

Merci pour ton aide.
Il est vrai que je suis le seul à utiliser ce fichier, mais je vais corriger l'ouverture.
J'ai fait le test du fichier sur un autre pc , et il fonctionne sans souci.
J'ai fait le test sur le pc d'un collègue et il ne fonctionne pas.
Donc cela vient des mises à jours faites par la DSI, et ce n'est pas la première fois que cela se produit sur des fichiers excel, suite aux mises à jour.
Je viens de tester ton fichier. et cela ne fonctionne pas.
Donc je dois trouver une autre solution , car la DSI ne dépanne pas les fichiers avec macro.
 

Pièces jointes

  • UserForm1.png
    UserForm1.png
    8.6 KB · Affichages: 13

patricktoulon

XLDnaute Barbatruc
BONJOUR
VB:
Sub CmdBtnCopier_Click()
PutInPressePapier (TxtBxTitre.Text & vbCrLf & "<br/>" & vbCrLf) _
    & (TxtBxDetail.Text & vbCrLf & "<br/>" & vbCrLf) _
    & ("<b><u>Solution:</u></b>" & vbCrLf & "<br/>" & vbCrLf & TxtBxSolution.Text & vbCrLf) _
    & ("<b><u><center><span style=""color: red"">" & TxtBxAlerte.Text & vbCrLf & "</span></center></u></b>") & vbCrLf _
    & (TxtBxMot.Text)
    '& ("<img src=""R:\DITX-EC\SVPBURO_SCC\Base de connaissance\A_valider\Tips\" & TxtBxImg2.Text & """" & "/>" & "<br/>") & vbCrLf _
    '& ("<img src=""R:\DITX-EC\SVPBURO_SCC\Base de connaissance\A_valider\Tips\" & TxtBxImg1.Text & """" & "/>") & vbCrLf _

End Sub

Sub PutInPressePapier(Value) 'Ici  place un texte dans le press papier
 With CreateObject("htmlfile").parentwindow.clipboardData.setData("Text", "<html>" & Value & "</html>"): End With
 End Sub
Function GetpressePapier() 'Ici  on récupère le  texte du  press papier
GetpressePapier = Replace(Replace(CreateObject("htmlfile").parentwindow.clipboardData.GetData("TEXT"), "</html>", "<html>"), "<html>", "")
End Function

testé

sauf que ton userform est trop grand sur une tv de 107cm
souhaitons que tu change jamais d’écran LOL ;)

et puis les boutons br et tout le reste c'est bof bof bof
tes texte box c'est de balise "<p>" et les mettre en multiligne et l'ors du transfert dans le clip un replace vbcrlf par "<br/> et c'est tout
sincèrement un wysiwyg dans un webbrowser aurait été plus approprié (hein robert;))

du genre ca
demo3.gif
 

ecrivain77

XLDnaute Nouveau
Bonjour patricktoulon,
Je comprends ta réflexion, en fait cet UserForm me permets de copier des lignes de code , que je dois coller dans un site développé par un collègue. Car je n'ai aucun droit d'accès vers le serveur du site ou vers un serveur externe. Je ne peux utilser un wysiwyg dans un webbrowser , c'est bloqué par le Proxy de la DSI. Cela m’évite de tapez les lignes de codes à chaque fois, et dans le site je n'ai pas la possibilité d'ajouter des liens img ou autre automatiquement, je crois même que certains codes comme <p> <span> ne sont pas reconnu dans son site pour les tutos, et même les accents ne sont pas reconnus, tu vois le niveau du site.. Donc je fais la mise en page sous excel avec les liens des images les ajouts de doc, les mises en pages et je colle dans son site.
J'ai trouvé une solution de contournement , pour copier le texte du UserForm. Je copie chaque texte box et je colle au fur et à mesure.
Merci pour ton exemple il est génial, mais sera refusé par la DSI de la boîte.
 

Pièces jointes

  • Tips1.png
    Tips1.png
    34.4 KB · Affichages: 12

patricktoulon

XLDnaute Barbatruc
re
mon wysiwyg n'a pas de contact ou ne fait pas appelle a une source il la créée tout seul
la seule chose qui peut éventuellement poser problème c'est les version 2013 et + qui bloque le controls webbrowser chose remédiable très facilement la méthode sur microsof.com est bien connu

je regarderais j'ai peut être une solution plus adapté a ta méthode en gardant des textboxs
cela dit coder en innerhtml c'est pas la joie mais bon ainsi soit il ;)
 

ecrivain77

XLDnaute Nouveau
Hello, merci pour ton implication, mais je viens d'apprendre que le site va être arrêté, car trop instable et plus maintenu, donc les tutos et tips que je fais, ne sont plus d'actualité. Je dois tout passer en PDF, ils m'ont demandé de développer sous Access une base de données avec interface User. Super je suis nul en Excel, mais hyper nul en access. Donc je dois apprendre Access, car le client ne nous donne aucun droit sur les serveurs Web. Merci franchement pour ton aide.
 

Hermesis29

XLDnaute Nouveau
Re

Ce que je voulais dire, c'est que ton fichier affiche un Userform et met Excel en invisible. Si on clique sur la croix de l'userform, Excel reste ouvert derrière mais n'est plus accessible. Une personne pas très à l'aise avec la programmation ne comprendra pas ce qui se passe.

Sinon pour ton problème, il suffisait de faire un petit fichier simple comme ceci.

Par contre, je n'ai pas compris ce qui ne fonctionnait pas, chez moi le copier coller fonctionne normalement.
Bonjour, ce sujet date un peu, mais je rencontre aussi des problème avec la fonction PutInClipboard. j'ai constaté sans vraiment comprendre pourquoi que le problème apparaissait lorsque des fenêtres d'explorateur Windows étaient ouverte (sous windows 10 à minima) donc je cherche une façon de contourner le problème, mais je bloque un peu. pour l'instant, j'essaye de parcourir les fenêtres ouvertes de windows, mettre en mémoire les chemins de répertoire, les fermer, utiliser ma mise en mémoire tampon, puis réouvrir les répertoires.
mais d'une part je ne maitrise pas la librairie user32.dll et donc pour l'instant, je coince un peu.
et d'autre part cette solution me semble bien maladroite pour contourner un problème qui a peut-être une solution plus directe et élégante.

une idée?

au cas ou, mon bout de code qui fonctionne bien, à condition d'avoir préalablement fermé toutes les fenêtre d'explorateur Windows :
(Je converti une plage de cellules visibles en une seule chaine de caractère avec des séparateurs ";" - c'est pour copier dans le champs requête d'un ERP un peu moisi qui ne sais pas gérer le collage depuis un tableau)

Sub Liste_A_Coller()
Dim MaListe As Variant
Dim Cellule As Variant
For Each Cellule In Selection.SpecialCells(xlCellTypeVisible)
If CStr(Cellule.Value) <> "" Then
If MaListe = "" Then
MaListe = Cellule.Value
ElseIf InStr(1, MaListe, Cellule.Value, vbTextCompare) = 0 Then
MaListe = MaListe & ";" & Cellule.Value
End If
End If
Next Cellule
Application.CutCopyMode = False
Set XObj = New DataObject
XObj.SetText (MaListe)
XObj.PutInClipboard
Set XObj = Nothing
End Sub
 

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16