Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent d'ouvrir des
fichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier Agence Ceres 2001
2002.xls. La première macro lancée à partir de menu.xls copie le nom d'une
ville du classeur BudgetMatrice.xls vers le classeur Agence Ceres 2001
2002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro Coller_nom_ville_Ceres()
ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec le fichier
BudgetSt Tropez nouvellement créé. Pas évident à expliquer !!! Pouvez-vous
m'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent d'ouvrir des
fichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier Agence Ceres 2001
2002.xls. La première macro lancée à partir de menu.xls copie le nom d'une
ville du classeur BudgetMatrice.xls vers le classeur Agence Ceres 2001
2002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro Coller_nom_ville_Ceres()
ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec le fichier
BudgetSt Tropez nouvellement créé. Pas évident à expliquer !!! Pouvez-vous
m'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent d'ouvrir des
fichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier Agence Ceres 2001
2002.xls. La première macro lancée à partir de menu.xls copie le nom d'une
ville du classeur BudgetMatrice.xls vers le classeur Agence Ceres 2001
2002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro Coller_nom_ville_Ceres()
ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec le fichier
BudgetSt Tropez nouvellement créé. Pas évident à expliquer !!! Pouvez-vous
m'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie la
feuille
matrice du fichier Agence Ceres 2001 2001.xls dans ce même classeur. La
macro qui enregistre BudgetMatrice.xls sous, ex BudgetSt Tropez.xls est
dans
le fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder une
trace du
nouveau nom du fichier. Le classeur "menu gammvert.xls", étant toujours
ouvert,
si je suis bien, le nom après l'enregistrement pourrait peut-être être
stocké
dans une cellule de ce classeur avant d'être récupéré dans, par exemple,
la
variable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre celle
nommée coller_nom_ville_Ceres() ne fonctionne qu'avec le classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle fait
toujours
référence aux données du classeur BudgetMatrice.xls et ouvre en même
temps
le fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une variable
dans
cette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit dans le
message
de news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui enregistre le
classeurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui, dans
cette
macro,tu pourrais renseigner une variable globale (déclarée Public par
exemple
en têtedu module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait permettre de
passer
enargument (optionnel) à ta procédure coller_nom_ville_Ceres le nom du
classeur àtraiter (BudgetMatrice.xls par défaut sinon, pour reprendre ton
exemple,
BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
NomClasseurEnd Sub
'============================= > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent
d'ouvrir
desfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier Agence
Ceres
20012002.xls. La première macro lancée à partir de menu.xls copie le nom
d'uneville du classeur BudgetMatrice.xls vers le classeur Agence Ceres
2001
2002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec le
fichierBudgetSt Tropez nouvellement créé. Pas évident à expliquer !!!
Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie la
feuille
matrice du fichier Agence Ceres 2001 2001.xls dans ce même classeur. La
macro qui enregistre BudgetMatrice.xls sous, ex BudgetSt Tropez.xls est
dans
le fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder une
trace du
nouveau nom du fichier. Le classeur "menu gammvert.xls", étant toujours
ouvert,
si je suis bien, le nom après l'enregistrement pourrait peut-être être
stocké
dans une cellule de ce classeur avant d'être récupéré dans, par exemple,
la
variable NomClasseur suggérée.
La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre celle
nommée coller_nom_ville_Ceres() ne fonctionne qu'avec le classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle fait
toujours
référence aux données du classeur BudgetMatrice.xls et ouvre en même
temps
le fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une variable
dans
cette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le
message
de news: 3F312CA7.2442D56D@wanadoo.fr...
Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui enregistre le
classeur
BudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui, dans
cette
macro,
tu pourrais renseigner une variable globale (déclarée Public par
exemple
en tête
du module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait permettre de
passer
en
argument (optionnel) à ta procédure coller_nom_ville_Ceres le nom du
classeur à
traiter (BudgetMatrice.xls par défaut sinon, pour reprendre ton
exemple,
BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
NomClasseur
End Sub
'============================= > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent
d'ouvrir
des
fichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier Agence
Ceres
2001
2002.xls. La première macro lancée à partir de menu.xls copie le nom
d'une
ville du classeur BudgetMatrice.xls vers le classeur Agence Ceres
2001
2002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()
ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec le
fichier
BudgetSt Tropez nouvellement créé. Pas évident à expliquer !!!
Pouvez-vous
m'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie la
feuille
matrice du fichier Agence Ceres 2001 2001.xls dans ce même classeur. La
macro qui enregistre BudgetMatrice.xls sous, ex BudgetSt Tropez.xls est
dans
le fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder une
trace du
nouveau nom du fichier. Le classeur "menu gammvert.xls", étant toujours
ouvert,
si je suis bien, le nom après l'enregistrement pourrait peut-être être
stocké
dans une cellule de ce classeur avant d'être récupéré dans, par exemple,
la
variable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre celle
nommée coller_nom_ville_Ceres() ne fonctionne qu'avec le classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle fait
toujours
référence aux données du classeur BudgetMatrice.xls et ouvre en même
temps
le fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une variable
dans
cette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit dans le
message
de news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui enregistre le
classeurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui, dans
cette
macro,tu pourrais renseigner une variable globale (déclarée Public par
exemple
en têtedu module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait permettre de
passer
enargument (optionnel) à ta procédure coller_nom_ville_Ceres le nom du
classeur àtraiter (BudgetMatrice.xls par défaut sinon, pour reprendre ton
exemple,
BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
NomClasseurEnd Sub
'============================= > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent
d'ouvrir
desfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier Agence
Ceres
20012002.xls. La première macro lancée à partir de menu.xls copie le nom
d'uneville du classeur BudgetMatrice.xls vers le classeur Agence Ceres
2001
2002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec le
fichierBudgetSt Tropez nouvellement créé. Pas évident à expliquer !!!
Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y prendre, je
suis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" a écrit dans le message
de news:Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie la
feuillematrice du fichier Agence Ceres 2001 2001.xls dans ce même classeur. La
macro qui enregistre BudgetMatrice.xls sous, ex BudgetSt Tropez.xls est
dansle fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder une
trace dunouveau nom du fichier. Le classeur "menu gammvert.xls", étant toujours
ouvert,si je suis bien, le nom après l'enregistrement pourrait peut-être être
stockédans une cellule de ce classeur avant d'être récupéré dans, par exemple,
lavariable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre celle
nommée coller_nom_ville_Ceres() ne fonctionne qu'avec le classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle fait
toujoursréférence aux données du classeur BudgetMatrice.xls et ouvre en même
tempsle fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une variable
danscette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit dans le
messagede news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui enregistre le
classeurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui, dans
cettemacro,tu pourrais renseigner une variable globale (déclarée Public par
exempleen têtedu module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait permettre de
passerenargument (optionnel) à ta procédure coller_nom_ville_Ceres le nom du
classeur àtraiter (BudgetMatrice.xls par défaut sinon, pour reprendre ton
exemple,BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
NomClasseurEnd Sub
'============================= > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent
d'ouvrirdesfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier Agence
Ceres20012002.xls. La première macro lancée à partir de menu.xls copie le nom
d'uneville du classeur BudgetMatrice.xls vers le classeur Agence Ceres
20012002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec le
fichierBudgetSt Tropez nouvellement créé. Pas évident à expliquer !!!
Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y prendre, je
suis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le message
de news: 3F313BA0.F779D803@wanadoo.fr...
Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie la
feuille
matrice du fichier Agence Ceres 2001 2001.xls dans ce même classeur. La
macro qui enregistre BudgetMatrice.xls sous, ex BudgetSt Tropez.xls est
dans
le fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder une
trace du
nouveau nom du fichier. Le classeur "menu gammvert.xls", étant toujours
ouvert,
si je suis bien, le nom après l'enregistrement pourrait peut-être être
stocké
dans une cellule de ce classeur avant d'être récupéré dans, par exemple,
la
variable NomClasseur suggérée.
La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre celle
nommée coller_nom_ville_Ceres() ne fonctionne qu'avec le classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle fait
toujours
référence aux données du classeur BudgetMatrice.xls et ouvre en même
temps
le fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une variable
dans
cette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le
message
de news: 3F312CA7.2442D56D@wanadoo.fr...
Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui enregistre le
classeur
BudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui, dans
cette
macro,
tu pourrais renseigner une variable globale (déclarée Public par
exemple
en tête
du module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait permettre de
passer
en
argument (optionnel) à ta procédure coller_nom_ville_Ceres le nom du
classeur à
traiter (BudgetMatrice.xls par défaut sinon, pour reprendre ton
exemple,
BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
NomClasseur
End Sub
'============================= > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent
d'ouvrir
des
fichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier Agence
Ceres
2001
2002.xls. La première macro lancée à partir de menu.xls copie le nom
d'une
ville du classeur BudgetMatrice.xls vers le classeur Agence Ceres
2001
2002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()
ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec le
fichier
BudgetSt Tropez nouvellement créé. Pas évident à expliquer !!!
Pouvez-vous
m'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y prendre, je
suis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" a écrit dans le message
de news:Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie la
feuillematrice du fichier Agence Ceres 2001 2001.xls dans ce même classeur. La
macro qui enregistre BudgetMatrice.xls sous, ex BudgetSt Tropez.xls est
dansle fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder une
trace dunouveau nom du fichier. Le classeur "menu gammvert.xls", étant toujours
ouvert,si je suis bien, le nom après l'enregistrement pourrait peut-être être
stockédans une cellule de ce classeur avant d'être récupéré dans, par exemple,
lavariable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre celle
nommée coller_nom_ville_Ceres() ne fonctionne qu'avec le classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle fait
toujoursréférence aux données du classeur BudgetMatrice.xls et ouvre en même
tempsle fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une variable
danscette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit dans le
messagede news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui enregistre le
classeurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui, dans
cettemacro,tu pourrais renseigner une variable globale (déclarée Public par
exempleen têtedu module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait permettre de
passerenargument (optionnel) à ta procédure coller_nom_ville_Ceres le nom du
classeur àtraiter (BudgetMatrice.xls par défaut sinon, pour reprendre ton
exemple,BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
NomClasseurEnd Sub
'============================= > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent
d'ouvrirdesfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier Agence
Ceres20012002.xls. La première macro lancée à partir de menu.xls copie le nom
d'uneville du classeur BudgetMatrice.xls vers le classeur Agence Ceres
20012002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec le
fichierBudgetSt Tropez nouvellement créé. Pas évident à expliquer !!!
Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseur
Workbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la proc)
est
stocké dans la cellule IV1 de la première feuille du classeur "menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque) comme
proposé
dans ma première réponse, à ceci près qu'une variable globale n'est plus
nécessaire puisque l'information dont on a besoin est dans le classeur
"menu
gammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de "BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= >
Les modifications proposées (j'ai essayé de les commenter au fur et à
mesure
dans les procédures) éliminent la difficulté représentée par le codage "en
dur"
de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans la
procédure
'coller_nom_ville_Ceres'. A la place il y a une variable qui devrait
contenir
(tout ça reste quand même à tester in situ !!) le nouveau nom de ton
classeur
matrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y prendre,
je
suis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" a écrit dans le
message
de news:Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie la
feuillematrice du fichier Agence Ceres 2001 2001.xls dans ce même classeur.
La
macro qui enregistre BudgetMatrice.xls sous, ex BudgetSt Tropez.xls
est
dansle fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder une
trace dunouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujours
ouvert,si je suis bien, le nom après l'enregistrement pourrait peut-être être
stockédans une cellule de ce classeur avant d'être récupéré dans, par
exemple,
lavariable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre
celle
nommée coller_nom_ville_Ceres() ne fonctionne qu'avec le classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle fait
toujoursréférence aux données du classeur BudgetMatrice.xls et ouvre en même
tempsle fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une
variable
danscette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit dans le
messagede news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui enregistre
le
classeurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui, dans
cettemacro,tu pourrais renseigner une variable globale (déclarée Public par
exempleen têtedu module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait permettre
de
passerenargument (optionnel) à ta procédure coller_nom_ville_Ceres le nom
du
classeur àtraiter (BudgetMatrice.xls par défaut sinon, pour reprendre ton
exemple,BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
NomClasseurEnd Sub
'============================= > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent
d'ouvrirdesfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier
Agence
Ceres20012002.xls. La première macro lancée à partir de menu.xls copie le
nom
d'uneville du classeur BudgetMatrice.xls vers le classeur Agence
Ceres
20012002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec
le
fichierBudgetSt Tropez nouvellement créé. Pas évident à expliquer !!!
Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseur
Workbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la proc)
est
stocké dans la cellule IV1 de la première feuille du classeur "menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque) comme
proposé
dans ma première réponse, à ceci près qu'une variable globale n'est plus
nécessaire puisque l'information dont on a besoin est dans le classeur
"menu
gammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de "BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= >
Les modifications proposées (j'ai essayé de les commenter au fur et à
mesure
dans les procédures) éliminent la difficulté représentée par le codage "en
dur"
de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans la
procédure
'coller_nom_ville_Ceres'. A la place il y a une variable qui devrait
contenir
(tout ça reste quand même à tester in situ !!) le nouveau nom de ton
classeur
matrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y prendre,
je
suis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le
message
de news: 3F313BA0.F779D803@wanadoo.fr...
Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie la
feuille
matrice du fichier Agence Ceres 2001 2001.xls dans ce même classeur.
La
macro qui enregistre BudgetMatrice.xls sous, ex BudgetSt Tropez.xls
est
dans
le fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder une
trace du
nouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujours
ouvert,
si je suis bien, le nom après l'enregistrement pourrait peut-être être
stocké
dans une cellule de ce classeur avant d'être récupéré dans, par
exemple,
la
variable NomClasseur suggérée.
La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre
celle
nommée coller_nom_ville_Ceres() ne fonctionne qu'avec le classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle fait
toujours
référence aux données du classeur BudgetMatrice.xls et ouvre en même
temps
le fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une
variable
dans
cette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le
message
de news: 3F312CA7.2442D56D@wanadoo.fr...
Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui enregistre
le
classeur
BudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui, dans
cette
macro,
tu pourrais renseigner une variable globale (déclarée Public par
exemple
en tête
du module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait permettre
de
passer
en
argument (optionnel) à ta procédure coller_nom_ville_Ceres le nom
du
classeur à
traiter (BudgetMatrice.xls par défaut sinon, pour reprendre ton
exemple,
BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
NomClasseur
End Sub
'============================= > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent
d'ouvrir
des
fichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier
Agence
Ceres
2001
2002.xls. La première macro lancée à partir de menu.xls copie le
nom
d'une
ville du classeur BudgetMatrice.xls vers le classeur Agence
Ceres
2001
2002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()
ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec
le
fichier
BudgetSt Tropez nouvellement créé. Pas évident à expliquer !!!
Pouvez-vous
m'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseur
Workbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la proc)
est
stocké dans la cellule IV1 de la première feuille du classeur "menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque) comme
proposé
dans ma première réponse, à ceci près qu'une variable globale n'est plus
nécessaire puisque l'information dont on a besoin est dans le classeur
"menu
gammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de "BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= >
Les modifications proposées (j'ai essayé de les commenter au fur et à
mesure
dans les procédures) éliminent la difficulté représentée par le codage "en
dur"
de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans la
procédure
'coller_nom_ville_Ceres'. A la place il y a une variable qui devrait
contenir
(tout ça reste quand même à tester in situ !!) le nouveau nom de ton
classeur
matrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y prendre,
je
suis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" a écrit dans le
message
de news:Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie la
feuillematrice du fichier Agence Ceres 2001 2001.xls dans ce même classeur.
La
macro qui enregistre BudgetMatrice.xls sous, ex BudgetSt Tropez.xls
est
dansle fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder une
trace dunouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujours
ouvert,si je suis bien, le nom après l'enregistrement pourrait peut-être être
stockédans une cellule de ce classeur avant d'être récupéré dans, par
exemple,
lavariable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre
celle
nommée coller_nom_ville_Ceres() ne fonctionne qu'avec le classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle fait
toujoursréférence aux données du classeur BudgetMatrice.xls et ouvre en même
tempsle fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une
variable
danscette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit dans le
messagede news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui enregistre
le
classeurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui, dans
cettemacro,tu pourrais renseigner une variable globale (déclarée Public par
exempleen têtedu module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait permettre
de
passerenargument (optionnel) à ta procédure coller_nom_ville_Ceres le nom
du
classeur àtraiter (BudgetMatrice.xls par défaut sinon, pour reprendre ton
exemple,BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
NomClasseurEnd Sub
'============================= > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent
d'ouvrirdesfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier
Agence
Ceres20012002.xls. La première macro lancée à partir de menu.xls copie le
nom
d'uneville du classeur BudgetMatrice.xls vers le classeur Agence
Ceres
20012002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec
le
fichierBudgetSt Tropez nouvellement créé. Pas évident à expliquer !!!
Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Re,
Merci, j'ai tester et lorsque je lance la macro Mettre_à_jour_Agence_Ceres()
cela plante dans la macro sub coller_nom_ville_Ceres avec erreur sur la
ligne : Windows(Atraiter).Activate Que dois-je faire ou que n'ai je pas
compris
Merci
Sub coller_nom_ville_Ceres(Optional ATraiter As String > "BudgetMatrice.xls")
'
' coller_nom_ville_Ceres Macro
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
' Mettre_à_jour_Agence_Ceres Macro
' Macro enregistrée le 05/08/03 par AVENIR TELECOM AVENIR TELECOM
'
'
Dim ClasseurAtraiter
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter
End Sub
"Frédéric Sigonneau" a écrit dans le message
de news:Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseurWorkbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la proc)
eststocké dans la cellule IV1 de la première feuille du classeur "menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque) comme
proposédans ma première réponse, à ceci près qu'une variable globale n'est plus
nécessaire puisque l'information dont on a besoin est dans le classeur
"menugammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de "BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= > >
Les modifications proposées (j'ai essayé de les commenter au fur et à
mesuredans les procédures) éliminent la difficulté représentée par le codage "en
dur"de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans la
procédure'coller_nom_ville_Ceres'. A la place il y a une variable qui devrait
contenir(tout ça reste quand même à tester in situ !!) le nouveau nom de ton
classeurmatrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y prendre,
jesuis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" a écrit dans le
messagede news:Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie la
feuillematrice du fichier Agence Ceres 2001 2001.xls dans ce même classeur.
Lamacro qui enregistre BudgetMatrice.xls sous, ex BudgetSt Tropez.xls
estdansle fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder une
trace dunouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujoursouvert,si je suis bien, le nom après l'enregistrement pourrait peut-être être
stockédans une cellule de ce classeur avant d'être récupéré dans, par
exemple,lavariable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre
cellenommée coller_nom_ville_Ceres() ne fonctionne qu'avec le classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle fait
toujoursréférence aux données du classeur BudgetMatrice.xls et ouvre en même
tempsle fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une
variabledanscette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit dans le
messagede news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui enregistre
leclasseurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui, dans
cettemacro,tu pourrais renseigner une variable globale (déclarée Public par
exempleen têtedu module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait permettre
depasserenargument (optionnel) à ta procédure coller_nom_ville_Ceres le nom
duclasseur àtraiter (BudgetMatrice.xls par défaut sinon, pour reprendre ton
exemple,BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
NomClasseurEnd Sub
'============================= > > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent
d'ouvrirdesfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier
AgenceCeres20012002.xls. La première macro lancée à partir de menu.xls copie le
nomd'uneville du classeur BudgetMatrice.xls vers le classeur Agence
Ceres20012002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec
lefichierBudgetSt Tropez nouvellement créé. Pas évident à expliquer !!!
Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Re,
Merci, j'ai tester et lorsque je lance la macro Mettre_à_jour_Agence_Ceres()
cela plante dans la macro sub coller_nom_ville_Ceres avec erreur sur la
ligne : Windows(Atraiter).Activate Que dois-je faire ou que n'ai je pas
compris
Merci
Sub coller_nom_ville_Ceres(Optional ATraiter As String > "BudgetMatrice.xls")
'
' coller_nom_ville_Ceres Macro
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
' Mettre_à_jour_Agence_Ceres Macro
' Macro enregistrée le 05/08/03 par AVENIR TELECOM AVENIR TELECOM
'
'
Dim ClasseurAtraiter
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter
End Sub
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le message
de news: 3F321E7E.D0AD6AC6@wanadoo.fr...
Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseur
Workbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la proc)
est
stocké dans la cellule IV1 de la première feuille du classeur "menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque) comme
proposé
dans ma première réponse, à ceci près qu'une variable globale n'est plus
nécessaire puisque l'information dont on a besoin est dans le classeur
"menu
gammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de "BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= > >
Les modifications proposées (j'ai essayé de les commenter au fur et à
mesure
dans les procédures) éliminent la difficulté représentée par le codage "en
dur"
de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans la
procédure
'coller_nom_ville_Ceres'. A la place il y a une variable qui devrait
contenir
(tout ça reste quand même à tester in situ !!) le nouveau nom de ton
classeur
matrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y prendre,
je
suis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le
message
de news: 3F313BA0.F779D803@wanadoo.fr...
Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie la
feuille
matrice du fichier Agence Ceres 2001 2001.xls dans ce même classeur.
La
macro qui enregistre BudgetMatrice.xls sous, ex BudgetSt Tropez.xls
est
dans
le fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder une
trace du
nouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujours
ouvert,
si je suis bien, le nom après l'enregistrement pourrait peut-être être
stocké
dans une cellule de ce classeur avant d'être récupéré dans, par
exemple,
la
variable NomClasseur suggérée.
La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre
celle
nommée coller_nom_ville_Ceres() ne fonctionne qu'avec le classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle fait
toujours
référence aux données du classeur BudgetMatrice.xls et ouvre en même
temps
le fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une
variable
dans
cette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le
message
de news: 3F312CA7.2442D56D@wanadoo.fr...
Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui enregistre
le
classeur
BudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui, dans
cette
macro,
tu pourrais renseigner une variable globale (déclarée Public par
exemple
en tête
du module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait permettre
de
passer
en
argument (optionnel) à ta procédure coller_nom_ville_Ceres le nom
du
classeur à
traiter (BudgetMatrice.xls par défaut sinon, pour reprendre ton
exemple,
BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
NomClasseur
End Sub
'============================= > > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent
d'ouvrir
des
fichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier
Agence
Ceres
2001
2002.xls. La première macro lancée à partir de menu.xls copie le
nom
d'une
ville du classeur BudgetMatrice.xls vers le classeur Agence
Ceres
2001
2002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()
ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec
le
fichier
BudgetSt Tropez nouvellement créé. Pas évident à expliquer !!!
Pouvez-vous
m'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Re,
Merci, j'ai tester et lorsque je lance la macro Mettre_à_jour_Agence_Ceres()
cela plante dans la macro sub coller_nom_ville_Ceres avec erreur sur la
ligne : Windows(Atraiter).Activate Que dois-je faire ou que n'ai je pas
compris
Merci
Sub coller_nom_ville_Ceres(Optional ATraiter As String > "BudgetMatrice.xls")
'
' coller_nom_ville_Ceres Macro
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
' Mettre_à_jour_Agence_Ceres Macro
' Macro enregistrée le 05/08/03 par AVENIR TELECOM AVENIR TELECOM
'
'
Dim ClasseurAtraiter
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter
End Sub
"Frédéric Sigonneau" a écrit dans le message
de news:Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseurWorkbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la proc)
eststocké dans la cellule IV1 de la première feuille du classeur "menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque) comme
proposédans ma première réponse, à ceci près qu'une variable globale n'est plus
nécessaire puisque l'information dont on a besoin est dans le classeur
"menugammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de "BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= > >
Les modifications proposées (j'ai essayé de les commenter au fur et à
mesuredans les procédures) éliminent la difficulté représentée par le codage "en
dur"de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans la
procédure'coller_nom_ville_Ceres'. A la place il y a une variable qui devrait
contenir(tout ça reste quand même à tester in situ !!) le nouveau nom de ton
classeurmatrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y prendre,
jesuis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" a écrit dans le
messagede news:Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie la
feuillematrice du fichier Agence Ceres 2001 2001.xls dans ce même classeur.
Lamacro qui enregistre BudgetMatrice.xls sous, ex BudgetSt Tropez.xls
estdansle fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder une
trace dunouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujoursouvert,si je suis bien, le nom après l'enregistrement pourrait peut-être être
stockédans une cellule de ce classeur avant d'être récupéré dans, par
exemple,lavariable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre
cellenommée coller_nom_ville_Ceres() ne fonctionne qu'avec le classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle fait
toujoursréférence aux données du classeur BudgetMatrice.xls et ouvre en même
tempsle fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une
variabledanscette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit dans le
messagede news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui enregistre
leclasseurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui, dans
cettemacro,tu pourrais renseigner une variable globale (déclarée Public par
exempleen têtedu module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait permettre
depasserenargument (optionnel) à ta procédure coller_nom_ville_Ceres le nom
duclasseur àtraiter (BudgetMatrice.xls par défaut sinon, pour reprendre ton
exemple,BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
NomClasseurEnd Sub
'============================= > > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me permettent
d'ouvrirdesfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier
AgenceCeres20012002.xls. La première macro lancée à partir de menu.xls copie le
nomd'uneville du classeur BudgetMatrice.xls vers le classeur Agence
Ceres20012002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non pas avec
lefichierBudgetSt Tropez nouvellement créé. Pas évident à expliquer !!!
Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Il faudrait commencer par s'assurer que la variable ATraiter contient bien
un
nom de fichier à ce moment-là. En principe, si j'ai bien compris, tu
lances
Mettre_à_jour_Agence_Ceres (qui appelle ensuite coller_nom_ville_Ceres)
*après*
avoir exécuté Enregistrer.
L'ordre d'exécution des macros doit être :
1- Enregistrer
2- Mettre_à_jour_Agence_Ceres
3- coller_nom_ville_Ceres
Si tu n'as pas d'abord exécuté Enregistrer, la variable ATraiter va être
une
chaine vide (en tout cas lors de la première exécution - par la suite il y
aura
le nom précédent si la cellule IV1 n'est pas nettoyée, ce qu'il faudra
faire
pour améliorer tout ça quand tu seras au point) et dans ce cas l'erreur
est
normale.
Par ailleurs, tu peux avoir une erreur aussi si la variable
ClasseurAtraiter
n'est pas déclarée de type String au début de la procédure
Mettre_à_jour_Agence_Ceres
Dim ClasseurAtraiter As String
(ça, c'est un oubli de ma part, désolé).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Re,
Merci, j'ai tester et lorsque je lance la macro
Mettre_à_jour_Agence_Ceres()
cela plante dans la macro sub coller_nom_ville_Ceres avec erreur sur la
ligne : Windows(Atraiter).Activate Que dois-je faire ou que n'ai je pas
compris
Merci
Sub coller_nom_ville_Ceres(Optional ATraiter As String > > "BudgetMatrice.xls")
'
' coller_nom_ville_Ceres Macro
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
' Mettre_à_jour_Agence_Ceres Macro
' Macro enregistrée le 05/08/03 par AVENIR TELECOM AVENIR TELECOM
'
'
Dim ClasseurAtraiter
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter
End Sub
"Frédéric Sigonneau" a écrit dans le
message
de news:Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées
d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseurWorkbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la
proc)
eststocké dans la cellule IV1 de la première feuille du classeur "menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque) comme
proposédans ma première réponse, à ceci près qu'une variable globale n'est
plus
nécessaire puisque l'information dont on a besoin est dans le classeur
"menugammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de "BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= > > >
Les modifications proposées (j'ai essayé de les commenter au fur et à
mesuredans les procédures) éliminent la difficulté représentée par le codage
"en
dur"de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans la
procédure'coller_nom_ville_Ceres'. A la place il y a une variable qui devrait
contenir(tout ça reste quand même à tester in situ !!) le nouveau nom de ton
classeurmatrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le
fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif
avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y
prendre,
jesuis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" a écrit dans le
messagede news:Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie
la
feuillematrice du fichier Agence Ceres 2001 2001.xls dans ce même
classeur.
Lamacro qui enregistre BudgetMatrice.xls sous, ex BudgetSt
Tropez.xls
estdansle fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder
une
trace dunouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujoursouvert,si je suis bien, le nom après l'enregistrement pourrait peut-être
être
stockédans une cellule de ce classeur avant d'être récupéré dans, par
exemple,lavariable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre
cellenommée coller_nom_ville_Ceres() ne fonctionne qu'avec le
classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle
fait
toujoursréférence aux données du classeur BudgetMatrice.xls et ouvre en
même
tempsle fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une
variabledanscette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit
dans le
messagede news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui
enregistre
leclasseurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui,
dans
cettemacro,tu pourrais renseigner une variable globale (déclarée Public
par
exempleen têtedu module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait
permettre
depasserenargument (optionnel) à ta procédure coller_nom_ville_Ceres le
nom
duclasseur àtraiter (BudgetMatrice.xls par défaut sinon, pour reprendre
ton
exemple,BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si
besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres",
NomClasseurEnd Sub
'============================= > > > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me
permettent
d'ouvrirdesfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier
AgenceCeres20012002.xls. La première macro lancée à partir de menu.xls
copie le
nomd'uneville du classeur BudgetMatrice.xls vers le classeur Agence
Ceres20012002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon
classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non pas
avec
lefichierBudgetSt Tropez nouvellement créé. Pas évident à expliquer
!!!
Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Il faudrait commencer par s'assurer que la variable ATraiter contient bien
un
nom de fichier à ce moment-là. En principe, si j'ai bien compris, tu
lances
Mettre_à_jour_Agence_Ceres (qui appelle ensuite coller_nom_ville_Ceres)
*après*
avoir exécuté Enregistrer.
L'ordre d'exécution des macros doit être :
1- Enregistrer
2- Mettre_à_jour_Agence_Ceres
3- coller_nom_ville_Ceres
Si tu n'as pas d'abord exécuté Enregistrer, la variable ATraiter va être
une
chaine vide (en tout cas lors de la première exécution - par la suite il y
aura
le nom précédent si la cellule IV1 n'est pas nettoyée, ce qu'il faudra
faire
pour améliorer tout ça quand tu seras au point) et dans ce cas l'erreur
est
normale.
Par ailleurs, tu peux avoir une erreur aussi si la variable
ClasseurAtraiter
n'est pas déclarée de type String au début de la procédure
Mettre_à_jour_Agence_Ceres
Dim ClasseurAtraiter As String
(ça, c'est un oubli de ma part, désolé).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Re,
Merci, j'ai tester et lorsque je lance la macro
Mettre_à_jour_Agence_Ceres()
cela plante dans la macro sub coller_nom_ville_Ceres avec erreur sur la
ligne : Windows(Atraiter).Activate Que dois-je faire ou que n'ai je pas
compris
Merci
Sub coller_nom_ville_Ceres(Optional ATraiter As String > > "BudgetMatrice.xls")
'
' coller_nom_ville_Ceres Macro
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
' Mettre_à_jour_Agence_Ceres Macro
' Macro enregistrée le 05/08/03 par AVENIR TELECOM AVENIR TELECOM
'
'
Dim ClasseurAtraiter
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter
End Sub
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le
message
de news: 3F321E7E.D0AD6AC6@wanadoo.fr...
Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées
d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseur
Workbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la
proc)
est
stocké dans la cellule IV1 de la première feuille du classeur "menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque) comme
proposé
dans ma première réponse, à ceci près qu'une variable globale n'est
plus
nécessaire puisque l'information dont on a besoin est dans le classeur
"menu
gammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de "BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= > > >
Les modifications proposées (j'ai essayé de les commenter au fur et à
mesure
dans les procédures) éliminent la difficulté représentée par le codage
"en
dur"
de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans la
procédure
'coller_nom_ville_Ceres'. A la place il y a une variable qui devrait
contenir
(tout ça reste quand même à tester in situ !!) le nouveau nom de ton
classeur
matrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le
fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif
avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y
prendre,
je
suis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le
message
de news: 3F313BA0.F779D803@wanadoo.fr...
Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie
la
feuille
matrice du fichier Agence Ceres 2001 2001.xls dans ce même
classeur.
La
macro qui enregistre BudgetMatrice.xls sous, ex BudgetSt
Tropez.xls
est
dans
le fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder
une
trace du
nouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujours
ouvert,
si je suis bien, le nom après l'enregistrement pourrait peut-être
être
stocké
dans une cellule de ce classeur avant d'être récupéré dans, par
exemple,
la
variable NomClasseur suggérée.
La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre
celle
nommée coller_nom_ville_Ceres() ne fonctionne qu'avec le
classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle
fait
toujours
référence aux données du classeur BudgetMatrice.xls et ouvre en
même
temps
le fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une
variable
dans
cette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit
dans le
message
de news: 3F312CA7.2442D56D@wanadoo.fr...
Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui
enregistre
le
classeur
BudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui,
dans
cette
macro,
tu pourrais renseigner une variable globale (déclarée Public
par
exemple
en tête
du module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait
permettre
de
passer
en
argument (optionnel) à ta procédure coller_nom_ville_Ceres le
nom
du
classeur à
traiter (BudgetMatrice.xls par défaut sinon, pour reprendre
ton
exemple,
BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si
besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres",
NomClasseur
End Sub
'============================= > > > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me
permettent
d'ouvrir
des
fichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier
Agence
Ceres
2001
2002.xls. La première macro lancée à partir de menu.xls
copie le
nom
d'une
ville du classeur BudgetMatrice.xls vers le classeur Agence
Ceres
2001
2002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon
classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()
ne fonctionne qu'à partir de BudgetMatrice.xls et non pas
avec
le
fichier
BudgetSt Tropez nouvellement créé. Pas évident à expliquer
!!!
Pouvez-vous
m'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Il faudrait commencer par s'assurer que la variable ATraiter contient bien
un
nom de fichier à ce moment-là. En principe, si j'ai bien compris, tu
lances
Mettre_à_jour_Agence_Ceres (qui appelle ensuite coller_nom_ville_Ceres)
*après*
avoir exécuté Enregistrer.
L'ordre d'exécution des macros doit être :
1- Enregistrer
2- Mettre_à_jour_Agence_Ceres
3- coller_nom_ville_Ceres
Si tu n'as pas d'abord exécuté Enregistrer, la variable ATraiter va être
une
chaine vide (en tout cas lors de la première exécution - par la suite il y
aura
le nom précédent si la cellule IV1 n'est pas nettoyée, ce qu'il faudra
faire
pour améliorer tout ça quand tu seras au point) et dans ce cas l'erreur
est
normale.
Par ailleurs, tu peux avoir une erreur aussi si la variable
ClasseurAtraiter
n'est pas déclarée de type String au début de la procédure
Mettre_à_jour_Agence_Ceres
Dim ClasseurAtraiter As String
(ça, c'est un oubli de ma part, désolé).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Re,
Merci, j'ai tester et lorsque je lance la macro
Mettre_à_jour_Agence_Ceres()
cela plante dans la macro sub coller_nom_ville_Ceres avec erreur sur la
ligne : Windows(Atraiter).Activate Que dois-je faire ou que n'ai je pas
compris
Merci
Sub coller_nom_ville_Ceres(Optional ATraiter As String > > "BudgetMatrice.xls")
'
' coller_nom_ville_Ceres Macro
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
' Mettre_à_jour_Agence_Ceres Macro
' Macro enregistrée le 05/08/03 par AVENIR TELECOM AVENIR TELECOM
'
'
Dim ClasseurAtraiter
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter
End Sub
"Frédéric Sigonneau" a écrit dans le
message
de news:Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées
d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseurWorkbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la
proc)
eststocké dans la cellule IV1 de la première feuille du classeur "menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque) comme
proposédans ma première réponse, à ceci près qu'une variable globale n'est
plus
nécessaire puisque l'information dont on a besoin est dans le classeur
"menugammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de "BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= > > >
Les modifications proposées (j'ai essayé de les commenter au fur et à
mesuredans les procédures) éliminent la difficulté représentée par le codage
"en
dur"de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans la
procédure'coller_nom_ville_Ceres'. A la place il y a une variable qui devrait
contenir(tout ça reste quand même à tester in situ !!) le nouveau nom de ton
classeurmatrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le
fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif
avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y
prendre,
jesuis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" a écrit dans le
messagede news:Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie
la
feuillematrice du fichier Agence Ceres 2001 2001.xls dans ce même
classeur.
Lamacro qui enregistre BudgetMatrice.xls sous, ex BudgetSt
Tropez.xls
estdansle fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder
une
trace dunouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujoursouvert,si je suis bien, le nom après l'enregistrement pourrait peut-être
être
stockédans une cellule de ce classeur avant d'être récupéré dans, par
exemple,lavariable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre
cellenommée coller_nom_ville_Ceres() ne fonctionne qu'avec le
classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle
fait
toujoursréférence aux données du classeur BudgetMatrice.xls et ouvre en
même
tempsle fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une
variabledanscette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit
dans le
messagede news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui
enregistre
leclasseurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui,
dans
cettemacro,tu pourrais renseigner une variable globale (déclarée Public
par
exempleen têtedu module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait
permettre
depasserenargument (optionnel) à ta procédure coller_nom_ville_Ceres le
nom
duclasseur àtraiter (BudgetMatrice.xls par défaut sinon, pour reprendre
ton
exemple,BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si
besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres",
NomClasseurEnd Sub
'============================= > > > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me
permettent
d'ouvrirdesfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier
AgenceCeres20012002.xls. La première macro lancée à partir de menu.xls
copie le
nomd'uneville du classeur BudgetMatrice.xls vers le classeur Agence
Ceres20012002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon
classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non pas
avec
lefichierBudgetSt Tropez nouvellement créé. Pas évident à expliquer
!!!
Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Désolé Frédéric mais cela plante toujours à la même ligne
Windows(Atraiter).Activate malgré les modifs apportées.
Voici ce que je fais :
Dans le classeur BudgetMatrice.xls j'exécute la macro Sub Enregistrer() puis
je reviens dans le classeur menu gammvert.xls j'exécute la macro Sub
Mettre_à_jour_Agence_Ceres
Dans le classeur menu gammvert.xls j'ai bien le chemin du nouveau classeur
ex C:gammvertBudgetSt Tropez.xls dans la cellule "IV1"
La macro copie_matrice du classeur Agence Ceres 2001 2002.xls fonctionne
bien il n'y a que la macro coller_nom_ville_Ceres qui bug
macro dans Agence Ceres 2001 2002.xls :
Sub copie_matrice()
'
' copie_matrice Macro
Sheets("matrice").Select
Sheets("matrice").Copy Before:=Sheets(1)
End Sub
Macro dans Budgetatrice.xls :
Sub Enregistrer()
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value > NomClasseur
Workbooks("menu gammvert.xls").Saved = True
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Macro dans menu gammvert.xls :
Sub coller_nom_ville_Ceres(Optional ATraiter As String > "BudgetMatrice.xls")
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
Dim ClasseurAtraiter As String
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter '
End Sub
Merci Pascale
"Frédéric Sigonneau" a écrit dans le message
de news:Il faudrait commencer par s'assurer que la variable ATraiter contient bien
unnom de fichier à ce moment-là. En principe, si j'ai bien compris, tu
lancesMettre_à_jour_Agence_Ceres (qui appelle ensuite coller_nom_ville_Ceres)
*après*avoir exécuté Enregistrer.
L'ordre d'exécution des macros doit être :
1- Enregistrer
2- Mettre_à_jour_Agence_Ceres
3- coller_nom_ville_Ceres
Si tu n'as pas d'abord exécuté Enregistrer, la variable ATraiter va être
unechaine vide (en tout cas lors de la première exécution - par la suite il y
aurale nom précédent si la cellule IV1 n'est pas nettoyée, ce qu'il faudra
fairepour améliorer tout ça quand tu seras au point) et dans ce cas l'erreur
estnormale.
Par ailleurs, tu peux avoir une erreur aussi si la variable
ClasseurAtraitern'est pas déclarée de type String au début de la procédure
Mettre_à_jour_Agence_Ceres
Dim ClasseurAtraiter As String
(ça, c'est un oubli de ma part, désolé).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Re,
Merci, j'ai tester et lorsque je lance la macro
Mettre_à_jour_Agence_Ceres()cela plante dans la macro sub coller_nom_ville_Ceres avec erreur sur la
ligne : Windows(Atraiter).Activate Que dois-je faire ou que n'ai je pas
compris
Merci
Sub coller_nom_ville_Ceres(Optional ATraiter As String > > > "BudgetMatrice.xls")
'
' coller_nom_ville_Ceres Macro
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
' Mettre_à_jour_Agence_Ceres Macro
' Macro enregistrée le 05/08/03 par AVENIR TELECOM AVENIR TELECOM
'
'
Dim ClasseurAtraiter
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter
End Sub
"Frédéric Sigonneau" a écrit dans le
messagede news:Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées
d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseurWorkbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la
proc)eststocké dans la cellule IV1 de la première feuille du classeur "menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque) comme
proposédans ma première réponse, à ceci près qu'une variable globale n'est
plusnécessaire puisque l'information dont on a besoin est dans le classeur
"menugammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de "BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= > > > >
Les modifications proposées (j'ai essayé de les commenter au fur et à
mesuredans les procédures) éliminent la difficulté représentée par le codage
"endur"de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans la
procédure'coller_nom_ville_Ceres'. A la place il y a une variable qui devrait
contenir(tout ça reste quand même à tester in situ !!) le nouveau nom de ton
classeurmatrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le
fichierBudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif
avecvariable NomClasseur, mais je t'avoue ne pas savoir comment m'y
prendre,jesuis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" a écrit dans le
messagede news:Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie
lafeuillematrice du fichier Agence Ceres 2001 2001.xls dans ce même
classeur.Lamacro qui enregistre BudgetMatrice.xls sous, ex BudgetSt
Tropez.xlsestdansle fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder
unetrace dunouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujoursouvert,si je suis bien, le nom après l'enregistrement pourrait peut-être
êtrestockédans une cellule de ce classeur avant d'être récupéré dans, par
exemple,lavariable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre
cellenommée coller_nom_ville_Ceres() ne fonctionne qu'avec le
classeurBudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle
faittoujoursréférence aux données du classeur BudgetMatrice.xls et ouvre en
mêmetempsle fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une
variabledanscette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit
dans lemessagede news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui
enregistreleclasseurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui,
danscettemacro,tu pourrais renseigner une variable globale (déclarée Public
parexempleen têtedu module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait
permettredepasserenargument (optionnel) à ta procédure coller_nom_ville_Ceres le
nomduclasseur àtraiter (BudgetMatrice.xls par défaut sinon, pour reprendre
tonexemple,BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si
besoinWindows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres",NomClasseurEnd Sub
'============================= > > > > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me
permettentd'ouvrirdesfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier
AgenceCeres20012002.xls. La première macro lancée à partir de menu.xls
copie lenomd'uneville du classeur BudgetMatrice.xls vers le classeur Agence
Ceres20012002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon
classeurBudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non pas
aveclefichierBudgetSt Tropez nouvellement créé. Pas évident à expliquer
!!!Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres"End Sub
Désolé Frédéric mais cela plante toujours à la même ligne
Windows(Atraiter).Activate malgré les modifs apportées.
Voici ce que je fais :
Dans le classeur BudgetMatrice.xls j'exécute la macro Sub Enregistrer() puis
je reviens dans le classeur menu gammvert.xls j'exécute la macro Sub
Mettre_à_jour_Agence_Ceres
Dans le classeur menu gammvert.xls j'ai bien le chemin du nouveau classeur
ex C:gammvertBudgetSt Tropez.xls dans la cellule "IV1"
La macro copie_matrice du classeur Agence Ceres 2001 2002.xls fonctionne
bien il n'y a que la macro coller_nom_ville_Ceres qui bug
macro dans Agence Ceres 2001 2002.xls :
Sub copie_matrice()
'
' copie_matrice Macro
Sheets("matrice").Select
Sheets("matrice").Copy Before:=Sheets(1)
End Sub
Macro dans Budgetatrice.xls :
Sub Enregistrer()
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value > NomClasseur
Workbooks("menu gammvert.xls").Saved = True
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Macro dans menu gammvert.xls :
Sub coller_nom_ville_Ceres(Optional ATraiter As String > "BudgetMatrice.xls")
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
Dim ClasseurAtraiter As String
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter '
End Sub
Merci Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le message
de news: 3F3251F3.F7A87789@wanadoo.fr...
Il faudrait commencer par s'assurer que la variable ATraiter contient bien
un
nom de fichier à ce moment-là. En principe, si j'ai bien compris, tu
lances
Mettre_à_jour_Agence_Ceres (qui appelle ensuite coller_nom_ville_Ceres)
*après*
avoir exécuté Enregistrer.
L'ordre d'exécution des macros doit être :
1- Enregistrer
2- Mettre_à_jour_Agence_Ceres
3- coller_nom_ville_Ceres
Si tu n'as pas d'abord exécuté Enregistrer, la variable ATraiter va être
une
chaine vide (en tout cas lors de la première exécution - par la suite il y
aura
le nom précédent si la cellule IV1 n'est pas nettoyée, ce qu'il faudra
faire
pour améliorer tout ça quand tu seras au point) et dans ce cas l'erreur
est
normale.
Par ailleurs, tu peux avoir une erreur aussi si la variable
ClasseurAtraiter
n'est pas déclarée de type String au début de la procédure
Mettre_à_jour_Agence_Ceres
Dim ClasseurAtraiter As String
(ça, c'est un oubli de ma part, désolé).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Re,
Merci, j'ai tester et lorsque je lance la macro
Mettre_à_jour_Agence_Ceres()
cela plante dans la macro sub coller_nom_ville_Ceres avec erreur sur la
ligne : Windows(Atraiter).Activate Que dois-je faire ou que n'ai je pas
compris
Merci
Sub coller_nom_ville_Ceres(Optional ATraiter As String > > > "BudgetMatrice.xls")
'
' coller_nom_ville_Ceres Macro
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
' Mettre_à_jour_Agence_Ceres Macro
' Macro enregistrée le 05/08/03 par AVENIR TELECOM AVENIR TELECOM
'
'
Dim ClasseurAtraiter
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter
End Sub
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le
message
de news: 3F321E7E.D0AD6AC6@wanadoo.fr...
Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées
d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseur
Workbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la
proc)
est
stocké dans la cellule IV1 de la première feuille du classeur "menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque) comme
proposé
dans ma première réponse, à ceci près qu'une variable globale n'est
plus
nécessaire puisque l'information dont on a besoin est dans le classeur
"menu
gammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de "BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= > > > >
Les modifications proposées (j'ai essayé de les commenter au fur et à
mesure
dans les procédures) éliminent la difficulté représentée par le codage
"en
dur"
de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans la
procédure
'coller_nom_ville_Ceres'. A la place il y a une variable qui devrait
contenir
(tout ça reste quand même à tester in situ !!) le nouveau nom de ton
classeur
matrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le
fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif
avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y
prendre,
je
suis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le
message
de news: 3F313BA0.F779D803@wanadoo.fr...
Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie
la
feuille
matrice du fichier Agence Ceres 2001 2001.xls dans ce même
classeur.
La
macro qui enregistre BudgetMatrice.xls sous, ex BudgetSt
Tropez.xls
est
dans
le fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder
une
trace du
nouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujours
ouvert,
si je suis bien, le nom après l'enregistrement pourrait peut-être
être
stocké
dans une cellule de ce classeur avant d'être récupéré dans, par
exemple,
la
variable NomClasseur suggérée.
La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre
celle
nommée coller_nom_ville_Ceres() ne fonctionne qu'avec le
classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle
fait
toujours
référence aux données du classeur BudgetMatrice.xls et ouvre en
même
temps
le fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une
variable
dans
cette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit
dans le
message
de news: 3F312CA7.2442D56D@wanadoo.fr...
Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui
enregistre
le
classeur
BudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui,
dans
cette
macro,
tu pourrais renseigner une variable globale (déclarée Public
par
exemple
en tête
du module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait
permettre
de
passer
en
argument (optionnel) à ta procédure coller_nom_ville_Ceres le
nom
du
classeur à
traiter (BudgetMatrice.xls par défaut sinon, pour reprendre
ton
exemple,
BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si
besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres",
NomClasseur
End Sub
'============================= > > > > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me
permettent
d'ouvrir
des
fichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier
Agence
Ceres
2001
2002.xls. La première macro lancée à partir de menu.xls
copie le
nom
d'une
ville du classeur BudgetMatrice.xls vers le classeur Agence
Ceres
2001
2002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon
classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()
ne fonctionne qu'à partir de BudgetMatrice.xls et non pas
avec
le
fichier
BudgetSt Tropez nouvellement créé. Pas évident à expliquer
!!!
Pouvez-vous
m'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Désolé Frédéric mais cela plante toujours à la même ligne
Windows(Atraiter).Activate malgré les modifs apportées.
Voici ce que je fais :
Dans le classeur BudgetMatrice.xls j'exécute la macro Sub Enregistrer() puis
je reviens dans le classeur menu gammvert.xls j'exécute la macro Sub
Mettre_à_jour_Agence_Ceres
Dans le classeur menu gammvert.xls j'ai bien le chemin du nouveau classeur
ex C:gammvertBudgetSt Tropez.xls dans la cellule "IV1"
La macro copie_matrice du classeur Agence Ceres 2001 2002.xls fonctionne
bien il n'y a que la macro coller_nom_ville_Ceres qui bug
macro dans Agence Ceres 2001 2002.xls :
Sub copie_matrice()
'
' copie_matrice Macro
Sheets("matrice").Select
Sheets("matrice").Copy Before:=Sheets(1)
End Sub
Macro dans Budgetatrice.xls :
Sub Enregistrer()
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value > NomClasseur
Workbooks("menu gammvert.xls").Saved = True
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Macro dans menu gammvert.xls :
Sub coller_nom_ville_Ceres(Optional ATraiter As String > "BudgetMatrice.xls")
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
Dim ClasseurAtraiter As String
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter '
End Sub
Merci Pascale
"Frédéric Sigonneau" a écrit dans le message
de news:Il faudrait commencer par s'assurer que la variable ATraiter contient bien
unnom de fichier à ce moment-là. En principe, si j'ai bien compris, tu
lancesMettre_à_jour_Agence_Ceres (qui appelle ensuite coller_nom_ville_Ceres)
*après*avoir exécuté Enregistrer.
L'ordre d'exécution des macros doit être :
1- Enregistrer
2- Mettre_à_jour_Agence_Ceres
3- coller_nom_ville_Ceres
Si tu n'as pas d'abord exécuté Enregistrer, la variable ATraiter va être
unechaine vide (en tout cas lors de la première exécution - par la suite il y
aurale nom précédent si la cellule IV1 n'est pas nettoyée, ce qu'il faudra
fairepour améliorer tout ça quand tu seras au point) et dans ce cas l'erreur
estnormale.
Par ailleurs, tu peux avoir une erreur aussi si la variable
ClasseurAtraitern'est pas déclarée de type String au début de la procédure
Mettre_à_jour_Agence_Ceres
Dim ClasseurAtraiter As String
(ça, c'est un oubli de ma part, désolé).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Re,
Merci, j'ai tester et lorsque je lance la macro
Mettre_à_jour_Agence_Ceres()cela plante dans la macro sub coller_nom_ville_Ceres avec erreur sur la
ligne : Windows(Atraiter).Activate Que dois-je faire ou que n'ai je pas
compris
Merci
Sub coller_nom_ville_Ceres(Optional ATraiter As String > > > "BudgetMatrice.xls")
'
' coller_nom_ville_Ceres Macro
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
' Mettre_à_jour_Agence_Ceres Macro
' Macro enregistrée le 05/08/03 par AVENIR TELECOM AVENIR TELECOM
'
'
Dim ClasseurAtraiter
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter
End Sub
"Frédéric Sigonneau" a écrit dans le
messagede news:Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées
d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseurWorkbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la
proc)eststocké dans la cellule IV1 de la première feuille du classeur "menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque) comme
proposédans ma première réponse, à ceci près qu'une variable globale n'est
plusnécessaire puisque l'information dont on a besoin est dans le classeur
"menugammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de "BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= > > > >
Les modifications proposées (j'ai essayé de les commenter au fur et à
mesuredans les procédures) éliminent la difficulté représentée par le codage
"endur"de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans la
procédure'coller_nom_ville_Ceres'. A la place il y a une variable qui devrait
contenir(tout ça reste quand même à tester in situ !!) le nouveau nom de ton
classeurmatrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le
fichierBudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les modif
avecvariable NomClasseur, mais je t'avoue ne pas savoir comment m'y
prendre,jesuis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" a écrit dans le
messagede news:Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui copie
lafeuillematrice du fichier Agence Ceres 2001 2001.xls dans ce même
classeur.Lamacro qui enregistre BudgetMatrice.xls sous, ex BudgetSt
Tropez.xlsestdansle fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut garder
unetrace dunouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujoursouvert,si je suis bien, le nom après l'enregistrement pourrait peut-être
êtrestockédans une cellule de ce classeur avant d'être récupéré dans, par
exemple,lavariable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par contre
cellenommée coller_nom_ville_Ceres() ne fonctionne qu'avec le
classeurBudgetMatrice.xls si j'enregistre sous Budget St Tropez, elle
faittoujoursréférence aux données du classeur BudgetMatrice.xls et ouvre en
mêmetempsle fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom d'une
variabledanscette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit
dans lemessagede news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui
enregistreleclasseurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si oui,
danscettemacro,tu pourrais renseigner une variable globale (déclarée Public
parexempleen têtedu module où sont écrites tes procs coller_nom_ville_Ceres et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait
permettredepasserenargument (optionnel) à ta procédure coller_nom_ville_Ceres le
nomduclasseur àtraiter (BudgetMatrice.xls par défaut sinon, pour reprendre
tonexemple,BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si
besoinWindows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres",NomClasseurEnd Sub
'============================= > > > > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me
permettentd'ouvrirdesfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un fichier
AgenceCeres20012002.xls. La première macro lancée à partir de menu.xls
copie lenomd'uneville du classeur BudgetMatrice.xls vers le classeur Agence
Ceres20012002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon
classeurBudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non pas
aveclefichierBudgetSt Tropez nouvellement créé. Pas évident à expliquer
!!!Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres"End Sub
Re re re,
Dans Enregistrer, la boite de dialogue GetSaveAsFilename renvoie dans la
variable NomClasseur le chemin complet du nom à enregistrer sous. Du coup
le
cellule IV1 conserve qqchose comme
d:dossiersousdossierBudgetSt Tropez.xls
Or Windows(Atraiter).Activate attend un nom de fichier seul (BudgetSt
Tropez.xls) -> erreur
Il y a un petit chgt à faire deans Enregistrer :
Sub Enregistrer()
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
With Workbooks("menu gammvert.xls")
.Sheets(1).Range("IV1").Value = Dir(NomClasseur) 'ici modif
.Saved = True
End With
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Par ailleurs, dans la procédure Mettre_à_jour_Agence_Ceres la ligne de
code
NomClasseur = ActiveWorkbook.Name
ne sert plus à rien, il faut la supprimer :
Sub Mettre_à_jour_Agence_Ceres()
Dim ClasseurAtraiter As String
ClasseurAtraiter = _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").ClearContents
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run _
"'menu gammvert.xls'!coller_nom_ville_Ceres", ClasseurAtraiter '
End Sub
(J'en ai profité pour remettre à vide la cellule IV1 utilisée
temporairement
comme espace de stockage, pour de futures utilisations).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Désolé Frédéric mais cela plante toujours à la même ligne
Windows(Atraiter).Activate malgré les modifs apportées.
Voici ce que je fais :
Dans le classeur BudgetMatrice.xls j'exécute la macro Sub Enregistrer()
puis
je reviens dans le classeur menu gammvert.xls j'exécute la macro Sub
Mettre_à_jour_Agence_Ceres
Dans le classeur menu gammvert.xls j'ai bien le chemin du nouveau
classeur
ex C:gammvertBudgetSt Tropez.xls dans la cellule "IV1"
La macro copie_matrice du classeur Agence Ceres 2001 2002.xls fonctionne
bien il n'y a que la macro coller_nom_ville_Ceres qui bug
macro dans Agence Ceres 2001 2002.xls :
Sub copie_matrice()
'
' copie_matrice Macro
Sheets("matrice").Select
Sheets("matrice").Copy Before:=Sheets(1)
End Sub
Macro dans Budgetatrice.xls :
Sub Enregistrer()
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value > > NomClasseur
Workbooks("menu gammvert.xls").Saved = True
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Macro dans menu gammvert.xls :
Sub coller_nom_ville_Ceres(Optional ATraiter As String > > "BudgetMatrice.xls")
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
Dim ClasseurAtraiter As String
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter '
End Sub
Merci Pascale
"Frédéric Sigonneau" a écrit dans le
message
de news:Il faudrait commencer par s'assurer que la variable ATraiter contient
bien
unnom de fichier à ce moment-là. En principe, si j'ai bien compris, tu
lancesMettre_à_jour_Agence_Ceres (qui appelle ensuite
coller_nom_ville_Ceres)
*après*avoir exécuté Enregistrer.
L'ordre d'exécution des macros doit être :
1- Enregistrer
2- Mettre_à_jour_Agence_Ceres
3- coller_nom_ville_Ceres
Si tu n'as pas d'abord exécuté Enregistrer, la variable ATraiter va
être
unechaine vide (en tout cas lors de la première exécution - par la suite
il y
aurale nom précédent si la cellule IV1 n'est pas nettoyée, ce qu'il faudra
fairepour améliorer tout ça quand tu seras au point) et dans ce cas
l'erreur
estnormale.
Par ailleurs, tu peux avoir une erreur aussi si la variable
ClasseurAtraitern'est pas déclarée de type String au début de la procédure
Mettre_à_jour_Agence_Ceres
Dim ClasseurAtraiter As String
(ça, c'est un oubli de ma part, désolé).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Re,
Merci, j'ai tester et lorsque je lance la macro
Mettre_à_jour_Agence_Ceres()cela plante dans la macro sub coller_nom_ville_Ceres avec erreur sur
la
ligne : Windows(Atraiter).Activate Que dois-je faire ou que n'ai je
pas
compris
Merci
Sub coller_nom_ville_Ceres(Optional ATraiter As String > > > > "BudgetMatrice.xls")
'
' coller_nom_ville_Ceres Macro
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
' Mettre_à_jour_Agence_Ceres Macro
' Macro enregistrée le 05/08/03 par AVENIR TELECOM AVENIR TELECOM
'
'
Dim ClasseurAtraiter
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter
End Sub
"Frédéric Sigonneau" a écrit dans le
messagede news:Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées
d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseurWorkbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." &
_
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous
lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la
proc)eststocké dans la cellule IV1 de la première feuille du classeur
"menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque)
comme
proposédans ma première réponse, à ceci près qu'une variable globale
n'est
plusnécessaire puisque l'information dont on a besoin est dans le
classeur
"menugammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de
"BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= > > > > >
Les modifications proposées (j'ai essayé de les commenter au fur
et à
mesuredans les procédures) éliminent la difficulté représentée par le
codage
"endur"de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans
la
procédure'coller_nom_ville_Ceres'. A la place il y a une variable qui
devrait
contenir(tout ça reste quand même à tester in situ !!) le nouveau nom de
ton
classeurmatrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le
fichierBudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement."
& _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les
modif
avecvariable NomClasseur, mais je t'avoue ne pas savoir comment m'y
prendre,jesuis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la
solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" a écrit
dans le
messagede news:Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui
copie
lafeuillematrice du fichier Agence Ceres 2001 2001.xls dans ce même
classeur.Lamacro qui enregistre BudgetMatrice.xls sous, ex BudgetSt
Tropez.xlsestdansle fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut
garder
unetrace dunouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujoursouvert,si je suis bien, le nom après l'enregistrement pourrait
peut-être
êtrestockédans une cellule de ce classeur avant d'être récupéré dans,
par
exemple,lavariable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par
contre
cellenommée coller_nom_ville_Ceres() ne fonctionne qu'avec le
classeurBudgetMatrice.xls si j'enregistre sous Budget St Tropez,
elle
faittoujoursréférence aux données du classeur BudgetMatrice.xls et ouvre
en
mêmetempsle fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en
dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom
d'une
variabledanscette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit
dans lemessagede news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui
enregistreleclasseurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si
oui,
danscettemacro,tu pourrais renseigner une variable globale (déclarée
Public
parexempleen têtedu module où sont écrites tes procs coller_nom_ville_Ceres
et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait
permettredepasserenargument (optionnel) à ta procédure coller_nom_ville_Ceres
le
nomduclasseur àtraiter (BudgetMatrice.xls par défaut sinon, pour
reprendre
tonexemple,BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter
si
besoinWindows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres",NomClasseurEnd Sub
'============================= > > > > > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me
permettentd'ouvrirdesfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un
fichier
AgenceCeres20012002.xls. La première macro lancée à partir de menu.xls
copie lenomd'uneville du classeur BudgetMatrice.xls vers le classeur
Agence
Ceres20012002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon
classeurBudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non
pas
aveclefichierBudgetSt Tropez nouvellement créé. Pas évident à
expliquer
!!!Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres"End Sub
Re re re,
Dans Enregistrer, la boite de dialogue GetSaveAsFilename renvoie dans la
variable NomClasseur le chemin complet du nom à enregistrer sous. Du coup
le
cellule IV1 conserve qqchose comme
d:dossiersousdossierBudgetSt Tropez.xls
Or Windows(Atraiter).Activate attend un nom de fichier seul (BudgetSt
Tropez.xls) -> erreur
Il y a un petit chgt à faire deans Enregistrer :
Sub Enregistrer()
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
With Workbooks("menu gammvert.xls")
.Sheets(1).Range("IV1").Value = Dir(NomClasseur) 'ici modif
.Saved = True
End With
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Par ailleurs, dans la procédure Mettre_à_jour_Agence_Ceres la ligne de
code
NomClasseur = ActiveWorkbook.Name
ne sert plus à rien, il faut la supprimer :
Sub Mettre_à_jour_Agence_Ceres()
Dim ClasseurAtraiter As String
ClasseurAtraiter = _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").ClearContents
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run _
"'menu gammvert.xls'!coller_nom_ville_Ceres", ClasseurAtraiter '
End Sub
(J'en ai profité pour remettre à vide la cellule IV1 utilisée
temporairement
comme espace de stockage, pour de futures utilisations).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Désolé Frédéric mais cela plante toujours à la même ligne
Windows(Atraiter).Activate malgré les modifs apportées.
Voici ce que je fais :
Dans le classeur BudgetMatrice.xls j'exécute la macro Sub Enregistrer()
puis
je reviens dans le classeur menu gammvert.xls j'exécute la macro Sub
Mettre_à_jour_Agence_Ceres
Dans le classeur menu gammvert.xls j'ai bien le chemin du nouveau
classeur
ex C:gammvertBudgetSt Tropez.xls dans la cellule "IV1"
La macro copie_matrice du classeur Agence Ceres 2001 2002.xls fonctionne
bien il n'y a que la macro coller_nom_ville_Ceres qui bug
macro dans Agence Ceres 2001 2002.xls :
Sub copie_matrice()
'
' copie_matrice Macro
Sheets("matrice").Select
Sheets("matrice").Copy Before:=Sheets(1)
End Sub
Macro dans Budgetatrice.xls :
Sub Enregistrer()
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value > > NomClasseur
Workbooks("menu gammvert.xls").Saved = True
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Macro dans menu gammvert.xls :
Sub coller_nom_ville_Ceres(Optional ATraiter As String > > "BudgetMatrice.xls")
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
Dim ClasseurAtraiter As String
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter '
End Sub
Merci Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le
message
de news: 3F3251F3.F7A87789@wanadoo.fr...
Il faudrait commencer par s'assurer que la variable ATraiter contient
bien
un
nom de fichier à ce moment-là. En principe, si j'ai bien compris, tu
lances
Mettre_à_jour_Agence_Ceres (qui appelle ensuite
coller_nom_ville_Ceres)
*après*
avoir exécuté Enregistrer.
L'ordre d'exécution des macros doit être :
1- Enregistrer
2- Mettre_à_jour_Agence_Ceres
3- coller_nom_ville_Ceres
Si tu n'as pas d'abord exécuté Enregistrer, la variable ATraiter va
être
une
chaine vide (en tout cas lors de la première exécution - par la suite
il y
aura
le nom précédent si la cellule IV1 n'est pas nettoyée, ce qu'il faudra
faire
pour améliorer tout ça quand tu seras au point) et dans ce cas
l'erreur
est
normale.
Par ailleurs, tu peux avoir une erreur aussi si la variable
ClasseurAtraiter
n'est pas déclarée de type String au début de la procédure
Mettre_à_jour_Agence_Ceres
Dim ClasseurAtraiter As String
(ça, c'est un oubli de ma part, désolé).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Re,
Merci, j'ai tester et lorsque je lance la macro
Mettre_à_jour_Agence_Ceres()
cela plante dans la macro sub coller_nom_ville_Ceres avec erreur sur
la
ligne : Windows(Atraiter).Activate Que dois-je faire ou que n'ai je
pas
compris
Merci
Sub coller_nom_ville_Ceres(Optional ATraiter As String > > > > "BudgetMatrice.xls")
'
' coller_nom_ville_Ceres Macro
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
' Mettre_à_jour_Agence_Ceres Macro
' Macro enregistrée le 05/08/03 par AVENIR TELECOM AVENIR TELECOM
'
'
Dim ClasseurAtraiter
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter
End Sub
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le
message
de news: 3F321E7E.D0AD6AC6@wanadoo.fr...
Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées
d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseur
Workbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." &
_
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous
lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la
proc)
est
stocké dans la cellule IV1 de la première feuille du classeur
"menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque)
comme
proposé
dans ma première réponse, à ceci près qu'une variable globale
n'est
plus
nécessaire puisque l'information dont on a besoin est dans le
classeur
"menu
gammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de
"BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= > > > > >
Les modifications proposées (j'ai essayé de les commenter au fur
et à
mesure
dans les procédures) éliminent la difficulté représentée par le
codage
"en
dur"
de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans
la
procédure
'coller_nom_ville_Ceres'. A la place il y a une variable qui
devrait
contenir
(tout ça reste quand même à tester in situ !!) le nouveau nom de
ton
classeur
matrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le
fichier
BudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement."
& _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les
modif
avec
variable NomClasseur, mais je t'avoue ne pas savoir comment m'y
prendre,
je
suis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la
solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit
dans le
message
de news: 3F313BA0.F779D803@wanadoo.fr...
Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui
copie
la
feuille
matrice du fichier Agence Ceres 2001 2001.xls dans ce même
classeur.
La
macro qui enregistre BudgetMatrice.xls sous, ex BudgetSt
Tropez.xls
est
dans
le fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut
garder
une
trace du
nouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujours
ouvert,
si je suis bien, le nom après l'enregistrement pourrait
peut-être
être
stocké
dans une cellule de ce classeur avant d'être récupéré dans,
par
exemple,
la
variable NomClasseur suggérée.
La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par
contre
celle
nommée coller_nom_ville_Ceres() ne fonctionne qu'avec le
classeur
BudgetMatrice.xls si j'enregistre sous Budget St Tropez,
elle
fait
toujours
référence aux données du classeur BudgetMatrice.xls et ouvre
en
même
temps
le fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en
dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom
d'une
variable
dans
cette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit
dans le
message
de news: 3F312CA7.2442D56D@wanadoo.fr...
Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui
enregistre
le
classeur
BudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si
oui,
dans
cette
macro,
tu pourrais renseigner une variable globale (déclarée
Public
par
exemple
en tête
du module où sont écrites tes procs coller_nom_ville_Ceres
et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait
permettre
de
passer
en
argument (optionnel) à ta procédure coller_nom_ville_Ceres
le
nom
du
classeur à
traiter (BudgetMatrice.xls par défaut sinon, pour
reprendre
ton
exemple,
BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter
si
besoin
Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres",
NomClasseur
End Sub
'============================= > > > > > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me
permettent
d'ouvrir
des
fichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un
fichier
Agence
Ceres
2001
2002.xls. La première macro lancée à partir de menu.xls
copie le
nom
d'une
ville du classeur BudgetMatrice.xls vers le classeur
Agence
Ceres
2001
2002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon
classeur
BudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()
ne fonctionne qu'à partir de BudgetMatrice.xls et non
pas
avec
le
fichier
BudgetSt Tropez nouvellement créé. Pas évident à
expliquer
!!!
Pouvez-vous
m'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres"
End Sub
Re re re,
Dans Enregistrer, la boite de dialogue GetSaveAsFilename renvoie dans la
variable NomClasseur le chemin complet du nom à enregistrer sous. Du coup
le
cellule IV1 conserve qqchose comme
d:dossiersousdossierBudgetSt Tropez.xls
Or Windows(Atraiter).Activate attend un nom de fichier seul (BudgetSt
Tropez.xls) -> erreur
Il y a un petit chgt à faire deans Enregistrer :
Sub Enregistrer()
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
With Workbooks("menu gammvert.xls")
.Sheets(1).Range("IV1").Value = Dir(NomClasseur) 'ici modif
.Saved = True
End With
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Par ailleurs, dans la procédure Mettre_à_jour_Agence_Ceres la ligne de
code
NomClasseur = ActiveWorkbook.Name
ne sert plus à rien, il faut la supprimer :
Sub Mettre_à_jour_Agence_Ceres()
Dim ClasseurAtraiter As String
ClasseurAtraiter = _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").ClearContents
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
Windows("menu gammvert.xls").Activate
Application.Run _
"'menu gammvert.xls'!coller_nom_ville_Ceres", ClasseurAtraiter '
End Sub
(J'en ai profité pour remettre à vide la cellule IV1 utilisée
temporairement
comme espace de stockage, pour de futures utilisations).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Désolé Frédéric mais cela plante toujours à la même ligne
Windows(Atraiter).Activate malgré les modifs apportées.
Voici ce que je fais :
Dans le classeur BudgetMatrice.xls j'exécute la macro Sub Enregistrer()
puis
je reviens dans le classeur menu gammvert.xls j'exécute la macro Sub
Mettre_à_jour_Agence_Ceres
Dans le classeur menu gammvert.xls j'ai bien le chemin du nouveau
classeur
ex C:gammvertBudgetSt Tropez.xls dans la cellule "IV1"
La macro copie_matrice du classeur Agence Ceres 2001 2002.xls fonctionne
bien il n'y a que la macro coller_nom_ville_Ceres qui bug
macro dans Agence Ceres 2001 2002.xls :
Sub copie_matrice()
'
' copie_matrice Macro
Sheets("matrice").Select
Sheets("matrice").Copy Before:=Sheets(1)
End Sub
Macro dans Budgetatrice.xls :
Sub Enregistrer()
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value > > NomClasseur
Workbooks("menu gammvert.xls").Saved = True
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." & _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Macro dans menu gammvert.xls :
Sub coller_nom_ville_Ceres(Optional ATraiter As String > > "BudgetMatrice.xls")
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
Dim ClasseurAtraiter As String
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter '
End Sub
Merci Pascale
"Frédéric Sigonneau" a écrit dans le
message
de news:Il faudrait commencer par s'assurer que la variable ATraiter contient
bien
unnom de fichier à ce moment-là. En principe, si j'ai bien compris, tu
lancesMettre_à_jour_Agence_Ceres (qui appelle ensuite
coller_nom_ville_Ceres)
*après*avoir exécuté Enregistrer.
L'ordre d'exécution des macros doit être :
1- Enregistrer
2- Mettre_à_jour_Agence_Ceres
3- coller_nom_ville_Ceres
Si tu n'as pas d'abord exécuté Enregistrer, la variable ATraiter va
être
unechaine vide (en tout cas lors de la première exécution - par la suite
il y
aurale nom précédent si la cellule IV1 n'est pas nettoyée, ce qu'il faudra
fairepour améliorer tout ça quand tu seras au point) et dans ce cas
l'erreur
estnormale.
Par ailleurs, tu peux avoir une erreur aussi si la variable
ClasseurAtraitern'est pas déclarée de type String au début de la procédure
Mettre_à_jour_Agence_Ceres
Dim ClasseurAtraiter As String
(ça, c'est un oubli de ma part, désolé).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Re,
Merci, j'ai tester et lorsque je lance la macro
Mettre_à_jour_Agence_Ceres()cela plante dans la macro sub coller_nom_ville_Ceres avec erreur sur
la
ligne : Windows(Atraiter).Activate Que dois-je faire ou que n'ai je
pas
compris
Merci
Sub coller_nom_ville_Ceres(Optional ATraiter As String > > > > "BudgetMatrice.xls")
'
' coller_nom_ville_Ceres Macro
'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
' Mettre_à_jour_Agence_Ceres Macro
' Macro enregistrée le 05/08/03 par AVENIR TELECOM AVENIR TELECOM
'
'
Dim ClasseurAtraiter
ClasseurAtraiter = Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur = ActiveWorkbook.Name
Windows("menu gammvert.xls").Activate
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurAtraiter
End Sub
"Frédéric Sigonneau" a écrit dans le
messagede news:Bonjour,
Dans ta proc Enregistrer, tu peux ajouter les lignes entourées
d'étoiles :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
'*****************ajoute ces lignes**********************
Workbooks("menu
gammvert.xls").Sheets(1).Range("IV1").Value=NomClasseurWorkbooks("menu gammvert.xls").Saved=True
'********************************************************
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement." &
_
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Maintenant, à la sortie de cette proc Enregistrer, le nom sous
lequel
BugetMatrice.xls vient d'être enregistré sous (NomClasseur dans la
proc)eststocké dans la cellule IV1 de la première feuille du classeur
"menu
gammvert.xls" (tu peux le mettre ailleurs si tu veux).
A partir de là, tu peux modifier les deux procédures (presque)
comme
proposédans ma première réponse, à ceci près qu'une variable globale
n'est
plusnécessaire puisque l'information dont on a besoin est dans le
classeur
"menugammvert.xls" :
'===========Úns un module standard
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
'********** "BudgetMatrice.xls" n'apparaît plus ...******
Windows(ATraiter).Activate
'********************************************************
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
'**************************ajout********************************
Dim ClasseurATraiter 'récupère le nouveau nom de
"BudgetMatrice.xls"
ClasseurATraiter= _
Workbooks("menu gammvert.xls").Sheets(1).Range("IV1").Value
'****************************************************************
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001 2002.xls'!copie_matrice"
NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter si besoin
Windows("menu gammvert.xls").Activate
'**********************************************************
'passe le nouveau nom de "BudgetMatrice.xls" en paramètre
Application.Run "'menu gammvert.xls'!coller_nom_ville_Ceres",
ClasseurATraiter
'**********************************************************
End Sub
'============================= > > > > >
Les modifications proposées (j'ai essayé de les commenter au fur
et à
mesuredans les procédures) éliminent la difficulté représentée par le
codage
"endur"de ton classeur "BudgetMatrice.xls". Ce nom n'apparaît plus dans
la
procédure'coller_nom_ville_Ceres'. A la place il y a une variable qui
devrait
contenir(tout ça reste quand même à tester in situ !!) le nouveau nom de
ton
classeurmatrice ("BudgetSt Tropez.xls" dans ton premier message).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric et merci encore,
Je reprends ce matin, ci-dessous la macro qui se trouve dans le
fichierBudgetMatrice.xls et qui automatise l'enregistrer-sous :
Sub Enregister()
'
Dim NomClasseur
Retour:
NomClasseur = Application.GetSaveAsFilename
If NomClasseur <> False Then
If Right(NomClasseur, 4) <> ".xls" Then
NomClasseur = NomClasseur & "xls"
End If
ThisWorkbook.SaveAs NomClasseur
Else
If MsgBox("Vous devez saisir un nom pour l'enregistrement."
& _
vbCrLf & "Voulez vous recommencer ?", _
vbExclamation + vbYesNo) = vbYes Then
GoTo Retour
End If
End If
End Sub
Tu me dis que c'est dans cette macro qu'il faut apporter les
modif
avecvariable NomClasseur, mais je t'avoue ne pas savoir comment m'y
prendre,jesuis débutante en VBA.....
De plus pour le problème du nom de fichier "en dur" :
Windows("BudgetMatrice.xls").Activate, qu'elle serait la
solution ?
Merci pour ton aide et bonne journée!
Pascale
"Frédéric Sigonneau" a écrit
dans le
messagede news:Re,
Merci Frédéric,
quelques précisions: La macro copie_matrice est celle qui
copie
lafeuillematrice du fichier Agence Ceres 2001 2001.xls dans ce même
classeur.Lamacro qui enregistre BudgetMatrice.xls sous, ex BudgetSt
Tropez.xlsestdansle fichier BudgetMatrice.xls .
D'accord. Dans ce cas, c'est dans cette macro-là qu'il faut
garder
unetrace dunouveau nom du fichier. Le classeur "menu gammvert.xls", étant
toujoursouvert,si je suis bien, le nom après l'enregistrement pourrait
peut-être
êtrestockédans une cellule de ce classeur avant d'être récupéré dans,
par
exemple,lavariable NomClasseur suggérée.La macro Mettre_à_jour_Agence_Ceres() fonctionne bien par
contre
cellenommée coller_nom_ville_Ceres() ne fonctionne qu'avec le
classeurBudgetMatrice.xls si j'enregistre sous Budget St Tropez,
elle
faittoujoursréférence aux données du classeur BudgetMatrice.xls et ouvre
en
mêmetempsle fichier!
Ce qui est normal, puisque tu as codé le nom du fichier "en
dur" :
Windows("BudgetMatrice.xls").Activate
C'est pour cela que j'essaye de te faire introduire le nom
d'une
variabledanscette instruction..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !j'espère que ces précisions t'aideront à comprendre mon
problème.
Merci beaucoup Pascale
"Frédéric Sigonneau" a écrit
dans lemessagede news:Bonjour,
Je suppose que la macro 'copie_matrice' est celle qui
enregistreleclasseurBudgetMatrice.xls sous, par ex, BudgetSt Tropez.xls ? Si
oui,
danscettemacro,tu pourrais renseigner une variable globale (déclarée
Public
parexempleen têtedu module où sont écrites tes procs coller_nom_ville_Ceres
et
Mettre_à_jour_Agence_Ceres) et cette variable pourrait
permettredepasserenargument (optionnel) à ta procédure coller_nom_ville_Ceres
le
nomduclasseur àtraiter (BudgetMatrice.xls par défaut sinon, pour
reprendre
tonexemple,BudgetSt Tropez.xls.
Concrètement :
'===========Úns un module standard
Public NomClasseur As String
Sub coller_nom_ville_Ceres(Optional ATraiter As
String="BudgetMatrice.xls")'
Windows(ATraiter).Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"NomClasseur¬tiveWorkbook.Name 'ou autre, à adapter
si
besoinWindows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres",NomClasseurEnd Sub
'============================= > > > > > > > > >
A tester..(j'utilise Excel 2002 et non Excel 97)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour à toutes et à tous,
Dans un classeur menu.xls j'ai plrs boutons qui me
permettentd'ouvrirdesfichiers, de les mettre à jour etc,
J'ai deux macros qui me servent à mettre à jour un
fichier
AgenceCeres20012002.xls. La première macro lancée à partir de menu.xls
copie lenomd'uneville du classeur BudgetMatrice.xls vers le classeur
Agence
Ceres20012002.xls et la deuxième macro met à jour ce classeur.
Mon problème est le suivant, lorsque j'enregistre mon
classeurBudgetMatrice.xls sous BudgetSt Tropez.xls la macro
Coller_nom_ville_Ceres()ne fonctionne qu'à partir de BudgetMatrice.xls et non
pas
aveclefichierBudgetSt Tropez nouvellement créé. Pas évident à
expliquer
!!!Pouvez-vousm'éclairer ?
Merci pour votre aide
Pascale
Sub coller_nom_ville_Ceres()
'
Windows("BudgetMatrice.xls").Activate
Application.Goto Reference:="ville"
Selection.Copy
Windows("agence ceres 2001 2002.xls").Activate
Range("A1").Select
ActiveSheet.Paste Link:=True
Windows("menu gammvert.xls").Activate
End Sub
Sub Mettre_à_jour_Agence_Ceres()
'
Windows("agence ceres 2001 2002.xls").Activate
Application.Run "'agence ceres 2001
2002.xls'!copie_matrice"Windows("menu gammvert.xls").Activate
Application.Run "'menu
gammvert.xls'!coller_nom_ville_Ceres"End Sub