Bonjour à tous,
J'ai codé un programme sous excel (donc en vba) qui fait pas mal de copier/coller pour générer des nouvelles worksheets.
J'ai un problème qui apparait de temps en temps (mais pas tout le temps), même sur le même jeu de données en entrée, à savoir que j'obtiens l'erreur 1004: La méthode 'Paste' de l'objet '_Worksheet' a échoué.
Du coup je soupçonne fortement l'utilisation abusive du presse papier, et plus particulièrement qu'un autre programme sur mon ordinateur utilise le presse papier en même temps (promis je ne touche à rien quand je teste mon programme vba).
Du coup j'ai cherché comment copier/coller en vba sans passer par le presse papier, mais il semble qu'on ne puisse faire ca que pour du texte dans des cellules ou des formules. Moi j'ai entre autre des graphes à dupliquer (copier/coller). Par exemple j'ai trouvé ce genre de ligne de code (qui de toutes facons manipule le presse papier, puisqu'une fois exécuté, le presse papier est vidé de son précédent contenu) :
ThisWorkbook.Sheets("Layout").Range("A1").Copy Destination:=ThisWorkbook.Sheets("Test").Range("A1")
Ou cette ligne de code:
ThisWorkbook.Sheets("Test").Range("A1") = ThisWorkbook.Sheets("Layout").Range("A1")
Bon du coup j'ai cherché à bloquer (lock/unlock) l'utilisation du presse papier pendant que mon programme vba l'utilisait.
Je suis tombé sur ce bout de code:
Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Declare Function CloseClipboard Lib "user32" () As Long
Declare Function EmptyClipboard Lib "user32" () As Long
Public Sub Lockk()
If OpenClipboard(0) = 0 Then
MsgBox "cannot open clipboard."
ElseIf EmptyClipboard() = 0 Then
MsgBox "cannot clear clipboard."
End If
End Sub
Public Sub Unlockk()
CloseClipboard
End Sub
Ca marche pas mal quand on manipule des cellules.
On peut locker le presse papier, vérifier sous notepad qu'on ne peut plus rien copier/coller, retourner sous excel, et copier/coller des cellules (à la main ou via du code vba); et ensuite unlocker le presse papier.
Par contre:
J'ai remarqué que copier/coller une cellule débloquait le presse papier (alors même que je n'appelle pas la fonction unlock).
Et mon gros problème, quand j'encapsule mon code vba qui copy/paste un graph avec les fonction lock/unlock; au moment d’exécuter la ligne qui colle le graphe (paste), j'obtiens la même erreur que précédemment (1004).
Est ce que quelqu'un saurait: soit comment copier/coller (dupliquer) des élements sans passer par le presse papier (et pas seulement du texte, aussi des graph).
Soit comment locker le presse papier, mais toujours pouvoir copier/coller des graph?
Merci
J'ai codé un programme sous excel (donc en vba) qui fait pas mal de copier/coller pour générer des nouvelles worksheets.
J'ai un problème qui apparait de temps en temps (mais pas tout le temps), même sur le même jeu de données en entrée, à savoir que j'obtiens l'erreur 1004: La méthode 'Paste' de l'objet '_Worksheet' a échoué.
Du coup je soupçonne fortement l'utilisation abusive du presse papier, et plus particulièrement qu'un autre programme sur mon ordinateur utilise le presse papier en même temps (promis je ne touche à rien quand je teste mon programme vba).
Du coup j'ai cherché comment copier/coller en vba sans passer par le presse papier, mais il semble qu'on ne puisse faire ca que pour du texte dans des cellules ou des formules. Moi j'ai entre autre des graphes à dupliquer (copier/coller). Par exemple j'ai trouvé ce genre de ligne de code (qui de toutes facons manipule le presse papier, puisqu'une fois exécuté, le presse papier est vidé de son précédent contenu) :
ThisWorkbook.Sheets("Layout").Range("A1").Copy Destination:=ThisWorkbook.Sheets("Test").Range("A1")
Ou cette ligne de code:
ThisWorkbook.Sheets("Test").Range("A1") = ThisWorkbook.Sheets("Layout").Range("A1")
Bon du coup j'ai cherché à bloquer (lock/unlock) l'utilisation du presse papier pendant que mon programme vba l'utilisait.
Je suis tombé sur ce bout de code:
Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Declare Function CloseClipboard Lib "user32" () As Long
Declare Function EmptyClipboard Lib "user32" () As Long
Public Sub Lockk()
If OpenClipboard(0) = 0 Then
MsgBox "cannot open clipboard."
ElseIf EmptyClipboard() = 0 Then
MsgBox "cannot clear clipboard."
End If
End Sub
Public Sub Unlockk()
CloseClipboard
End Sub
Ca marche pas mal quand on manipule des cellules.
On peut locker le presse papier, vérifier sous notepad qu'on ne peut plus rien copier/coller, retourner sous excel, et copier/coller des cellules (à la main ou via du code vba); et ensuite unlocker le presse papier.
Par contre:
J'ai remarqué que copier/coller une cellule débloquait le presse papier (alors même que je n'appelle pas la fonction unlock).
Et mon gros problème, quand j'encapsule mon code vba qui copy/paste un graph avec les fonction lock/unlock; au moment d’exécuter la ligne qui colle le graphe (paste), j'obtiens la même erreur que précédemment (1004).
Est ce que quelqu'un saurait: soit comment copier/coller (dupliquer) des élements sans passer par le presse papier (et pas seulement du texte, aussi des graph).
Soit comment locker le presse papier, mais toujours pouvoir copier/coller des graph?
Merci