Différence entre : "Application.CutCopyMode = False" et "Clipboard.Clear"

Yunchi

XLDnaute Nouveau
Voilà tout est dans le titre, est-ce que quelqu'un pourrait m'expliquer la différence entre : "Application.CutCopyMode = False" et "Clipboard.Clear" svp ?

en fait, j'ai une macro sous excel qui copie colle des infos depuis un classeur dans un autre et comme il y'a beaucoup de données, j'ai une erreur de mémoire (quelquechose comme "dépassement de capacité") et je pense que c'est lié au presse papier qui est rempli ....

J'ai vu qu'avec "Application.CutCopyMode = False" lorsque ça ferme un fichier excel, je n'ai plus l'erreur comme quoi il reste des données dans le presse papier mais est-ce que ça désactive juste les warnings ou est-ce que ça vide le presse papier ? et donc est-ce que Clipboard.Clear vide justement le presse papier ?
 

JNP

XLDnaute Barbatruc
Re : Différence entre : "Application.CutCopyMode = False" et "Clipboard.Clear"

Bonjour Yunchi :),
Application.CutCopyMode = False correspond au copier/couper un peu particulier d'Excel caractérisé par des pointillés clignotant qui correspond à la zone qu'Excel est prêt à traiter qui est annulée par Echap.
Clipboard.Clear est (en tout cas chez moi) une expression non reconnue par VBA (débogage direct).
A priori (mais je peux me tromper), seul Word utilise un presse papier multiple, donc le simple fait de coller de nouvelles données efface les anciennes et donc, le presse papier ne peux pas être plein...
Si donc, ton copier/coller remplit le presse papier (ce dont je doute, sauf si ta mémoire vive est vraiment très petite), c'est que ce serait la sélection qui serait trop importante.
Si tu n'as pas besoin des formats copiés, le plus simple serait peut-être de remplir tes cellules une par une...
Bon courage :cool:
 

PMO2

XLDnaute Accro
Re : Différence entre : "Application.CutCopyMode = False" et "Clipboard.Clear"

Bonjour,

Il faut distinguer 2 presse-papiers :
1) celui de Windows clipbrd.exe (qui se trouve, chez moi, dans C:\WINDOWS\system32\clipbrd.exe)
On peut l'ouvrir et voir ce qu'il contient. J'ai fait un raccourci sur le bureau en allant le chercher au chemin susnommé.
2) celui d'Office (dans Excel faire menu Edition/Presse-papiers Office… pour l'afficher)

Pour effacer le contenu des presse-papiers dans un programme VBA

1) presse-papiers Windows
Code:
Sub ClearWindowsClipboard()
[a1].Copy   'pseudo copie - écrasement du contenu du presse-papiers
Application.CutCopyMode = False
End Sub
2) presse-papiers Office (beaucoup plus compliqué)
Code:
'/// API ///
Private Declare Function FindWindowEx& Lib "user32.dll" _
  Alias "FindWindowExA" (ByVal hWnd1 As Long, _
  ByVal hWnd2 As Long, ByVal lpsz1 As String, _
  ByVal lpsz2 As String)
Private Declare Function PostMessage& Lib "user32.dll" _
  Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
  ByVal wParam As Long, ByVal lParam As Long)
'/// Messages Window ///
Const WM_LBUTTONDOWN As Long = &H201&
Const WM_LBUTTONUP As Long = &H202&

Sub ClearOfficeClipboard()
Dim CB As CommandBar
Dim Etat As Boolean
Dim hExcel2&
Dim hWindow&
Dim hParent&
Dim hClip&
Dim coord&
On Error GoTo Erreur
Application.ScreenUpdating = False
Set CB = Application.CommandBars("Task Pane")
With CB
  .Position = msoBarRight
  Etat = .Visible
End With
  If Not Etat Then Application.CommandBars(1).Controls(2).Controls(5).Execute
  hExcel2 = FindWindowEx(Application.hWnd, hExcel2, "EXCEL2", vbNullString)
  If hExcel2 = 0 Then Exit Sub
  hWindow = FindWindowEx(hExcel2, hWindow, "MsoCommandBar", CB.NameLocal)
  If hWindow Then
    hParent = hWindow
    hWindow = 0
    hWindow = FindWindowEx(hParent, hWindow, "MsoWorkPane", vbNullString)
    If hWindow Then
      hParent = hWindow
      hWindow = 0
      hClip = FindWindowEx(hParent, hWindow, "bosa_sdm_XL9", vbNullString)
    End If
  End If
If hClip > 0 Then
  coord& = 25 * 65536 + 125
  Call PostMessage(hClip, WM_LBUTTONDOWN, 0&, coord&)
  Call PostMessage(hClip, WM_LBUTTONUP, 0&, coord&)
End If
If Not Etat Then CB.Visible = False
Erreur:
Application.ScreenUpdating = True
End Sub

Faites des essais avec ces 2 codes.

Cordialement.

PMO
Patrick Morange
 

Yunchi

XLDnaute Nouveau
Re : Différence entre : "Application.CutCopyMode = False" et "Clipboard.Clear"

Bonjour,

Merci pour vos réponses.

Je pense que le problème vient du buffer office car il y'a un problème de dépassement de capacité lorsqu'environ 65 500 lignes ont été copié .....
 

Yunchi

XLDnaute Nouveau
Re : Différence entre : "Application.CutCopyMode = False" et "Clipboard.Clear"

PMO2, j'ai essayé de mettre ton code dans un module et ensuite j'essaye d'appeler la fonction mais je n'y arrive pas ...

ça ne marche ni avec :

ClearOfficeClipboard()

ni avec

var = ClearOfficeClipboard()

pourrais-tu m'expliquer comment appeler ta fonction stp ?
 

PMO2

XLDnaute Accro
Re : Différence entre : "Application.CutCopyMode = False" et "Clipboard.Clear"

Bonjour,

Ce n'est pas une fonction mais une Sub qui ne renvoit pas de valeur retour et
ne demande pas le passage de paramètres étant donné qu'elle n'a aucun argument.

Il suffit de l'appeler comme suit :

Sub aa()
Call ClearOfficeClipboard
End Sub

Cordialement.

PMO
Patrick Morange
 

JNP

XLDnaute Barbatruc
Re : Différence entre : "Application.CutCopyMode = False" et "Clipboard.Clear"

Bonsoir le forum :)
Je pense que le problème vient du buffer office car il y'a un problème de dépassement de capacité lorsqu'environ 65 500 lignes ont été copié .....
Euh, je voudrais pas jouer les rabat joie, mais à moins de passer sous 2007, le nombre de ligne maximum d'Excel est 65536...
CQFD :D
Bonne soirée :cool:
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 132
Membres
103 127
dernier inscrit
willwebdesign