Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

exécuter une macro sur n fichiers (VBA)

6 réponses
Avatar
Bourby
bonjour,

pour effectuer un travail de consolidation, je suis amené à ouvrir des
classeurs en assez grand nombre:
- type 1: classeurs ayant tous la même constitution, seules les données
changent
- type 2: classeurs tous différents.

Quand je termine mon travail, je crée n classeurs qui sauvegardent les
données d'une feuille de chacun des fichiers de type 1 (optionnellement, en
répose à un message). Je sais le faire avec une macro dans chacun des
fichiers de type 1; mais il faut répondre n fois au message; alors que je
veux soit les sauvegarder tous, soit aucun. Comme je fais ce type de
traitement à longueur de temps, ça devient très long.

Comment faire pour qu'une seule réponse permette de déclencher les n
sauvegardes?

D'avance merci pour votre aide.

Bourby

6 réponses

Avatar
LSteph
Bonsoir Bourby,
'****
Sub registounon()
Dim wb
Dim test As String
test = MsgBox("Enregistrer les classeurs", vbYesNo)

For Each wb In Workbooks
If wb.Name <> "PERSO.XLS" Then
If test = 6 Then wb.Save
End If
Next
End Sub
'***

'lSteph
"Bourby" a écrit dans le message de news:
%23peD230%
bonjour,

pour effectuer un travail de consolidation, je suis amené à ouvrir des
classeurs en assez grand nombre:
- type 1: classeurs ayant tous la même constitution, seules les données
changent
- type 2: classeurs tous différents.

Quand je termine mon travail, je crée n classeurs qui sauvegardent les
données d'une feuille de chacun des fichiers de type 1 (optionnellement,
en
répose à un message). Je sais le faire avec une macro dans chacun des
fichiers de type 1; mais il faut répondre n fois au message; alors que je
veux soit les sauvegarder tous, soit aucun. Comme je fais ce type de
traitement à longueur de temps, ça devient très long.

Comment faire pour qu'une seule réponse permette de déclencher les n
sauvegardes?

D'avance merci pour votre aide.

Bourby




Avatar
Bourby
bonsoir et merci lStef,

(j'étais absent 2 jours)
mon problème est un peu plus compliqué: je ne veux enregistrer que les
fichiers "de type 1", pas les autres (cf mon 1er message).
Comment les reconnaître? Y-a-t-il une propriété qui pourrait servir à les
reconna^tre? Ou faut-il créer un nom "bidon" et le rechercher dans la liste
des noms (ça peut finir par prendre du temps....). J'imaginais mettre un
petit bout de code dans l'auto-open de chacun des fichiers de type 1, qui
enrichisse un tableau contenant les noms des fichiers de type 1 ouverts
(l'auto-close les supprimerait, évidemment). Mais je ne sais pas comment
accéder à un même tableau à partir de plusieurs classeurs; et en plus je ne
suis pas familier du tout de la syntaxe pour les tableaux. Ou alors mon
tableau pourrait être un nouveau classeur??

Peut-être mon problème est il plus clair avec ces nouvelles explications.
Comment faire pour traiter cette situation proprement?

D'avance merci.

Bourby



"LSteph" a écrit dans le message news:
OdIZGN1#
Bonsoir Bourby,
'****
Sub registounon()
Dim wb
Dim test As String
test = MsgBox("Enregistrer les classeurs", vbYesNo)

For Each wb In Workbooks
If wb.Name <> "PERSO.XLS" Then
If test = 6 Then wb.Save
End If
Next
End Sub
'***

'lSteph
"Bourby" a écrit dans le message de news:
%23peD230%
bonjour,

pour effectuer un travail de consolidation, je suis amené à ouvrir des
classeurs en assez grand nombre:
- type 1: classeurs ayant tous la même constitution, seules les données
changent
- type 2: classeurs tous différents.

Quand je termine mon travail, je crée n classeurs qui sauvegardent les
données d'une feuille de chacun des fichiers de type 1 (optionnellement,
en
répose à un message). Je sais le faire avec une macro dans chacun des
fichiers de type 1; mais il faut répondre n fois au message; alors que
je


veux soit les sauvegarder tous, soit aucun. Comme je fais ce type de
traitement à longueur de temps, ça devient très long.

Comment faire pour qu'une seule réponse permette de déclencher les n
sauvegardes?

D'avance merci pour votre aide.

Bourby








Avatar
LSteph
Bonsoir Bourby,
(j'étais absent 2 jours)
pas ni problème , moi aussi je viens quand je veux ou quand je peux.


mon problème est un peu plus compliqué: je ne veux enregistrer que les
fichiers "de type 1", pas les autres (cf mon 1er message).
J'ai pris justement le cas de PERSO.XLS dans l'exemple

comme ne devant pas être imprimé.
( ldésolé "de type 1" pas craiment une notion très définie dans excel).

Comment les reconnaître?


AMHA c'est là que tu interviens. Soit dans ta macro d'origine (que j'ignore)
tu t'es débrouillé
pour qu'il n'y en ait pas d'autres d'ouverts que ceux que tu souhaites, soit
tu trouves un moyen
de les identifier (selon la moindre quantité à traiter ceux voulus ou ceux à
exclure).
C'est juste une difficulté à contourner , "un nom bidon" comme tu y penses
n'est pas forcément
une mauvaise solution, un préfixe commun 888 par exemple pourrait le faire
.
...
If mid(wb.Name,1,3) = "888" Then
...
Sinon 'peut-être', j'ignore le reste de ce travail, mais plus globalement
comme autre
méthode envisageable tu pourrais consolider avec liaisons, cela t'éviterait
de tout refaire
à chaque fois (si ce sont touours les mêmes classeurs bien sûr).

Donc à suivre...

;-) A bientôt

lSteph





"Bourby" a écrit dans le message de news:
%2363JStM$
bonsoir et merci lStef,

(j'étais absent 2 jours)
mon problème est un peu plus compliqué: je ne veux enregistrer que les
fichiers "de type 1", pas les autres (cf mon 1er message).
Comment les reconnaître? Y-a-t-il une propriété qui pourrait servir à les
reconna^tre? Ou faut-il créer un nom "bidon" et le rechercher dans la
liste
des noms (ça peut finir par prendre du temps....). J'imaginais mettre un
petit bout de code dans l'auto-open de chacun des fichiers de type 1, qui
enrichisse un tableau contenant les noms des fichiers de type 1 ouverts
(l'auto-close les supprimerait, évidemment). Mais je ne sais pas comment
accéder à un même tableau à partir de plusieurs classeurs; et en plus je
ne
suis pas familier du tout de la syntaxe pour les tableaux. Ou alors mon
tableau pourrait être un nouveau classeur??

Peut-être mon problème est il plus clair avec ces nouvelles explications.
Comment faire pour traiter cette situation proprement?

D'avance merci.

Bourby



"LSteph" a écrit dans le message news:
OdIZGN1#
Bonsoir Bourby,
'****
Sub registounon()
Dim wb
Dim test As String
test = MsgBox("Enregistrer les classeurs", vbYesNo)

For Each wb In Workbooks
If wb.Name <> "PERSO.XLS" Then
If test = 6 Then wb.Save
End If
Next
End Sub
'***

'lSteph
"Bourby" a écrit dans le message de news:
%23peD230%
bonjour,

pour effectuer un travail de consolidation, je suis amené à ouvrir des
classeurs en assez grand nombre:
- type 1: classeurs ayant tous la même constitution, seules les données
changent
- type 2: classeurs tous différents.

Quand je termine mon travail, je crée n classeurs qui sauvegardent les
données d'une feuille de chacun des fichiers de type 1
(optionnellement,
en
répose à un message). Je sais le faire avec une macro dans chacun des
fichiers de type 1; mais il faut répondre n fois au message; alors que
je


veux soit les sauvegarder tous, soit aucun. Comme je fais ce type de
traitement à longueur de temps, ça devient très long.

Comment faire pour qu'une seule réponse permette de déclencher les n
sauvegardes?

D'avance merci pour votre aide.

Bourby












Avatar
Bourby
bonsoir et merci LSteph,

j'ai besoin d'une dizaine de fichiers, dont 3-4 à ne pas sauvegarder (que
j'ai baptisés type 2 dans mon post) et 5-6 à sauvegarder (type 1), qui
changent à chaque session; donc les liaisons ne me semblent pas adaptées.

Je crois que je vais créer un fichier Excel "toto" dans lequel je stockerai
le nom des Type1 ouverts; ensuite je mettrai dans le before_close de chaque
type1 un bout de code qui lancera une macro de sauvegarde stockée dans un
module de toto.xls. Ca me semble assez propre, et réutilisable dans d'autres
cas.... Il faudra sans doute tester Application.caller (ou un autre test?)
pour éviter que ça ne se morde la queue; là j'en reviens à la question de
départ:

"si j'ai n classeurs ouverts, comment partager une variable VBA entre les
modules de tous mes classeurs".

Si je me plante, je reviendrai au nom bidon....

Merci pour le dialogue, ça aide de ne pas tourner en rond tout seul...
Est-ce abuser de te demander si tu connais la réponse à la question entre
guillemets ci-dessus?

Cordialement

Bourby

"LSteph" a écrit dans le message news:
u51kHgO$
Bonsoir Bourby,
(j'étais absent 2 jours)
pas ni problème , moi aussi je viens quand je veux ou quand je peux.


mon problème est un peu plus compliqué: je ne veux enregistrer que les
fichiers "de type 1", pas les autres (cf mon 1er message).
J'ai pris justement le cas de PERSO.XLS dans l'exemple

comme ne devant pas être imprimé.
( ldésolé "de type 1" pas craiment une notion très définie dans excel).

Comment les reconnaître?


AMHA c'est là que tu interviens. Soit dans ta macro d'origine (que
j'ignore)

tu t'es débrouillé
pour qu'il n'y en ait pas d'autres d'ouverts que ceux que tu souhaites,
soit

tu trouves un moyen
de les identifier (selon la moindre quantité à traiter ceux voulus ou ceux
à

exclure).
C'est juste une difficulté à contourner , "un nom bidon" comme tu y penses
n'est pas forcément
une mauvaise solution, un préfixe commun 888 par exemple pourrait le
faire

.
...
If mid(wb.Name,1,3) = "888" Then
...
Sinon 'peut-être', j'ignore le reste de ce travail, mais plus globalement
comme autre
méthode envisageable tu pourrais consolider avec liaisons, cela
t'éviterait

de tout refaire
à chaque fois (si ce sont touours les mêmes classeurs bien sûr).

Donc à suivre...

;-) A bientôt

lSteph





"Bourby" a écrit dans le message de news:
%2363JStM$
bonsoir et merci lStef,

(j'étais absent 2 jours)
mon problème est un peu plus compliqué: je ne veux enregistrer que les
fichiers "de type 1", pas les autres (cf mon 1er message).
Comment les reconnaître? Y-a-t-il une propriété qui pourrait servir à
les


reconna^tre? Ou faut-il créer un nom "bidon" et le rechercher dans la
liste
des noms (ça peut finir par prendre du temps....). J'imaginais mettre un
petit bout de code dans l'auto-open de chacun des fichiers de type 1,
qui


enrichisse un tableau contenant les noms des fichiers de type 1 ouverts
(l'auto-close les supprimerait, évidemment). Mais je ne sais pas comment
accéder à un même tableau à partir de plusieurs classeurs; et en plus je
ne
suis pas familier du tout de la syntaxe pour les tableaux. Ou alors mon
tableau pourrait être un nouveau classeur??

Peut-être mon problème est il plus clair avec ces nouvelles
explications.


Comment faire pour traiter cette situation proprement?

D'avance merci.

Bourby



"LSteph" a écrit dans le message news:
OdIZGN1#
Bonsoir Bourby,
'****
Sub registounon()
Dim wb
Dim test As String
test = MsgBox("Enregistrer les classeurs", vbYesNo)

For Each wb In Workbooks
If wb.Name <> "PERSO.XLS" Then
If test = 6 Then wb.Save
End If
Next
End Sub
'***

'lSteph
"Bourby" a écrit dans le message de news:
%23peD230%
bonjour,

pour effectuer un travail de consolidation, je suis amené à ouvrir
des




classeurs en assez grand nombre:
- type 1: classeurs ayant tous la même constitution, seules les
données




changent
- type 2: classeurs tous différents.

Quand je termine mon travail, je crée n classeurs qui sauvegardent
les




données d'une feuille de chacun des fichiers de type 1
(optionnellement,
en
répose à un message). Je sais le faire avec une macro dans chacun des
fichiers de type 1; mais il faut répondre n fois au message; alors
que




je
veux soit les sauvegarder tous, soit aucun. Comme je fais ce type de
traitement à longueur de temps, ça devient très long.

Comment faire pour qu'une seule réponse permette de déclencher les n
sauvegardes?

D'avance merci pour votre aide.

Bourby
















Avatar
LSteph
Bonjour Bourby,

On peut tout à fait piloter plusieurs classeurs depuis un seul projet ou
mettre des macros à portée générale dans Perso.xls

Pour utiliser une variable depuis plusieurs modules tu dois la déclarer en
tête de Module (pas dans une Sub) et
ainsi:

Public mavar

'lSteph




"Bourby" a écrit dans le message de news:
%23csRi4a$
bonsoir et merci LSteph,

j'ai besoin d'une dizaine de fichiers, dont 3-4 à ne pas sauvegarder (que
j'ai baptisés type 2 dans mon post) et 5-6 à sauvegarder (type 1), qui
changent à chaque session; donc les liaisons ne me semblent pas adaptées.

Je crois que je vais créer un fichier Excel "toto" dans lequel je
stockerai
le nom des Type1 ouverts; ensuite je mettrai dans le before_close de
chaque
type1 un bout de code qui lancera une macro de sauvegarde stockée dans un
module de toto.xls. Ca me semble assez propre, et réutilisable dans
d'autres
cas.... Il faudra sans doute tester Application.caller (ou un autre test?)
pour éviter que ça ne se morde la queue; là j'en reviens à la question de
départ:

"si j'ai n classeurs ouverts, comment partager une variable VBA entre les
modules de tous mes classeurs".

Si je me plante, je reviendrai au nom bidon....

Merci pour le dialogue, ça aide de ne pas tourner en rond tout seul...
Est-ce abuser de te demander si tu connais la réponse à la question entre
guillemets ci-dessus?

Cordialement

Bourby

"LSteph" a écrit dans le message news:
u51kHgO$
Bonsoir Bourby,
(j'étais absent 2 jours)
pas ni problème , moi aussi je viens quand je veux ou quand je peux.


mon problème est un peu plus compliqué: je ne veux enregistrer que les
fichiers "de type 1", pas les autres (cf mon 1er message).
J'ai pris justement le cas de PERSO.XLS dans l'exemple

comme ne devant pas être imprimé.
( ldésolé "de type 1" pas craiment une notion très définie dans excel).

Comment les reconnaître?


AMHA c'est là que tu interviens. Soit dans ta macro d'origine (que
j'ignore)

tu t'es débrouillé
pour qu'il n'y en ait pas d'autres d'ouverts que ceux que tu souhaites,
soit

tu trouves un moyen
de les identifier (selon la moindre quantité à traiter ceux voulus ou
ceux
à

exclure).
C'est juste une difficulté à contourner , "un nom bidon" comme tu y
penses
n'est pas forcément
une mauvaise solution, un préfixe commun 888 par exemple pourrait le
faire

.
...
If mid(wb.Name,1,3) = "888" Then
...
Sinon 'peut-être', j'ignore le reste de ce travail, mais plus globalement
comme autre
méthode envisageable tu pourrais consolider avec liaisons, cela
t'éviterait

de tout refaire
à chaque fois (si ce sont touours les mêmes classeurs bien sûr).

Donc à suivre...

;-) A bientôt

lSteph





"Bourby" a écrit dans le message de news:
%2363JStM$
bonsoir et merci lStef,

(j'étais absent 2 jours)
mon problème est un peu plus compliqué: je ne veux enregistrer que les
fichiers "de type 1", pas les autres (cf mon 1er message).
Comment les reconnaître? Y-a-t-il une propriété qui pourrait servir à
les


reconna^tre? Ou faut-il créer un nom "bidon" et le rechercher dans la
liste
des noms (ça peut finir par prendre du temps....). J'imaginais mettre
un
petit bout de code dans l'auto-open de chacun des fichiers de type 1,
qui


enrichisse un tableau contenant les noms des fichiers de type 1 ouverts
(l'auto-close les supprimerait, évidemment). Mais je ne sais pas
comment
accéder à un même tableau à partir de plusieurs classeurs; et en plus
je
ne
suis pas familier du tout de la syntaxe pour les tableaux. Ou alors mon
tableau pourrait être un nouveau classeur??

Peut-être mon problème est il plus clair avec ces nouvelles
explications.


Comment faire pour traiter cette situation proprement?

D'avance merci.

Bourby



"LSteph" a écrit dans le message news:
OdIZGN1#
Bonsoir Bourby,
'****
Sub registounon()
Dim wb
Dim test As String
test = MsgBox("Enregistrer les classeurs", vbYesNo)

For Each wb In Workbooks
If wb.Name <> "PERSO.XLS" Then
If test = 6 Then wb.Save
End If
Next
End Sub
'***

'lSteph
"Bourby" a écrit dans le message de news:
%23peD230%
bonjour,

pour effectuer un travail de consolidation, je suis amené à ouvrir
des




classeurs en assez grand nombre:
- type 1: classeurs ayant tous la même constitution, seules les
données




changent
- type 2: classeurs tous différents.

Quand je termine mon travail, je crée n classeurs qui sauvegardent
les




données d'une feuille de chacun des fichiers de type 1
(optionnellement,
en
répose à un message). Je sais le faire avec une macro dans chacun
des
fichiers de type 1; mais il faut répondre n fois au message; alors
que




je
veux soit les sauvegarder tous, soit aucun. Comme je fais ce type de
traitement à longueur de temps, ça devient très long.

Comment faire pour qu'une seule réponse permette de déclencher les n
sauvegardes?

D'avance merci pour votre aide.

Bourby




















Avatar
Alain CROS
Bonjour.

Peut être avec les noms masqués, voir chez LL.

Dans le fichier Excel maitre, cette procédure, pour renseigner la variable.

Sub AjoutVal()
Dim LaVar$
LaVar = "MaValeur"
Application.ExecuteExcel4Macro ("SET.NAME(""LaVal"",""" & LaVar & """)")
End Sub

Dans les autres fichiers pour lire la variable.

Sub LireVal()
Dim ValNom$, I&
On Error Resume Next
ValNom = Application.ExecuteExcel4Macro("GET.NAME(""LaVal"")")
On Error GoTo 0
If ValNom <> vbNullString Then
I = Len(ValNom)
ValNom = Left$(Right$(ValNom, I - 2&), I - 3&)
MsgBox ValNom
End If
End Sub

Alain CROS


"si j'ai n classeurs ouverts, comment partager une variable VBA entre les
modules de tous mes classeurs".