Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Copie dans le presse papier

4 réponses
Avatar
Marc Paris
Bonsoir à tous,

Comment en vba copier une variable chaîne pour pouvoir la copier dans un
autre document ?

... et merci d'avance pour vos réponses.

Marc

4 réponses

Avatar
François Picalausa
Bonjour/soir,

Voici un bout de code qui devrait le faire:
Option Explicit

Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As
Long, ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long,
ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As
Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As
Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As
Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory"
(Destination As Any, Source As Any, ByVal Length As Long)
Private Const GMEM_MOVEABLE = &H2
Private Const CF_TEXT = 1

Private Sub Command1_Click()
Debug.Print SetCliboardText(Text1.Text)
End Sub

'Exemple traduit du platform SDK
Function SetCliboardText(strText As String) As Boolean
Dim Buffer() As Byte
Dim lptstrCopy As Long
Dim hglbCopy As Long

'Ouve le presse papier et le vide
If OpenClipboard(0&) Then
EmptyClipboard
Buffer = StrConv(strText & Chr$(0), vbFromUnicode)
'Alloue un objet mémoire global pour le texte.
hglbCopy = GlobalAlloc(GMEM_MOVEABLE, UBound(Buffer) + 1)
If hglbCopy Then
'Verouille le handle et copie le texte dans le buffer.
lptstrCopy = GlobalLock(hglbCopy)
CopyMemory ByVal lptstrCopy&, Buffer(0), UBound(Buffer) + 1
GlobalUnlock hglbCopy
'Place le handle dans le clipboard
SetCliboardText = SetClipboardData(CF_TEXT, hglbCopy)
Erase Buffer
Else
SetCliboardText = False
End If
CloseClipboard
Else
SetCliboardText = False
End If
End Function

Sinon, tu peux aller voir sur le site de Karl E. Peterson
(http://www.mvps.org/vb/), l'exemple clipex qui est nettement plus complet
que mon petit bout de code ;-)

--
François Picalausa
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Marc Paris" a écrit dans le message de
news:
Bonsoir à tous,

Comment en vba copier une variable chaîne pour pouvoir la copier dans
un autre document ?

... et merci d'avance pour vos réponses.

Marc


Avatar
Marc Paris
Bonsoir,

Tout d'abord merci !

Ceci me paraît bien compliqué pour faire ce que je souhaite ou alors, je me
suis mal exprimé.

En fait je voudrais copier une chaîne de caractères fabriquée en vb dans
n'importe quelle application par la commande coller (équivalent des
combinaisons de touches ctl+V)

Marc


"François Picalausa" a écrit dans le message de news:

Bonjour/soir,

Voici un bout de code qui devrait le faire:
Option Explicit

Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As
Long, ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long,
ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As
Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long)


As
Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long)


As
Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory"
(Destination As Any, Source As Any, ByVal Length As Long)
Private Const GMEM_MOVEABLE = &H2
Private Const CF_TEXT = 1

Private Sub Command1_Click()
Debug.Print SetCliboardText(Text1.Text)
End Sub

'Exemple traduit du platform SDK
Function SetCliboardText(strText As String) As Boolean
Dim Buffer() As Byte
Dim lptstrCopy As Long
Dim hglbCopy As Long

'Ouve le presse papier et le vide
If OpenClipboard(0&) Then
EmptyClipboard
Buffer = StrConv(strText & Chr$(0), vbFromUnicode)
'Alloue un objet mémoire global pour le texte.
hglbCopy = GlobalAlloc(GMEM_MOVEABLE, UBound(Buffer) + 1)
If hglbCopy Then
'Verouille le handle et copie le texte dans le buffer.
lptstrCopy = GlobalLock(hglbCopy)
CopyMemory ByVal lptstrCopy&, Buffer(0), UBound(Buffer) + 1
GlobalUnlock hglbCopy
'Place le handle dans le clipboard
SetCliboardText = SetClipboardData(CF_TEXT, hglbCopy)
Erase Buffer
Else
SetCliboardText = False
End If
CloseClipboard
Else
SetCliboardText = False
End If
End Function

Sinon, tu peux aller voir sur le site de Karl E. Peterson
(http://www.mvps.org/vb/), l'exemple clipex qui est nettement plus complet
que mon petit bout de code ;-)

--
François Picalausa
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Marc Paris" a écrit dans le message de
news:
> Bonsoir à tous,
>
> Comment en vba copier une variable chaîne pour pouvoir la copier dans
> un autre document ?
>
> ... et merci d'avance pour vos réponses.
>
> Marc




Avatar
François Picalausa
Bonjour/soir,

L'exemple que je t'ai fournit est, en VBA, le plus simple pour copier une
variable chaine dans le presse papier.
Maintenant, pour coller directement le texte dans une autre application, il
faut voir si l'application en question supporte un quelconque moyen de
communication (automation, DDE, ...)
Sinon, tu emploie mon code et puis ctl+V

La fonction en elle même n'est pas compliquée à utiliser:
SetCliboardText "Hello!"

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Marc Paris" a écrit dans le message de
news:
Bonsoir,

Tout d'abord merci !

Ceci me paraît bien compliqué pour faire ce que je souhaite ou alors,
je me suis mal exprimé.

En fait je voudrais copier une chaîne de caractères fabriquée en vb
dans n'importe quelle application par la commande coller (équivalent
des combinaisons de touches ctl+V)

Marc


"François Picalausa" a écrit dans le message de
news:
Bonjour/soir,

Voici un bout de code qui devrait le faire:
Option Explicit

Private Declare Function SetClipboardData Lib "user32" (ByVal
wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As
Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As
Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As
Long) As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As
Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory"
(Destination As Any, Source As Any, ByVal Length As Long)
Private Const GMEM_MOVEABLE = &H2
Private Const CF_TEXT = 1

Private Sub Command1_Click()
Debug.Print SetCliboardText(Text1.Text)
End Sub

'Exemple traduit du platform SDK
Function SetCliboardText(strText As String) As Boolean
Dim Buffer() As Byte
Dim lptstrCopy As Long
Dim hglbCopy As Long

'Ouve le presse papier et le vide
If OpenClipboard(0&) Then
EmptyClipboard
Buffer = StrConv(strText & Chr$(0), vbFromUnicode)
'Alloue un objet mémoire global pour le texte.
hglbCopy = GlobalAlloc(GMEM_MOVEABLE, UBound(Buffer) + 1)
If hglbCopy Then
'Verouille le handle et copie le texte dans le buffer.
lptstrCopy = GlobalLock(hglbCopy)
CopyMemory ByVal lptstrCopy&, Buffer(0), UBound(Buffer)
+ 1 GlobalUnlock hglbCopy
'Place le handle dans le clipboard
SetCliboardText = SetClipboardData(CF_TEXT, hglbCopy)
Erase Buffer
Else
SetCliboardText = False
End If
CloseClipboard
Else
SetCliboardText = False
End If
End Function

Sinon, tu peux aller voir sur le site de Karl E. Peterson
(http://www.mvps.org/vb/), l'exemple clipex qui est nettement plus
complet que mon petit bout de code ;-)

--
François Picalausa
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Marc Paris" a écrit dans le message de
news:
Bonsoir à tous,

Comment en vba copier une variable chaîne pour pouvoir la copier
dans un autre document ?

... et merci d'avance pour vos réponses.

Marc






Avatar
Marc Paris
OK, Merci

Marc


"François Picalausa" a écrit dans le message de news:

Bonjour/soir,

L'exemple que je t'ai fournit est, en VBA, le plus simple pour copier une
variable chaine dans le presse papier.
Maintenant, pour coller directement le texte dans une autre application,


il
faut voir si l'application en question supporte un quelconque moyen de
communication (automation, DDE, ...)
Sinon, tu emploie mon code et puis ctl+V

La fonction en elle même n'est pas compliquée à utiliser:
SetCliboardText "Hello!"

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Marc Paris" a écrit dans le message de
news:
> Bonsoir,
>
> Tout d'abord merci !
>
> Ceci me paraît bien compliqué pour faire ce que je souhaite ou alors,
> je me suis mal exprimé.
>
> En fait je voudrais copier une chaîne de caractères fabriquée en vb
> dans n'importe quelle application par la commande coller (équivalent
> des combinaisons de touches ctl+V)
>
> Marc
>
>
> "François Picalausa" a écrit dans le message de
> news:
>> Bonjour/soir,
>>
>> Voici un bout de code qui devrait le faire:
>> Option Explicit
>>
>> Private Declare Function SetClipboardData Lib "user32" (ByVal
>> wFormat As Long, ByVal hMem As Long) As Long
>> Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As
>> Long, ByVal dwBytes As Long) As Long
>> Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As
>> Long) As Long
>> Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As
>> Long) As Long
>> Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As
>> Long) As Long
>> Private Declare Function CloseClipboard Lib "user32" () As Long
>> Private Declare Function EmptyClipboard Lib "user32" () As Long
>> Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory"
>> (Destination As Any, Source As Any, ByVal Length As Long)
>> Private Const GMEM_MOVEABLE = &H2
>> Private Const CF_TEXT = 1
>>
>> Private Sub Command1_Click()
>> Debug.Print SetCliboardText(Text1.Text)
>> End Sub
>>
>> 'Exemple traduit du platform SDK
>> Function SetCliboardText(strText As String) As Boolean
>> Dim Buffer() As Byte
>> Dim lptstrCopy As Long
>> Dim hglbCopy As Long
>>
>> 'Ouve le presse papier et le vide
>> If OpenClipboard(0&) Then
>> EmptyClipboard
>> Buffer = StrConv(strText & Chr$(0), vbFromUnicode)
>> 'Alloue un objet mémoire global pour le texte.
>> hglbCopy = GlobalAlloc(GMEM_MOVEABLE, UBound(Buffer) + 1)
>> If hglbCopy Then
>> 'Verouille le handle et copie le texte dans le buffer.
>> lptstrCopy = GlobalLock(hglbCopy)
>> CopyMemory ByVal lptstrCopy&, Buffer(0), UBound(Buffer)
>> + 1 GlobalUnlock hglbCopy
>> 'Place le handle dans le clipboard
>> SetCliboardText = SetClipboardData(CF_TEXT, hglbCopy)
>> Erase Buffer
>> Else
>> SetCliboardText = False
>> End If
>> CloseClipboard
>> Else
>> SetCliboardText = False
>> End If
>> End Function
>>
>> Sinon, tu peux aller voir sur le site de Karl E. Peterson
>> (http://www.mvps.org/vb/), l'exemple clipex qui est nettement plus
>> complet que mon petit bout de code ;-)
>>
>> --
>> François Picalausa
>> FAQ VB : http://faq.vb.free.fr
>> MSDN : http://msdn.microsoft.com
>>
>>
>> "Marc Paris" a écrit dans le message de
>> news:
>>> Bonsoir à tous,
>>>
>>> Comment en vba copier une variable chaîne pour pouvoir la copier
>>> dans un autre document ?
>>>
>>> ... et merci d'avance pour vos réponses.
>>>
>>> Marc