Bonjour à tous,
Je suis un parfait ignorant en macro, et je vous remercie par avance pour votre aide.
J'ai construit une macro en procédant petit morceau par petit morceau, en "enregistrant les actions" sur excel.
l'idée de la macro :
- j'ai un fichier avec une page d'analyse et une page de données (matrice).
- dans la page d'analyse, la valeur entrée dans une cellule est utilisée pour un tas de formules pour faire tableaux et graphiques, en allant chercher la bonne ligne de données dans la feuille matrice.
-ce fichier fonctionne bien, mais reste dynamique (c'est même son intérêt). Pour le "publier", j'ai ensuite besoin d'un autre fichier avec cette page pour chaque élément d'une plage inséré dans ma fameuse case de saisie.
-ma macro procède donc aux actions suivantes :
- création d'une nouvelle feuille
- création d'un nouveau classeur
- définition de la plage à utiliser
- début de la boucle
- copie de la première cellule de la plage puis coller dans la "cellule de saisie"
- copie des données dans la nouvelle feuille, puis sélectionner tout, copier, coller spécial (valeurs uniquement)
- copie de cette feuille dans le nouveau classeur (puis renommage selon le nom de la cellule copiée au début, stocké dans une variable.
- fermeture du nouveau classeur avec enregistrement, puis réouverture (conseillé par l'aide de microsoft face à mon bug)
- descendre d'une cellule dans la plage
- retour au début de la boucle
- tout ceci fait intervenir pas mal de "select" et "activate". J'ai lu que ça n'était pas conseillé, mais je ne sais pas faire autrement. J'ai inclu des codes trouvés sur les forums pour ne pas actualiser l'écran pendant la macro, et ne pas recalculer pendant la copie de feuille.
==> bref, tout fonctionne. J'ai vérifié en pas à pas, puis en insérant des msgbox, et ça marche. Mais à chaque itération, ça prend deux fois plus de temps qu'à la précédente. Au bout de quelques-unes (5,6 ou 7 en gros), Excel plante.
J'ai essayé en redémarrant le pc, comme indiqué sur les forums. Ca ne fonctionne pas.
Je pense qu'il doit y avoir un moyen d'effacer la mémoire à la fin de chaque boucle. Comment faire ?
Merci d'avance.
François
Partager