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 :
"Frédéric Sigonneau" <frederic....@wanadoo.fr> a écrit dans le message
de news:4033A36C...@wanadoo.fr...
"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
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-----
>.
>
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é