Mémoire tampon en Excel

Signaler
Messages postés
8
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
20 février 2008
-
Messages postés
4
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
20 février 2012
-
Bonjour à tous,

Voilà je débute en programmation VB depuis que je suis engagé et...dur, dur! En gros j'ai du faire une macro qui permet de récupérer des données dans plein de fichiers pour tout rassembler en un seul. Le seul problème persistant est qu'il me demande, après chaque copier-coller dans le fichier "central", s'il doit conserver ce qu'il a dans la mémoire tampon! Evidemment il ne doit pas le conserver, mais quand j'exécute la macro il me le demande à de nombreuses reprises. Existe-t-il une commande permettant de vider la mémoire tampon entre chaque "exécution" (copier-coller d'un fichier vers le fichier central, chose que je n'ai pu automatiser dans une boucle étant donné la complexité des noms de fichiers. Dans un seul Sub, je fais donc le même bloc de commande pour chaque fichier, ce qui est assez lourd mais je ne crois pas qu'il y ait d'autre solution).

Donc si quelqu'un à une idée pour vider automatiquement cette mémoire tampon, ça serait très sympa!

Merci à tous!!!

9 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Salut
Catégorie de la question passée sous VBA (à noter pour tes prochaines questions)

As-tu essayé d'enregistrer une macro en faisant les manips à la main pour voir (*) s'il ajoute un paramètre à l'instruction permettant de prendre en compte ce choix ?
(*) voir dans Outils, Macro, Editeur Visual Basic

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
8
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
20 février 2008

Désolé mais... je ne comprends pas bien le sens de ta question :$! J'ai tout fait "à la main" à partir de Visual Basic Editor, mais je ne sais pas comment lui dire qu'il doit vider la mémoire tampon après chaque "instruction". Je m'explique : dans mon Sub j'ai plusieurs blocs du genre :


" Ouvrir tel fichier


Copier ce qu'il y a dedans


Le coller dans mon fichier central


Refermer le fichier (pas le central)"


Et il me demande à chaque fois s'il doit conserver ce qu'il a en mémoire (beaucoup de données) pour une autre application. La réponse est "non", et j'aimerais savoir s'il y a une ligne de code permettant de vider la mémoire entre chaque bloc.

Désolé si ma question est idiote, je débute vraiment :-(.

En tous cas merci à toi!
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
 Bonjour,

.DisplayAlerts = False devrait suffire.

jean-marc
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Salut
Oui, teste .DisplayAlarts, cela peut fonctionner

Sinon, je n'ai pas été suffisamment précis :
- Tu ouvres tes feuilles et tu commences l'enregistrement d'une macro : menu "Outils", "Macro", "Nouvelle macro ..."
- Une mini-fenêtre apparait avec le symbole carré pour stopper la macro tout à l'heure.
- Ensuite, tu fais à la main ton copier coller pendant lequel il va forcément te demander quoi faire du buffer : Tu lui répond.
- Ensuite, tu stoppe l'enregistrement de la macro avec le petit bouton carré.
- Tu vas ensuite dans le menu "Outils", "Macro", "Macros ..." et tu recherches la macro que tu viens de créer.
- Dedans il y aura la syntaxe de tout ce que tu viens de faire.
- Analyse ces quelques lignes pour voir si l'une d'elles (ou le paramètre optionnel d'une commande Copier) parle de buffer, du style
   ExcelBuffer =: Empty ou
   Clipboard.Clear

Voilà : Normalement tu as la ligne de code que tu cherches

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Tu peux aussi utiliser
Application.CutCopyPaste = False

Ça enlève la surbrillance du copier/coller et ça devrait, par le fait même, éliminer le message.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Oups...
CutCopyMode et non pas <strike>CutCopyPaste</strike>

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
8
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
20 février 2008

Malheureusement aucune de ces solutions ne fonctionne :-(! Je ne comprends pas trop pourquoi. Voici le détail :

- l'enregistrement auto de la macro me met juste l'ouverture de l'autre macro, rien concernant le buffer

- pour le .DisplayAlerts = false, il ne modifie rien du tout


- Application.CutCopyMode = false non plus :-(...


 


Je ne comprends pas trop! J'ai essayé en déclarant ces "messages/fonctions" en dehors et dans le Sub de ma fonction, mais rien n'y fait!


Un grand merci pour vos réponses, et si jamais quelqu'un a une autre idée...
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Pour avoir une meilleure idée et pouvoir t'aider efficacement, il faudrait voir comment ton code est monté. Du moins pour la partie Copier/Coller.
Et un peu plus d'explications sur ce fichier central et les autres...

À partir de quel fichier la macro est-elle appelée ?
Est-ce qu'il n'y aurait pas moyen de lire les fichiers à copier même s'ils ont des noms complexes ? Est-ce qu'il n'y a que des fichiers à copier dans ce répertoire ou y a-t-il plusieurs autres fichiers à ne pas toucher ?
... etc...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
4
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
20 février 2012

Essaye :

ActiveSheet.DisplayPageBreaks = False

(a mettre pour le ou les onglets impactés par les calculs, mise en page,etc...)

Cela permet de ne pas ralentir la macro apres plusieurs exécutions (moi cela marche notamment quand je masque et affiche beaucoup de lignes, quand je supprime des lignes, quand je met en page l'impression...)

Pagra