Bon enfin !!!

Alors voilà, la procédure suivante fonctionne parfaitement (j'ai retiré les qqs bugs qui trainaient encore dans le dernier code placé en ligne) :

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Sub RemplacerEtSupprimerNomsOEKN()
 
    Dim i, j, X As Integer
    Dim Cible, PathName, FileName, FileToWorkWith, FeuilleOuNomCellule As String
    Dim AncienNom, NouveauNom As String
    Dim Classeur As Workbook
    Dim Feuille As Worksheet
 
' S'assurer que le nom à traiter est bien dans le workbook
' Voir pour les noms de cellules spécifiques à une feuille ???
 
  ' Chemin d'accès et Nom du fichier à traiter
    PathName = "C:\Data\"
    FileName = "FichierATraiter.xls"
    FileToWorkWith = PathName & FileName
 
  ' S'assurer que le workbook à traiter est ouvert
  ' S'assurer que c'est lui qui est le workbook actif
 
    MsgBox IsFileOpen(FileToWorkWith)
    If IsFileOpen(FileToWorkWith) _
    Then
      ' Afficher un message indiquant que le fichier est ouvert et actif.
        MsgBox FileName & " : " & "déjà ouvert et actif !"
    Else
      ' Afficher un message indiquant que le fichier n'était pas ouvert
      ' qu'il va être ouvert et activé
        MsgBox FileName & " : " & "va être ouvert !"
        Workbooks.Open FileToWorkWith
    End If
 
  ' Comme le fichier est ouvert et en mémoire, plus besoin du pathway, donc
  ' on désigne le fichier sur lequel on va travailler, uniquement par son nom
  ' sans intégrer le pathway !!!
    Workbooks(FileName).Activate
    Set Classeur = ActiveWorkbook
 
    For i = 1 To UBound(TableauDesNoms)
 
      ' On met en correspondance l'ancien et le nouveau nom qui est destiné à le remplacer
        MsgBox TableauDesNoms(i)
 
      ' Vérifier si le nom comprend le nom d'une feuille du classeur
      ' en vérifiant la présence du caractère "!" dans la chaine de caractère
      ' du nom traité
      '
        If InStr(1, TableauDesNoms(i), "!") > 0 Then
            X = InStr(1, TableauDesNoms(i), "!")
            FeuilleOuNomCellule = Left(TableauDesNoms(i), X - 1)
            AncienNom = Right(TableauDesNoms(i), Len(TableauDesNoms(i)) - X)
            NouveauNom = Right(TableauDesNouveauxNoms(i), Len(TableauDesNouveauxNoms(i)) - X)
            MsgBox FeuilleOuNomCellule & " // " & AncienNom & " // " & NouveauNom
            Cible = Sheets(FeuilleOuNomCellule).Names(AncienNom).RefersTo
            Sheets(FeuilleOuNomCellule).Cells.Replace What:=AncienNom, Replacement:=NouveauNom, LookAt:=xlPart
            Sheets(FeuilleOuNomCellule).Names(AncienNom).Delete
            Sheets(FeuilleOuNomCellule).Names.Add Name:=NouveauNom, RefersTo:=Cible
        Else
            Cible = Classeur.Names(TableauDesNoms(i)).RefersTo
          ' Pour chacune des feuilles du workbook actif, remplace l'ancien nom par le nouveau
            For j = 1 To Sheets.Count
                Sheets(j).Cells.Replace What:=TableauDesNoms(i), Replacement:=TableauDesNouveauxNoms(i), LookAt:=xlPart
            Next j
          ' Supprime ensuite l'ancien nom
            Classeur.Names(TableauDesNoms(i)).Delete
          ' et renomme la plage initiale en lui affectant la même adresse
            Classeur.Names.Add Name:=TableauDesNouveauxNoms(i), RefersTo:=Cible
        End If
 
    Next i
 
End Sub

Un grand merci à vous tous et en particulier à OUSKEL'NOR