Mise à jour de liens d'un fichier "maitre"
Bonjour,
J'ai un fichier excel qui cherche des données dans des dizaines d'autres fichiers excel.
Ces liens vers ces fichiers ont été mis en utilisant le chemin complet en dur dans les formules.
ex : c:\temp\[fichierExcel.xls]fev19'!$M$6
Aujourd'hui, nous réorganisons notre dossier de stockage et souhaitons déplacer le fichier maitre et tous les fichiers associés.
Il existe des milliers de référence explicites au chemin dans le fichier principal qui a été construit au fil des années.
Existe t-une méthode permettant d’éditer ces références de manières semi-automatisé ?
Exemple : remplacer tous les liens vers des fichiers dont la référence dans le fichier maitre est "c:\temp\*.xls" vers des liens vers "c:\temp2\*.xls".
Merci d'avance pour ceux qui pourraient me donner des infos.
Bonjour,
Une piste !
Le nom des classeurs ne changeant pas (normalement !), il suffit de modifier les chemins dans les formules. Afin d'éviter toutes ouvertures intempestives de la fenêtre de l'explorateur à la validation des formules, il est préférable que les classeurs se trouvent déjà dans le nouveau dossier. Le code ci-dessous est à mettre dans un module standard du classeur maître :
Sub Test()
Dim Classeur As Workbook
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim AncChemin As String
Dim NouvChemin As String
'le classeur maître où doit se trouver cette procédure !
Set Classeur = ThisWorkbook
'ancien dossier
AncChemin = "c:\temp\"
'nouveau dossier
NouvChemin = "c:\temp2\"
For Each Fe In Classeur.Worksheets
'défini la plage sur toute zone utilisée dans la feuille en cours
Set Plage = DefPlage(Fe)
'boucle sur les cellules contenant des formules et effectue le remplacement
For Each Cel In Plage.SpecialCells(xlCellTypeFormulas)
Cel.Formula = Replace(Cel.Formula, AncChemin, NouvChemin)
Next Cel
Next Fe
End Sub
Function DefPlage(Fe As Worksheet, Optional L As Long = 1, Optional C As Long = 1) As Range
On Error GoTo Fin
With Fe
Set DefPlage = .Range(.Cells(L, C), _
.Cells(.Cells.Find("*", .[A1], -4123, , _
1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
2, 2).Column))
End With
Exit Function
Fin:
Set DefPlage = Nothing
End Function- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Essayer avec ce classeur que j'avais développé en son temps pour afficher et modifier toute liaison d'un fichier Office : Excel, Word, PowerPoint.
1- cliquer sur le bouton "Démarrer"
2- entrer le chemin du répertoire où se trouvent vos fichiers
3- tous les liens s'affichent
4- entrer la chaîne à remplacer et la chaîne à y substituer
merci pour ces réponses rapides.
Je vais essayer ces manipulations vendredi et je viendrai vous dire ce que cela a donné.