Elect67
Messages postés7Date d'inscriptionmardi 25 mai 2010StatutMembreDernière intervention29 juin 2010
-
1 juin 2010 à 17:43
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
2 juin 2010 à 14:53
Bonsoir à tous et toutes!
Voilà mon problème, j'ai une macro Excel qui fonctionne avec un compteur. Mon problème c'est que j'utilise le copier/coller donc au bout d'un moment (environs 2500 cellules) il me bloque ma macro. Donc, je doit vidanger le Presse Papier. Je fais (enfin j'aimerais faire) cette vidange tous les 100 lignes.
For i = 2 To X
Debut:
If i = X Then GoTo Fin
Workbooks("OT_BO.xls").Worksheets("Feuil1").Activate
OT = Range("B" + CStr(i)).Value
Application.WindowState = xlNormal
Application.Wait (Now + TimeValue("00:00:05"))
SendKeys "%dr", True
Application.Wait (Now + TimeValue("00:00:02"))
'OT à chercher
SendKeys "{TAB 5}", True
SendKeys OT + Chr(13), True
Application.Wait (Now + TimeValue("00:00:05"))
'Raccourci Copier
SendKeys "%ei", True
Workbooks("OT_BO.xls").Worksheets("Feuil2").Activate
Range("A" + CStr(i)).Select
'Raccourci Coller
ActiveSheet.Paste
If i 100 Or i 200 Or i = 300 Or i = 400 Or i = 500 Or i = 600 Then Run "VidePP" 'LE PB EST ICI
Next i
If i <= X Then GoTo Debut
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 2 juin 2010 à 14:53
Salut
Pas sûr que cette purge soit nécessaire et salvatrice ...
La gestion du ClipBoard sous VBA est un peu complexe : il faut se baser sur les APIs :
Dans la partie déclaration de ta page de code :
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Pour ton programme :
- il ne faut jamais faire de Goto vers l'intérieur d'un boucle (For ou Do), sinon, c'est l'erreur assurée quand le programme rencontrera le Next ou le Loop final
Dans ton cas, le dernier If ne sera jamais vrai puisque, en sortie d'un For-Next, la variable = la limite haute du For + 1
- Le If à rallonge 100 Or 200 ... peut être raccourci en :
If i Mod 100 = 0 Then
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)