Macro compl. part en boucle

  • Initiateur de la discussion chris
  • Date de début
C

chris

Guest
D'abord bonjours à tous et merci les aides déjà fournies,


Dans un poste précédent (que je retrouve d'ailleurs déjà plus), j'ai récupéré une macro complementaire permettant de lancer une action à l'ouverture de n'importe quel classeur.

J'ai adapté cette macro afin que lorsqu'un classeur dont le nom commence par :

"PROG_DE_MARCHE_... + quelque chose"
ou par
"PROG_APPEL_... + quelque chose"

est ouvert, il ouvre automatiquement un second classeur nommé "PROGRAMME DE CHARGE CEH.xls"


Donc cette macro complémentaire fait deux test :

- si nom du fichier ouvert = "PROG_DE_MARCHE_..." alors ouvre "PROGRAMME DE CHARGE CEH.xls"

- si nom du fichier ouvert = "PROG_APPEL_..." alors ouvre aussi "PROGRAMME DE CHARGE CEH.xls"


Mais il semble que si un fichier dont le nom commence par l'un ou par l'autre il effectue tout de même la seconde condition.

Par contre si un autre fichier est ouvert portant un nom X, il ne se passe rien, ce qui est correct.

En plus de ça ma procédure semble trop lourde, car elle semble ralentir toute ouverture de classeur...

Au fait, cherchez pas à comprendre l'utilité d'une telle macro, c'est pour mon boulot ! On travaille sur un réseau gigantesque avec des dizaines de sessions, donc il faut des fois des trucs qui peuvent sembler bizarres...

Help
 

Pièces jointes

  • Macro_Compl007.zip
    9.9 KB · Affichages: 15
  • Macro_Compl007.zip
    9.9 KB · Affichages: 14
  • Macro_Compl007.zip
    9.9 KB · Affichages: 17
L

LaurentTBT

Guest
Bonjour, Chris, bonjour à tous,

Je n'y connais pas grand-chose dans les modules de classe, mais pourquoi ne mets-tu pas directement ta procédure qui teste les noms de fichiers dans la procédure événementielle "Workbook_Open()"? Ce serait peut-être plus simple, même si je ne sais pas si cela résoudra ton problème.
Ensuite, pour ne pas que ta macro événementielle ne se relance à l'ouverture du deuxième fichier, tu peux rajouter avant l'ouverture ceci:
Application.EnableEvents = False
Et surtout, il faut penser à remettre après l'ouverture de ton fichier:
Application.EnableEvents =true
Je sais que certains n'aiment pas utiliser EnableEvents, mais c'est bien pratique: quand c'est à false, cela empêche les macros événementielles de se déclencher.

Bonne journée.
 
T

Ti

Guest
j'ai regardé hier ton fichier. Je ne comprends pas pourquoi chaque fois qu'un nouveau fichier est ouvert, tu testes tous les fichiers déjà ouverts pour voir si l'un deux correspond à tes critères, alors que théoriquement cela doit avoir déjà été fait lors de leur ouverture. Il me semble que tu ne devrais tester que le fichier en train d'être ouvert, ce qui accélérerait le mouvement (à moins que j'ai mal compris tes intentions)

Si tel est le cas, remplace le :
For Each classeur In Workbooks
Next
par

With Wb
End with
 
C

Chris

Guest
LaurentTBT, je suis obligé de proceder de cette manière car cette macro doit se lancer toute seule, sans avoir à ouvrir un classeur au préalable.

Sinon, Ti, j'ai testé ta méthode car elle me semble bonne, mais j'utilise la variable "classeur" qui est le nom des classeurs ouverts.

Si je met "With Workbooks" et "end with", ma variable "classeur" n'est plus définie, et je sais pas comment le faire....

help !
 
T

Ti

Guest
euh, je t'ai dit une bêtise, j'avais oublié que tu placais ton code dans un workbook_open, donc c'est encore plus simple, tu n'as pas besoin de la variable Classeur, tu la remplace par Wb, qui est donnée en paramètre d'entrée de la procédure. Ainsi c'est plus simple, ta variable Wb est déjà initialisée.
 

Discussions similaires

Réponses
2
Affichages
281
Réponses
6
Affichages
304

Statistiques des forums

Discussions
312 185
Messages
2 086 020
Membres
103 097
dernier inscrit
Benduch