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

macros excel97

8 réponses
Avatar
Pascale
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

8 réponses

Avatar
Frédéric Sigonneau
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


Avatar
Pascale
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
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
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










Avatar
Frédéric Sigonneau
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
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
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












Avatar
Pascale
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=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
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





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















Avatar
Frédéric Sigonneau
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=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
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





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

















Avatar
Pascale
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
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=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






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
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




















Avatar
Frédéric Sigonneau
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
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=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






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
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






















Avatar
Pascale
Merci mille fois Frédéric, cela fonctionne à merveille
Quelle patience....Merci encore
"Frédéric Sigonneau" a écrit dans le message
de news:
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



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=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
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
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