Vider presse papier excel 2003 a 2010, 32 et 64B

iStarOSX

XLDnaute Junior
Bonsoir a tous.

Ah faire un utilitaire excel compatible avec toutes les version, ce n'est pas simple.

Bon voila j'ai encore un problème avec mon application. Je veux vider le presse papier et pour cela j'utilise le code que j'ai trouvé sur ce forum :

Code:
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 ViderPresse_PapierA()
    OpenClipboard 0
    EmptyClipboard
    CloseClipboard
End Sub

Il fonctionne très bien sous Excel 2003 32bit, mais ne fonctionne pas sous 2010 64bit.

quelqu'un connait il une solution pour vider le presse papier dans toutes les versions d'excel depuis la 2003 a la 2010, en 32 et 64bits.

Merci pour votre aide.

Cordialement iStarOSX
 

Pierrot93

XLDnaute Barbatruc
Re : Vider presse papier excel 2003 a 2010, 32 et 64B

Bonjour,

petite remarque au passage, ton presse papier est sensé contenir quoi ? ceci ne pourrait pas suffire à régler ton problème :
Code:
Application.CutCopyMode = False

ou encore ceci :
Code:
'activer la reference Microsoft Forms 2.0 Object Library
Dim x As New DataObject
x.SetText ""
x.PutInClipboard

bonne journée
@+
 

Misange

XLDnaute Barbatruc
Re : Vider presse papier excel 2003 a 2010, 32 et 64B

Bonjour

plusieurs solutions à tester ici (pas essayé avec excel en 64bits)
Ce lien n'existe plus
en particulier

Application.CommandBars("Clipboard").Controls(4).Execute

ou

Dim truc As DataObject Set truc = New DataObject truc.SetText "" truc.PutInClipboard Set truc = Nothing
 

iStarOSX

XLDnaute Junior
Re : Vider presse papier excel 2003 a 2010, 32 et 64B

Bonsoir a tous et merci de votre aide.

En fait j'ai du tester quasiment la toutes les solutions que vous me donnez.

Je les avez trouvées et tester, sauf la solution suivante :
Code:
'activer la reference Microsoft Forms 2.0 Object Library
Dim x As New DataObject
x.SetText ""
x.PutInClipboard

Car si j'utilise cette solution, les utilisateurs devront également activer "Microsoft Forms 2.0 Object Library" ?

Je veux que mon appui soit accessible et utilisable par des non initier a XL. Donc leur demander d'aller activer des trucs dans VBA, cela ne me plais pas trop.

Pour les autres solutions, elle ne fonctionne pas avec toutes les versions d'excel.

Il faudrait faire une macro qui permettait de détecter la version d'excel et si on est en 32 ou 64bits puis appliquer le code en fonction. Je vais chercher, car je l'avais fais sur une autre appli qui appliquait un code en fonction de la version de windows.


Merci et a bientôt
 

david84

XLDnaute Barbatruc
Re : Vider presse papier excel 2003 a 2010, 32 et 64B

Bonsoir,
la solution t'a été donnée dans le message #2.
A partir du moment où tu utilises des API avec la v64bits d'Excel 2010, tu dois reprendre certaines parties de ces procédures afin de les rendre compatibles (utiliser PtrSafe, redéfinir certaines variables si besoin,...).
Ci-joint un autre lien Ce lien n'existe plus.
Il y est notamment dit
Pour résumer, si vous écrivez du code 64 bits et que prévoyez de l’utiliser dans des versions précédentes de Microsoft Office, il faut utiliser la constante de compilation conditionnelle VBA7. En revanche, si vous écrivez du code 32 bits dans Office 2010, ce code fonctionne tel que dans les versions précédentes d’Microsoft Office sans la constante de compilation. Si vous souhaitez être sûr d’utiliser des instructions 32 bits pour les versions 32 bits et des instructions 64 bits pour les versions 64 bits, la meilleure solution consiste à utiliser la constante de compilation conditionnelle Win64.
Ce document t'explique comment procéder.
A+
 
Dernière édition:

Misange

XLDnaute Barbatruc
Re : Vider presse papier excel 2003 a 2010, 32 et 64B

Bonsoir a tous et merci de votre aide.



Je les avez trouvées et tester, sauf la solution suivante :
Code:
'activer la reference Microsoft Forms 2.0 Object Library
Dim x As New DataObject
x.SetText ""
x.PutInClipboard

Car si j'utilise cette solution, les utilisateurs devront également activer "Microsoft Forms 2.0 Object Library" ?

Je veux que mon appui soit accessible et utilisable par des non initier a XL. Donc leur demander d'aller activer des trucs dans VBA, cela ne me plais pas trop.

Merci et a bientôt

Tu peux aussi dans ton code utiliser ceci
Ce lien n'existe plus
pour essayer d'activer cette référence si elle manque, sinon la décocher
 

YANN-56

XLDnaute Barbatruc
Re : Vider presse papier excel 2003 a 2010, 32 et 64B

Bonsoir à tous, ou Bonjour suivant l'heure,

Je suis tombé sur cette intéressante discussion,
car je cherchais à savoir comment vider un "Presse-papier".

A la lecture des "Clipboard j'te fais des trucs", des références à cocher,
des "PtrSafe selon 32 ou 64 bits"..... Et c.... J'ai tenté de faire simple!

Je me suis dit qu'en copiant du vide, cela serait peut-être plus facile!

Exemple:
Code:
ActiveSheet.Cells(1, 2).Copy
Sachant qu'elle est vide (Voire à choisir un autre endroit selon son propre cas)

Il est possible qu'il reste un résidu; mais j'ai testé avec une caisse de copie
et la grande quantité ne m'a jamais été signalée.

Peut-être ai-je dit une bêtise, mais cela fonctionne super bien chez moi.:)

Amicalement,

Yann
 
Dernière édition:

Statistiques des forums

Discussions
312 210
Messages
2 086 281
Membres
103 170
dernier inscrit
HASSEN@45