XL 2016 Nom de plage de cellule d'un classeur 1 vers un classeur 2

Sofiane Boukecha

XLDnaute Nouveau
Bonjour à tous,

je dispose de deux classeurs différents, dans chacun il y'a des noms de plages différentes;
je veux utiliser dans le classeur 1 un nom de plage qui est dans le classeur 2
je voudrai savoir si il y'a un moyen facile sans passé par la création à nouveau d'un nom de plage dans le classeur 1 qui va faire référence au classeur 2.

j'espère que c'est claire.
merci à vous tous
 

zebanx

XLDnaute Accro
Bonjour Sofiane

Je n'ai peut-être pas bien compris mais le code suivant permet :
- de copier d'un fichier A à un fichier B toutes les plages nommées avec le même nom / même range
- ne copie rien s'il n'y a pas de référence de feuille identique (testé en supprimant sur le fichier récepteur une feuil4).
Par contre, si tu as une plage nommée dans le fichier B qui fait déjà référence à un range, les valeurs seront écrasées par la macro (ie : nom conservé mais plage correspondra à celle du fichier A)
- Et il faut que les deux fichiers soit ouvert, copier ce code dans un module du fichier de départ et changer le nom dans la macro du fichier de réception.

@+
zebanx

---- A tester entre deux fichiers temporaires ---
Sub Copy_All_Defined_Names()
On Error GoTo prochain
For Each x In ActiveWorkbook.Names
Workbooks("Test_b.xls").Names.Add Name:=x.Name, _
RefersTo:=x.Value
prochain:
Next x
End Sub
 

Sofiane Boukecha

XLDnaute Nouveau
Bonjour,
merci pour votre réponse
j'ai collé ton code dans mon fichier source, et changer le nom de mon fichier de destination, mais il m'affiche qu'il y'a une erreur

Sub Copy_All_Defined_Names()
On Error GoTo prochain
For Each x In ActiveWorkbook.Names
Workbooks("Test.xlsx").Names.Add Name:=x.Name, _
RefersTo:=x.Value

prochain:
Next x
End Sub
 

zebanx

XLDnaute Accro
Re

Peut-être un problème d'espace lors de ma copie du code, désolé.
Ci-joint les deux fichiers avec un code...opérationnel.
Les deux fichiers doivent être ouvert et, sur un deuxième test, il faut être sur le fichier de départ quand on lance la macro.

@+
 

Pièces jointes

  • fichier_B.xls
    13.5 KB · Affichages: 18
  • fichier_A.xls
    24 KB · Affichages: 18

Sofiane Boukecha

XLDnaute Nouveau
merci encore,
le code fonctionne bien, mais il ne répond pas à mon besoin
ce que je cherche, que le code copie les noms avec plage source du fichier A dans le fichier B, non pas nommé les plages du fichier B qui correspondent aux plages du fichier A.

ex: dans le fichier A il y'a le nom "Adress". je veux avoir le même nom dans le fichier B qui fait référence au plage du fichier A
[fichier_A.xlsm]Feuil1!$D$1:$D$30

je ne sais pas, peut être c'est pas aussi claire
merci
 

job75

XLDnaute Barbatruc
Bonsoir Sofiane, zebanx,
Code:
Sub CopieNoms()
Dim source$, dest$, nom As Name
source = "fichier_A.xlsm" 'à adapter
dest = "fichier_B.xlsm" 'à adapter
For Each nom In Workbooks(source).Names
If TypeName(Evaluate(nom.RefersTo)) = "Range" Then _
    Workbooks(dest).Names.Add nom.Name, "=[" & source & "]" & Mid(nom.RefersTo, 2)
Next
End Sub
A+
 

zebanx

XLDnaute Accro
Bonsoir et bravo JOB75:)

Une petite remarque : L'impression que le code "plante" si le nom du fichier de départ contient des " " (erreur 1004, j'ai pensé à INDIRECT qui me fait le même type de problème sans les "'" si les worksheets contiennent " " ou "-").
A confirmer...
 
Dernière édition:

job75

XLDnaute Barbatruc
Re,

D'accord zebanx, s'il peut y avoir des espaces dans le nom du fichier ou des feuilles sources utiliser :
Code:
Sub CopieNoms()
Dim source$, dest$, nom As Name, x$
source = "fichier_A.xlsm" 'à adapter
dest = "fichier_B.xlsm" 'à adapter
On Error Resume Next
For Each nom In Workbooks(source).Names
    x = Mid(nom.RefersTo, 2)
    x = Replace(x, "'", "")
    x = Replace(x, "!", "'!")
    Workbooks(dest).Names.Add nom.Name, "='[" & source & "]" & x
Next
End Sub
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 320
Messages
2 087 223
Membres
103 497
dernier inscrit
JP9231