Bonjour à tous,
J'ai découvert le VBA il y a peu et j'ai codé une macro afin de réparer les liens d'un répertoire de 300 classeurs (Workbooks) Excel à peu près. Pour cela j'ai utilisé la Cells.Replace What:=ToReplace(y), Replacement:=By(y)...dans une boucle en y (pour parcourir un tableau contenant les sous-chaînes à remplacer elle-même dans une boucle en x qui parcourt les feuilles de calcul (Worksheets). Mon code a fonctionné pour nombre de liens. Cependant j'ai également une plage de données à modifier dans des formules mais rien à faire replace n'y touche pas alors que via ctrl+h cela fonctionne.
Merci de m'avoir lu. Je compte sur vos idées pour m'expliquer ce qui ne va pas xD
Mon code fait 200 lignes grosso modo donc je ne poste que la partie qui utilise le replace pour ne pas vous perdre...:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 filename = Dir(folder & "*fs*" & "*.xls", vbNormal) 'strings to replace in the paths of formulas ToReplace(1) = folder 'the local folder path is always to be deleted ToReplace(2) = "\photo" 'photo is the destination folder from where FS are taken ToReplace(3) = "\\ABLGCVS0246\" 'for edition so these two paths could be to delete ToReplace(4) = "$T$10:$U$500;2" 'ce remplacement est celui qui ne fonctionne pas ToReplace(5) = "'M:\Service QUALITE\Gestion de l''outillage (calibrated tools)\Calibrated tools\[Liste des outillages calibrés (QM-F61).xls]" ToReplace(6) = "\Fiches suiveuses actives" ToReplace(7) = "rev 2.xls]" 'they will be replaced by those ones: By(1) = "M:\" By(2) = "" By(3) = "M:\" By(4) = "$M$2:$U$500;3" By(5) = "'M:\Service QUALITE\Gestion de l''outillage (calibrated tools)\Calibrated tools\[Liste des outillages calibrés (QM-F61) rev 2.xlsm]'" By(6) = "" By(7) = "rev 2.xlsm]" While Len(filename) <> 0 Set destinationWorkbook = Workbooks.Open(folder & filename) x = 1 For x = 1 To Worksheets.Count '4 files are protected. This conditional block unlock them If destinationWorkbook.name = "fs000106 310a2020-5, -10, -11.xls" _ Or destinationWorkbook.name = "fs000109 310a2041.xls" _ Or destinationWorkbook.name = "fs000223 335-106-4xx-0.xls" _ Or destinationWorkbook.name = "fs000270 AFT EMS 5A-B.xlsm" Then destinationWorkbook.Unprotect End If y = 1 For y = 1 To 7 Worksheets(x).Cells.Replace What:=ToReplace(y), _ Replacement:=By(y), _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False Next y Next x
Partager