Code pour vider le presse-papier

re

Comment voyez vous que le presse papier reste plein?

Mon test à l'instant:

Copie d'une zone excel,

Ouverture de Word

Collage dans Word de cette zone

Lancement de la macro

essai de nouveau collage dans Word et la je n'ai plus rien à coller!!!

Sub videpressepapier()
 Application.CommandBars("Clipboard").Visible = True
 On Error Resume Next
   Application.CommandBars("Clipboard").Controls(4).Execute
 On Error GoTo 0
 Application.CommandBars("Clipboard").Visible = False
End Sub

Sub EmptyExcelClipBoard()
    Range("IV65536").Copy
End Sub
Sub vide_ppapier()
On Error Resume Next
Application.CommandBars("clipboard").Controls(4).Execute
End Sub
'Necessite Référende à Microsoft Forms 2.0 Library
Sub EmptyWindowsClipBoard1()
Dim MyData As Object
Set MyData = New DataObject

    With MyData
        .SetText ""
        .PutInClipboard
    End With
End Sub
'Necessite Référende à Microsoft Forms 2.0 Library
Sub EmptyWindowsClipBoard2()
    With New DataObject
        .SetText ""
        .PutInClipboard
    End With
End Sub

voici tous les codes trouver sur le net

Certes, le collage ne fonctionne plus, mais si tu fais:

Affichage/volet office/presse papiers, tu t'aperçois qu'il reste plein et qu'il faut le vider manuellement...

En tout cas, chez moi...

A vous lire,

Souri84

re,

Je confirme, avec 2000 çà marche.

Question bête :

maguetlolo, felix et souri84, avez-vous dans le menu "barres d'outil" la barre "presse papier" ?

car c'est ce que fait le code à CB60, il ouvre la barre, vide et ferme la barre.

à suivre...

amicalement

Claude.

re,

Je reviens avec ce que j'avais mis dans mon post de ce matin et qui semble fonctionner sous excel 2000.

Un code trouvé sur un site ami :

Sub ClearClipboard()
Dim oDataObject As DataObject
Set oDataObject = New DataObject
oDataObject.SetText ""
oDataObject.PutInClipboard
Set oDataObject = Nothing
End Sub

Sous VBA, Outils / Reference il faut veiller à activer l'option Microsoft forms2 object library

A te relire

Dan

Re-,

désolé, mais aucun de ces codes ne fonctionne sous 2003 ou 2007

En 2003 et 2007, on n'utilise pas le presse-papier d'excel (clipboard), mais le volet Office (Task Pane), et il n'existe qu'un seul contrôle visible par VBA dans cette CommandBar, c'est le bandeau déroulant:

Les deux boutons ("Coller Tout", et "Effacer Tout") ne sont pas interceptée par VBA

Un clic droit sur l'icône "Volet Office", dans la barre des tâches donne le code :

Application.CutCopyMode = False

mais bien sûr, cela ne fonctionne pas, lorsque l'on le rejoue

Donc, seule solution, pour ma part, et ayant fait pas mal de recherche, "à la main"

Bonjour

je confirme, j'i mis le presse-papier dans la barre d'outils mais ca ne marche toujour pas

Bonjour à tous,

maguetlolo, s'il te plait, dans tes messages, précise à qui ils s'adressent,

nous sommes plusieurs sur ce fil !

Pour ma part le code de CB60 fonctionne parfaitement sur excel2000

D'ailleurs j'ai créer un bouton dans ma barre d'outil habituelle.

Sub vide()
    Application.CommandBars("Clipboard").Visible = True
        On Error Resume Next
            Application.CommandBars("Clipboard").Controls(4).Execute
                On Error GoTo 0
                    Application.CommandBars("Clipboard").Visible = False
    ThisWorkbook.Close False
End Sub

Je me pose la question :

que se passe t-il quand il y a une copie dans une boucle assez longue ?

et 2ème question, pour ceux avec qui çà marche pas, s'ils ont une version complète ou

une version + ou - gratuite limitée ?

Je reste sur ma faim, sur ce fil !!

amicalement

Claude.

dubois a écrit :

Bonjour à tous,

maguetlolo, s'il te plait, dans tes messages, précise à qui ils s'adressent,

nous sommes plusieurs sur ce fil !

Pour ma part le code de CB60 fonctionne parfaitement sur excel2000

D'ailleurs j'ai créer un bouton dans ma barre d'outil habituelle.

Sub vide()
    Application.CommandBars("Clipboard").Visible = True
        On Error Resume Next
            Application.CommandBars("Clipboard").Controls(4).Execute
                On Error GoTo 0
                    Application.CommandBars("Clipboard").Visible = False
    ThisWorkbook.Close False
End Sub

Je me pose la question :

que se passe t-il quand il y a une copie dans une boucle assez longue ?

et 2ème question, pour ceux avec qui çà marche pas, s'ils ont une version complète ou

une version + ou - gratuite limitée ?

Je reste sur ma faim, sur ce fil !!

amicalement

Claude.

Bonjour,

j'ai une version complete d'office 2003

et quand j'ai une boucle assez longue et bien plus ca copie et plus ca rame, ca rame, ca rame........

Oula, petit probleme, j'ai mis ta macro dans un classeur, et bien ca me ferme mon classeur et le presse-papier reste plein, il y a comme un soucis non?

Salut maguet... maguette qui veut dire chêvre en patois deuchnord de la France....

felix a écrit :

En 2003 et 2007, on n'utilise pas le presse-papier d'excel (clipboard), mais le volet Office (Task Pane), et il n'existe qu'un seul contrôle visible par VBA dans cette CommandBar, c'est le bandeau déroulant:

Peut être est-ce la raison pour laquelle ton classeur se ferme.... En effet, Claude utilise le clipboard et non le task pane...

Enfin c juste une suggestion.... je n'ai pas testé....

Souri84

Edit2: en fait non, je trouvais cela logique quand je l'ai écrit mais en fait pas du tout.... désolé pour le post inutile...

Bonjour,

Claude :

et 2ème question, pour ceux avec qui çà marche pas, s'ils ont une version complète ou

une version + ou - gratuite limitée ?

Possédant les deux versions (Office 2003 Pro et Office 2007 Famille et Etudiant), et ayant eu toutes les versions depuis Excel4, le problème ne provient pas de la limitation, ni autre, mais bien de ce que j'ai marqué plus haut....

maguetlolo :

en fin du code de claude, tu as :

ThisWorkbook.Close False

qui ferme le classeur sans enregistrer les changements, tu peux la supprimer, mais le résultat sera le même, le presse-papier "Office" ne se videra pas

Bonne soirée

souri84 a écrit :

Salut maguet... maguette qui veut dire chêvre en patois deuchnord de la France....

felix a écrit :

En 2003 et 2007, on n'utilise pas le presse-papier d'excel (clipboard), mais le volet Office (Task Pane), et il n'existe qu'un seul contrôle visible par VBA dans cette CommandBar, c'est le bandeau déroulant:

Peut être est-ce la raison pour laquelle ton classeur se ferme.... En effet, Claude utilise le clipboard et non le task pane...

Enfin c juste une suggestion.... je n'ai pas testé....

Souri84

Edit2: en fait non, je trouvais cela logique quand je l'ai écrit mais en fait pas du tout.... désolé pour le post inutile...

Bonjour

oui, peut-etre as tu raison , donc que faut'il faire pour que ca fonctionne?

re,

felix,

Je ne veux pas polémiquer, mais comment explique-tu que çà marche sur ma version 2000 ?

A moins que sur les versions + récentes, il y a une mémoire "tampon", qui ne conserverait

qu'une certaine quantité en volume , et viderait l'excédent au fur à mesure ?

Sinon c'est une régression de Microsoft !

Ton avis sur les copie dans boucles répétitives ?

à+.......Claude.

Re-,

je ne veux pas polémiquer, mais seulement, avec certaines versions, ces codes fonctionnent, avec d'autres, non

Avant 2003, le presse papier ne comprenait qu'une donnée, en mémoire, depuis, on peut en mettre 24, et coller celle qu'on veut, à tout moment.

La commande "Démarrer/Exécuter : clipbrd", qui te permet d'ouvrir le gestionnaire de l'album, et de vider le presse papier par "Edition/Supprimer", te permet effectivement de vider le dernier élément, et le seul, contenu dans le "ClipBoard"

Seulement, depuis 2003, ce n'est plus "ClipBoard"

une image :

pp

Re-,

et en complément, les astuces de Micro Application

http://www.microapp.com/astuce_199_office_xp_2003_2007_utilisation_du_presse_papier_office.html

surtout la dernière phrase, sous le rectangle vert :

Il reste à préciser une dernière chose : la mémoire du Presse-Papier Office est volatile. Le presse-papier se videra à la fermeture de toutes les applications Office ou bien à l'extinction de l'ordinateur.

Cela fait un moment que je cherche à le vider, et comme tu le dis, les boucles, avec copie, posent parfois des problèmes, qui font souvent l'objet de questions, car une recopie d'onglets, bien que le code soit exact, peut poser des problèmes, à cause de ce "Bug ????"

re,

merci felix pour tes explications,

Tu vois, avant ce fil, je n'y avait jamais prêté attention !

Voici le message qu'on a sur Office2000

https://www.excel-pratique.com/~files/doc/jHxCVClass.xls

Microsoft se fout de nous !!

Moi, j'ai commencé avec l'ancêtre d'Excel : "MULTIPLAN" et toutes les version jusqu'à 2000.

Ceci dit, le problème n'est pas réglé pour tout le monde.

amicalement

Claude.

Bonsoir à tous

Merci Claude et Felix pour les échanges, cela nous permet tout de meme d'avancer, après plusieurs recherches, il semblerait que nous pourrions les gerer avec un api et win 32, mais je ne trouve pas sur des sites en Français.

http://www.gladir.com/CODER/CWINDOWS/apiwinprototypes.htm

Bonjour,

désolé de revenir dessus, mais en fait je n'ai pas eu , ou pas compris la réponse a ma question, la discussion est d'un niveau trop haut pour moi,

c'est possible ou pas et si oui, comment?

Salut le forum

Une Api peut-être

Private Const CF_TEXT = 1
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Long, ByVal ByteLen As Long)
Private Sub Form_Load()
    'KPD-Team 2001
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim hStrPtr As Long, lLength As Long, sBuffer As String
    OpenClipboard Me.hwnd
    hStrPtr = GetClipboardData(CF_TEXT)
    If hStrPtr <> 0 Then
        lLength = lstrlen(hStrPtr)
        If lLength > 0 Then
            sBuffer = Space$(lLength)
            CopyMemory ByVal sBuffer, ByVal hStrPtr, lLength
            MsgBox sBuffer, vbInformation
        End If
    End If
    CloseClipboard
End Sub

Mytå

bonjour,

je voudrais l'essayer, mais comment ca marche les "api"?

que faut il que j'en fasse?

a+

Rechercher des sujets similaires à "code vider presse papier"