VBA: vider le press-papiers (clipboard)


Si vous avez besoin d'utiliser le Press-Papiers dans vos macros VBA, le code qui suit vous sera plus qu'utile. Il vous permettra de vider le press-papiers et éviter ainsi des mauvaises surprises.

En fait, probablement sans vous en rendre compte, vous utilisez habituellement deux press-papiers: celui de Windows mais aussi celui de Excel. En effet, Excel dispose de son propre Press-Papiers.

Le Press-Papiers est très pratique pour transférer des données entre différents classeurs Excel mais également entre différentes applications. Il peut aussi servir pour déplacer/copier des graphiques, captures d'écran etc.

Pour éviter des mauvaises surprises, il est utile de nettoyer le press-papiers de temps en temps car il se peut qu'après un certain temps, il n'est plus clair ce qui peut s'y trouver.

Voici donc deux fonctions VBA qui feront l'affaire

Vider le Press-Papiers Excel avec VBA

La particularité du press-papiers Excel est qu'il n'écrase pas le contenu du press-papiers Windows. Cela veut dire que vous pouvez être en train de faire des copier/coller du contenu d'une page internet dans Firefox, et cela n'impactera pas le copier/coller d'un tableau Excel.

Pour nettoyer le press-papier Excel, une seule ligne de code VBA suffit:

Sub NettoyerPressPapiersExcel()
    Application.CutCopyMode = False
End Sub

Ce code-ci vous seras utile surtout si votre macro VBA ne "quitte" pas Excel – notamment si vous copiez les données entre différents Classeurs Excel.

Vider le Press-Papiers de Windows avec VBA

Le code suivant est plus radical. Il va vider tous les press-papiers – celui de Windows et celui de Excel. Peu importe donc dans quelle application vous avez fait le fameux Ctrl + C. Vous êtes sûrs qu'après avoir exécuté cette fonction, vous ne rencontrerez aucune "pollution" qui pourrait perturber le fonctionnement de votre macro VBA…

Vous devez copier tout le code VBA qui suit dans un Module (au début d'un Module pour être plus précis). La fonction VBA à utiliser est la fonction NettoyerPressPapiers()

Option Explicit
 
Public Declare Function OuvrirPressPapiers Lib "user32" Alias "OpenClipboard" (ByVal hwnd As Long) As Long
Public Declare Function ViderPressPapiers Lib "user32" Alias "EmptyClipboard" () As Long
Public Declare Function FermerPressPapiers Lib "user32" Alias "CloseClipboard" () As Long
 
Public Function NettoyerPressPapiers()
  OuvrirPressPapiers (0&)
  ViderPressPapiers
  FermerPressPapiers
End Function

Et voici un petit code pour montrer comment exécuter cette fonction – la procédure TestNettoyerPressPapiers()

Sub TestNettoyerPressPapiers()
  Call NettoyerPressPapiers
End Sub

Tester le comportement

Afin de mieux comprendre le fonctionnement des deux press-papiers et l'impact des deux fonctions VBA que je vous propose plus haut, vous pouvez faire une série de tests. Vous verrez, c'est assez intéressant!

Ouvrez un Classeur Excel et ouvrez le bloc-notes de Windows. Remplissez quelques cellules dans le Classeur et écrivez quelque chose dans le bloc-notes. Maintenant, vous pouvez commencer à tester les différentes possibilités:

  • copier le texte dans le bloc-notes, lancer la fonction NettoyerPresspapiers() et essayer de coller le texte copié quelque part
  • la même chose mais en utilisant la fonction NettoyerPressPapiersExcel()
  • copiez  quelques cellules du Classeur, lancez la fonction NettoyerPressPapiersExcel() et essayez de coller le contenu du press-papiers
  • etc.

Conclusion

Pour faire du travail correct, c'est toujours mieux de commencer avec des outils "propres" et de les "nettoyer" de temps en temps. Ce n'est pas seulement le cas des pioches, clés ou autres outils de bricolage et jardinage. c'est aussi le cas dans l'informatique.

Si vous devez faire des copier/coller dans vos macros, je vous conseille vivement de nettoyer les press-papiers avant de commencer (grâce au code VBA sur cette page) mais aussi après. Imaginez que des données sensibles restent dans le press-papiers – quelqu'un pourrait facilement les récupérer…

Si on suit le même principe, vous pouvez également Vider la mémoire cache des tableaux croisés dynamiques (TCD)

Et n'oubliez pas de jeter un coup d’œil à d'autres Codes sources VBA que je vous propose. Ils risquent de vous faciliter la vie!

 

2 0



Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.