OVH Cloud OVH Cloud

fermé pour cause de déménagement!

5 réponses
Avatar
daniel M.
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

5 réponses

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


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


Avatar
daniel M.
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" a écrit dans le message
de news:
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 !


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





Avatar
Frédéric Sigonneau
Bonjour,


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 fichiersPROFESSIONNELtous les bl a date.xls"

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

Workbooks.Open Filename:= _
"d:mes fichiersPROFESSIONNELtous 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


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 !

"Frédéric Sigonneau" a écrit dans le message
de news:
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 !


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







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


.



Avatar
sabatier
bonjour anonymous

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

-----Message d'origine-----
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 fichiersPROFESSIONNELtous 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


.





installé