Cet article explique comment utiliser VBA pour copier des éléments dans le Presse-papiers.
Il peut arriver que nous souhaitions copier des informations dans Excel VBA et les stocker pour les utiliser dans une autre application ou à un autre moment lorsque la macro Excel a cessé de s'exécuter. Une fois qu'une macro cesse de s'exécuter, les informations stockées dans une ou plusieurs variables cessent d'exister et ne peuvent plus être récupérées. Une façon de résoudre ce problème serait de copier ces informations dans le presse-papiers.
Copie dans le presse-papiers à l'aide de la bibliothèque d'objets HTML
La façon la plus simple d'utiliser le presse-papiers dans Excel VBA consiste à appeler la bibliothèque d'objets HTML.
1234567 | Sous-StoreData()Dim varText en tant que varianteDim objCP en tant qu'objetvarText = "Du texte copié"Définir objCP = CreateObject("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "texte", varTextFin du sous-marin |
Comme nous utilisons la liaison tardive en déclarant la variable objCP en tant qu'objet, nous n'avons pas besoin d'ajouter une référence à Excel pour que cette procédure fonctionne.
Si nous devions maintenant passer à notre feuille de calcul Excel et cliquer sur Coller, le texte « Certaines données copiées » serait inséré dans la cellule sélectionnée.
Si nous devions changer cette procédure ci-dessus en fonction, nous pourrions passer le texte à copier en tant que variable.
12345 | Fonction StoreData (varText en tant que variante) en tant que chaîneDim objCP en tant qu'objetDéfinir objCP = CreateObject("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "texte", varTextFonction de fin |
Nous pourrions ensuite appeler cette fonction plusieurs fois dans notre code VBA au fur et à mesure que nous devons copier du texte dans le presse-papiers. Le texte ne serait donc pas codé en dur dans le code VBA.
123 | Sous-CopieDonnées()StoreData "Du texte copié"Fin du sous-marin |
Nous pouvons également utiliser l'objet HTML pour renvoyer le texte du presse-papiers - c'est-à-dire coller. Pour cela, nous utilisons la méthode GetData plutôt que la méthode SetData.
12345 | Fonction ReturnData()Dim objCP en tant qu'objetDéfinir objCP = CreateObject("HtmlFile")ReturnData = objCP.parentWindow.clipboardData.GetData("text")Fonction de fin |
Nous pouvons alors appeler cette fonction pour retourner les données stockées dans le presse-papiers.
123 | Sous-collerDonnées()MsgBox ReturnDataFin du sous-marin |
Une astuce intéressante consisterait à combiner les 2 fonctions afin que nous puissions utiliser la même fonction pour copier et coller des données, selon que nous envoyons ou non des données au presse-papiers, ou si nous souhaitons récupérer des données du presse-papiers.
1234567891011 | Fonction StoreOrReturnData (option StrText As String) As StringDim varText en tant que varianteDim objCP en tant qu'objetDéfinir objCP = CreateObject("HtmlFile")varText = strTextSi strText "" AlorsobjCP.ParentWindow.ClipboardData.SetData "texte", varTextAutreStoreOrReturnData = objCP.ParentWindow.ClipboardData.GetData("text")Fin siFonction de fin |
Dans le code ci-dessus, nous pouvons rendre la variable strText facultative - cela signifie que si nous souhaitons copier des données, nous inclurons le texte à copier, mais si nous souhaitons coller des données, nous l'exclurons.
Nous allons ensuite affecter la variable chaîne (strText) à une variable Variant afin qu'elle soit stockée dans la méthode SetData de l'objet fichier HTML.
Pour copier les données, nous pouvons utiliser cette procédure, notez que nous incluons le texte à copier.
123 | Sous-CopieDonnées()StoreOrReturnData "SomeCopiedText"Fin du sous-marin |
Pour coller les données, nous pouvons utiliser cette procédure. La boîte de message affichera la valeur stockée dans le presse-papiers.
123 | Sous-collerDonnées()MsgBox StoreOrReturnDataFin du sous-marin |