Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

fermé pour cause de déménagement!

1 view
Skip to first unread message

daniel M.

unread,
Feb 17, 2004, 12:00:39 PM2/17/04
to
Bonjour à tous
Je dois transferer mon dossier de classeurs excel du disque C vers disque
D
c:/mes fichiers/dossiers excel vers d:/mes fichiers/dossiers excel
Mon dossier excel comporte une cinquantaine de classeurs ( poids total: 60
mo) .
ces classeurs comportent des centaines de liens entre eux, mais aussi des
centaines de macro qui disent par exemple :
Workbooks.Open Filename:= _
"c:\mes fichiers\PROFESSIONNEL\tous les bl a date.xls"
à une certaine époque quelqu'un m'avait conseillé d'inclure la routine
suivante dans chaque classeur (ce que j'ai fait)
Private Sub Workbook_Open()
Sheets(1).[A2].Value = ActiveWorkbook.Path & "\"
(sheets 1 comportant le chemin d'accés)
mais aprés quelques essais j'avoue que je n'ai pas trop compris l'utilité de
cette routine (vu qu'aucun lien ni macro ne se sont redirigés
automatiquement).
En ce qui me concerne, je trouve excel merveilleux, sauf si on doit le
changer de place..( j'ai d'ailleurs un problême semblable chaque année quand
je dois faire une sauvegarde generale d'archive. Si je ne replace pas les
dossiers à la même place pour les exploiter ça ne marche pas....mais pendant
ce temps, qu'est ce que je fais du dossier dont je me sers tous les jours?).
Bref, si quelqu'un pouvait m'aider à solutionner ce problême reccurent...je
serais le plus heureux des hommes!!.
bien cordialement
daniel


Frédéric Sigonneau

unread,
Feb 18, 2004, 12:39:56 PM2/18/04
to
Bonjour,

Pour la modification des chemins programmés en dur dans ton code, je peux te
proposer cette petite macro :

Sub ModifierCodeVBA(NomClasseur, AvantModif, ApresModif)
Dim VBComp, S$
With Workbooks(NomClasseur).VBProject
For Each VBComp In .VBComponents
With VBComp.CodeModule
On Error Resume Next
S = .Lines(1, .CountOfLines)
.DeleteLines 1, .CountOfLines
On Error GoTo 0
S = Join(Split(S, AvantModif), ApresModif)
.AddFromString S
End With
Next
End With
Workbooks(NomClasseur).Save
End Sub 'fs

Tu peux l'utiliser dans une procédure qui examine ton répertoire "d:/mes
fichiers/dossiers excel", ouvre les classeurs les uns après les autres, les
modifie puis les referme (pas vraiment testé cette partie de ma réponse mais
c'est un code très "classique") :

Sub ScanneDossier()
Dim I As Long, Racine$

Racine = "d:/mes fichiers/dossiers excel"
With Application.FileSearch
.NewSearch
.FileType = msoFileTypeExcelWorkbooks
.LookIn = Racine
.SearchSubFolders = True
.Execute
With .FoundFiles
For I = 1 To .Count
Workbooks.Open Dir(.Item(I))
ModifierCodeVBA Dir(.Item(I)), "C:\", "D:\"
Workbooks(Dir(.Item(I))).Close
Next I
End With
End With

End Sub

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 !

"daniel M." a écrit :

daniel M.

unread,
Feb 19, 2004, 6:21:35 AM2/19/04
to
Tout d'abord je te remerçie de ta réponse rapide.
J'ai quelques petits prob de compréhension:
1) tu me donnes 1 ou 2 macros? (apparamment j'en vois 2). Je les inclues
dans le classeur perso.xls?.
2) si je comprends bien j'emmene tout dans le repertoire D puis je lance la
macro...mais:
3) je la lance pour chaque classeur individuellement ( ou bien elle va
traiter tous les classeurs à la suite?)
4) si j'ai bien compris cette macro va modifier le chemin que j'avais inclu
dans chaque classeur? (Private Sub Workbook_Open()
Sheets(1).[A2].Value = ActiveWorkbook.Path & "\" ),
Mais va t'elle modifier le chemin dans toutes les macro elles-mêmes?
En tout cas si ça marche je t'invite à manger une potée lorraine dans le
restaurant le plus proche!
bien cordialement
daniel

"Frédéric Sigonneau" <frederic....@wanadoo.fr> a écrit dans le message
de news:4033A36C...@wanadoo.fr...

Frédéric Sigonneau

unread,
Feb 19, 2004, 8:05:43 AM2/19/04
to
Bonjour,

"daniel M." a écrit :


>
> Tout d'abord je te remerçie de ta réponse rapide.
> J'ai quelques petits prob de compréhension:
> 1) tu me donnes 1 ou 2 macros? (apparamment j'en vois 2). Je les inclues
> dans le classeur perso.xls?

Il y a bien deux macros : ModifierCodeVBA permet de remplacer dans 1 classeur
une chaine de caractères par une autre et ScanneDossier permet de parcourir un
répertoire et ses sous-répertoires pour traiter les classeurs un par un.
Tu peux copier ces macros dans ton perso.xls (dans un module standard) ou dans
un classeur quelconque, mais en dehors du dossier à parcourir par ScanneDossier.

> 2) si je comprends bien j'emmene tout dans le repertoire D puis je lance la
> macro...mais:

oui

> 3) je la lance pour chaque classeur individuellement ( ou bien elle va
> traiter tous les classeurs à la suite?)

Tu lances ScanneDossier, après avoir remplacé, si besoin,

"d:/mes fichiers/dossiers excel"

par le chemin réel de tes fichiers sur ton disque d:\
C'est ScanneDossier qui va se charger d'appeler l'autre macro pour opérer la
modification demandée classeur par classeur.

> 4) si j'ai bien compris cette macro va modifier le chemin que j'avais inclu
> dans chaque classeur? (Private Sub Workbook_Open()
> Sheets(1).[A2].Value = ActiveWorkbook.Path & "\" ),

non, la macro n'agit que sur le code en dur. ActiveWorkbook.Path renvoie le
chemin du classeur où qu'il soit sur le disque dur (et renvoie donc le bon
chemin après déplacement du classeur de C vers D).

> Mais va t'elle modifier le chemin dans toutes les macro elles-mêmes?

Oui. Partout, dans ton code (et dans n'importe quel module de code : standard,
feuilles, ThisWorkbook, etc), où tu as écris des chemins comme l'exemple que tu
donnais :

Workbooks.Open Filename:= _
"c:\mes fichiers\PROFESSIONNEL\tous les bl a date.xls"

tu auras, après le travail de la macro :

Workbooks.Open Filename:= _
"d:\mes fichiers\PROFESSIONNEL\tous les bl a date.xls"

> En tout cas si ça marche

Ça devrait marcher, *sauf pour les classeurs dont le code VBA est protégé par un
mot de passe*. Si c'est le cas pour tous tes classeurs (que leur VBAProject soit
protégé) il y a moyen de demander le mot de passe au cas par cas pour déprotéger
le classeur avant de le modifier. Ça complique le travail mais ce n'est pas
mission impossible. Demande si besoin.

> je t'invite à manger une potée lorraine dans le
> restaurant le plus proche!

A l'occasion, pourquoi pas :)

> bien cordialement
> daniel

anon...@discussions.microsoft.com

unread,
Feb 27, 2004, 8:11:16 AM2/27/04
to
Bonjour,
Mon propos est à long terme.
1. Il est strictement interdit de mettre des libellés en
dur dans les différentes macros : c'est un principe absolu
chez tous les programmeurs. Jamais.

2. Pour résoudre habilement et intelligemment ce problème,
il est nécessaire de mettre dans un module caractérisé
tous les noms de répertoires, de fichiers, de tables,...
qui, soit doivent être changés régulièrement(annuellement,
semestriellement,...), soit sont utilisés à plusieurs
endroits dans des feuilles et/ou macros différentes.
Cette procédure s'appelle le paramétrage.
Ce module caractérisé peut être un module EXCEL ou un
fichier texte, d'extension .INI qui contient tous tes
libellés, messages,...

Et chaque année tu modifies une seule fois ce fichier .INI.
C'est ainsi que je procède depuis plus de dix ans...
Sans perte de temps ou de données.
>-----Message d'origine-----

>.
>

sabatier

unread,
Feb 27, 2004, 4:51:08 PM2/27/04
to
bonjour anonymous

anon...@discussions.microsoft.com a écrit:


> Bonjour,
> Mon propos est à long terme.

ben oui, mais moi, à court terme, j'ai une question ou deux à poser...

> 1. Il est strictement interdit de mettre des libellés en
> dur dans les différentes macros : c'est un principe absolu
> chez tous les programmeurs. Jamais.


c'est quoi des libellés en dur? y en a-t-il des en mou?


> 2. Pour résoudre habilement et intelligemment ce problème,
> il est nécessaire de mettre dans un module caractérisé
> tous les noms de répertoires, de fichiers, de tables,...
> qui, soit doivent être changés régulièrement(annuellement,
> semestriellement,...), soit sont utilisés à plusieurs
> endroits dans des feuilles et/ou macros différentes.
> Cette procédure s'appelle le paramétrage.
> Ce module caractérisé peut être un module EXCEL ou un
> fichier texte, d'extension .INI qui contient tous tes
> libellés, messages,...

je vois bien à peu près comment est bâti un fichier .ini
mais dans ce cas, peux-tu me dire où il doit être installé
et commment doivent-être rédigés les libellés, messages, etc..
pour être pris en compte, si j'ai bien compris, à chaque
changement d'année?

> Et chaque année tu modifies une seule fois ce fichier .INI.
> C'est ainsi que je procède depuis plus de dix ans...

je n'en suis pas encore là, quoi qu'en pensent mes scudeurs actuels
et préférés...

> Sans perte de temps ou de données.

par contre, comme j'aimerais en être là...
alors si tu peux m'expliquer...habilement et intelligemment
merci d'avance
jps

installé

0 new messages