Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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
 
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
 
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+
 
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:
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
857
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…