Vider le presse papier

Comment vider le presse papier en VBA ? 

Quand on copie des données dans excel pour les coller ailleurs, excel met un pointillé autour des données copiées. Appuyer sur la touche echap supprime ce pointillé. L'équivalent en VBA est obtenu par l'instruction

cutcopymode=false.

C'est une bonne idée de l'insérer dans des macros ou de grandes quantités de données sont placées dans le presse papier. Ceci arrête le mode copie mais ne vide pa à proprement parler le presse papier.
Pour s'en convaincre, copier le contenu d'une cellule dans la barre de formule ou en passant en mode saisie de la cellule => coller ailleurs => exécuter :

sub test()
 Application.CutCopyMode = False
 Application.CommandBars("Clipboard").Visible = True
 end sub

Le presse-papier n'est pas vide ! En exécutant le même test après un copier/coller d'un objet (objets dessiné quelconque par ex.), on obtient le même résultat : Presse-papier non vidé ! 

Pour réellement vider le presse papier, plusieurs solutions possibles :
En utlisant une macro XL4 en gérant l'erreur possible si le PP est vide (toujours valable dans excel 2007)

sub vide_PP()
 On Error Resume Next
 Application.CommandBars("Clipboard").Controls(4).Execute
 end sub

On peut aussi placer une donnée vide dans le presse papier de windows. Il faut pour cela que la référence à Microsoft Forms 2.0 Library soit cochée dans VBA.

Sub Clear_Clipboard()
Dim truc As DataObject
   Set truc = New DataObject
   truc.SetText ""
   truc.PutInClipboard
   Set truc = Nothing
End sub

Ou bien encore pour vider le presse papier d'office :

Déclaration des API dans le haut d'un module standard :

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

Sub Vider_Presse_Papier()
    OpenClipboard 0
    EmptyClipboard
    CloseClipboard
End Sub

Auteurs : ,

Mots clefs associés à cette page : , , ,