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