OVH Cloud OVH Cloud

Nommer des plages de cellules d'un autre classeur

7 réponses
Avatar
GGAL
Bonjour,

À partir d'un classeur de départ (base.xls), j'ai nommé manuellement des
plages provenant d'un autre classeur Données.xls, par Insertion>Nom>Définir…
J'ai donc par exemple :

ListeOp1
Fait référence à
='D:\Archives\Données.xls'!Oper1

ListeOp2
Fait référence à
='D:\Archives\Données.xls'!Oper2
etc.

Je souhaiterais, par macro, pouvoir modifier le chemin d'accès, en
remplaçant D:\Archives\ par C:\DOCU\TOP\ de façon à avoir :

ListeOp1
Fait référence à
='C:\DOCU\TOP\Données.xls'!Oper1
etc.

Comment faire ?
Merci,
GGal

7 réponses

Avatar
anonymousA
Bonjour,

en utilisant Ubound(Split(ActiveWorkbook.Names("ListeOp1"), ""))
nb=Ubound(Split(ActiveWorkbook.Names("ListeOp1"), ""))

donc ensuite
ActiveWorkbook.Names("ListeOp1").RefersToR1C1="=C:DOCUTOP"
&Split(ActiveWorkbook.Names("ListeOp1"), "") (nb)

Et ainsi de suite pour les utres noms.

A+

Bonjour,

À partir d'un classeur de départ (base.xls), j'ai nommé manuellement des
plages provenant d'un autre classeur Données.xls, par Insertion>Nom>Définir…
J'ai donc par exemple :

ListeOp1
Fait référence à
='D:ArchivesDonnées.xls'!Oper1

ListeOp2
Fait référence à
='D:ArchivesDonnées.xls'!Oper2
etc.

Je souhaiterais, par macro, pouvoir modifier le chemin d'accès, en
remplaçant D:Archives par C:DOCUTOP de façon à avoir :

ListeOp1
Fait référence à
='C:DOCUTOPDonnées.xls'!Oper1
etc.

Comment faire ?
Merci,
GGal


Avatar
Pierre Fauconnier
Bonjour

L'idée es d'itérer sur les noms du classeur, de vérifier la propriété
RefersTo de chaque nom pour voir si l'ancien nom s'y trouve, et si oui, de
remplacer l'ancien nom par le nouveau. Ceci pourrait faire l'affaire

Sub ModifierCibles()
Dim NomAncienClasseur As String
Dim NomNouveauClasseur As String
Dim Nom As Name

NomAncienClasseur = "c:données[cible.xls]"
NomNouveauClasseur = "c:données[nouvellecible.xls]"

For Each Nom In ThisWorkbook.Names
If InStr(1, Nom.RefersTo, NomAncienClasseur, vbTextCompare) <> 0
Then _
Nom.RefersTo = Replace(expression:=Nom.RefersTo,
Find:=NomAncienClasseur, _
Replace:=NomNouveauClasseur, compare:=vbTextCompare)
Next Nom

End Sub

Cela convient-il?

--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"GGAL" a écrit dans le message de news:

Bonjour,

À partir d'un classeur de départ (base.xls), j'ai nommé manuellement des
plages provenant d'un autre classeur Données.xls, par
Insertion>Nom>Définir.
J'ai donc par exemple :

ListeOp1
Fait référence à
='D:ArchivesDonnées.xls'!Oper1

ListeOp2
Fait référence à
='D:ArchivesDonnées.xls'!Oper2
etc.

Je souhaiterais, par macro, pouvoir modifier le chemin d'accès, en
remplaçant D:Archives par C:DOCUTOP de façon à avoir :

ListeOp1
Fait référence à
='C:DOCUTOPDonnées.xls'!Oper1
etc.

Comment faire ?
Merci,
GGal


Avatar
GGAL
Il y a quelque chose qui ne va pas pour la méthode d'anonymousA, mais la
méthode de Pierre fonctionne.
Je réfléchis : Plutôt que de remplacer des chemins ou des classeurs, et
puisqu'on connaît le chemin du classeur Données.xls, on ne peut pas nommer
les plages directement par macro ?
GGal


Bonjour

L'idée es d'itérer sur les noms du classeur, de vérifier la propriété
RefersTo de chaque nom pour voir si l'ancien nom s'y trouve, et si oui, de
remplacer l'ancien nom par le nouveau. Ceci pourrait faire l'affaire

Sub ModifierCibles()
Dim NomAncienClasseur As String
Dim NomNouveauClasseur As String
Dim Nom As Name

NomAncienClasseur = "c:données[cible.xls]"
NomNouveauClasseur = "c:données[nouvellecible.xls]"

For Each Nom In ThisWorkbook.Names
If InStr(1, Nom.RefersTo, NomAncienClasseur, vbTextCompare) <> 0
Then _
Nom.RefersTo = Replace(expression:=Nom.RefersTo,
Find:=NomAncienClasseur, _
Replace:=NomNouveauClasseur, compare:=vbTextCompare)
Next Nom

End Sub

Cela convient-il?

--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"GGAL" a écrit dans le message de news:

Bonjour,

À partir d'un classeur de départ (base.xls), j'ai nommé manuellement des
plages provenant d'un autre classeur Données.xls, par
Insertion>Nom>Définir.
J'ai donc par exemple :

ListeOp1
Fait référence à
='D:ArchivesDonnées.xls'!Oper1

ListeOp2
Fait référence à
='D:ArchivesDonnées.xls'!Oper2
etc.

Je souhaiterais, par macro, pouvoir modifier le chemin d'accès, en
remplaçant D:Archives par C:DOCUTOP de façon à avoir :

ListeOp1
Fait référence à
='C:DOCUTOPDonnées.xls'!Oper1
etc.

Comment faire ?
Merci,
GGal







Avatar
anonymousA
tu as raison. il y a 2 erreurs dans la proc que je t'ai communiquée.
la 1ere,il manque un ' avant le C de =C.
la 2eme, il faut écrire RefersTo au lieu de RefersToR1C1.

Mea culpa.

A+


Il y a quelque chose qui ne va pas pour la méthode d'anonymousA, mais la
méthode de Pierre fonctionne.
Je réfléchis : Plutôt que de remplacer des chemins ou des classeurs, et
puisqu'on connaît le chemin du classeur Données.xls, on ne peut pas nommer
les plages directement par macro ?
GGal


Bonjour

L'idée es d'itérer sur les noms du classeur, de vérifier la propriété
RefersTo de chaque nom pour voir si l'ancien nom s'y trouve, et si oui, de
remplacer l'ancien nom par le nouveau. Ceci pourrait faire l'affaire

Sub ModifierCibles()
Dim NomAncienClasseur As String
Dim NomNouveauClasseur As String
Dim Nom As Name

NomAncienClasseur = "c:données[cible.xls]"
NomNouveauClasseur = "c:données[nouvellecible.xls]"

For Each Nom In ThisWorkbook.Names
If InStr(1, Nom.RefersTo, NomAncienClasseur, vbTextCompare) <> 0
Then _
Nom.RefersTo = Replace(expression:=Nom.RefersTo,
Find:=NomAncienClasseur, _
Replace:=NomNouveauClasseur, compare:=vbTextCompare)
Next Nom

End Sub

Cela convient-il?

--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"GGAL" a écrit dans le message de news:

Bonjour,

À partir d'un classeur de départ (base.xls), j'ai nommé manuellement des
plages provenant d'un autre classeur Données.xls, par
Insertion>Nom>Définir.
J'ai donc par exemple :

ListeOp1
Fait référence à
='D:ArchivesDonnées.xls'!Oper1

ListeOp2
Fait référence à
='D:ArchivesDonnées.xls'!Oper2
etc.

Je souhaiterais, par macro, pouvoir modifier le chemin d'accès, en
remplaçant D:Archives par C:DOCUTOP de façon à avoir :

ListeOp1
Fait référence à
='C:DOCUTOPDonnées.xls'!Oper1
etc.

Comment faire ?
Merci,
GGal








Avatar
Pierre Fauconnier
Tu as raison, on peut nommer directement la plage par macro.

Si le nom existe déjà, le renommer à nouveau remplace l'ancienne référence
par la nouvelle

Sub NommerPlage()
Names.Add Name:="Test", RefersTo:="=$a$1"
Names.Add Name:="Cible",
RefersTo:="='c:données[cible.xls]feuil1'!$a$1"
End Sub

Attention. Si tu fais référence à une plage nommée dans un autre classeur,
il faut ôter les crochets encadrant le nom du classeur

Names.Add Name:="cible1", RefersTo:="='c:donnéescible.xls'!nom"


Ok?

--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"GGAL" a écrit dans le message de news:

Il y a quelque chose qui ne va pas pour la méthode d'anonymousA, mais la
méthode de Pierre fonctionne.
Je réfléchis : Plutôt que de remplacer des chemins ou des classeurs, et
puisqu'on connaît le chemin du classeur Données.xls, on ne peut pas nommer
les plages directement par macro ?
GGal


Bonjour

L'idée es d'itérer sur les noms du classeur, de vérifier la propriété
RefersTo de chaque nom pour voir si l'ancien nom s'y trouve, et si oui,
de
remplacer l'ancien nom par le nouveau. Ceci pourrait faire l'affaire

Sub ModifierCibles()
Dim NomAncienClasseur As String
Dim NomNouveauClasseur As String
Dim Nom As Name

NomAncienClasseur = "c:données[cible.xls]"
NomNouveauClasseur = "c:données[nouvellecible.xls]"

For Each Nom In ThisWorkbook.Names
If InStr(1, Nom.RefersTo, NomAncienClasseur, vbTextCompare) <> 0
Then _
Nom.RefersTo = Replace(expression:=Nom.RefersTo,
Find:=NomAncienClasseur, _
Replace:=NomNouveauClasseur, compare:=vbTextCompare)
Next Nom

End Sub

Cela convient-il?

--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"GGAL" a écrit dans le message de news:

Bonjour,

À partir d'un classeur de départ (base.xls), j'ai nommé manuellement
des
plages provenant d'un autre classeur Données.xls, par
Insertion>Nom>Définir.
J'ai donc par exemple :

ListeOp1
Fait référence à
='D:ArchivesDonnées.xls'!Oper1

ListeOp2
Fait référence à
='D:ArchivesDonnées.xls'!Oper2
etc.

Je souhaiterais, par macro, pouvoir modifier le chemin d'accès, en
remplaçant D:Archives par C:DOCUTOP de façon à avoir :

ListeOp1
Fait référence à
='C:DOCUTOPDonnées.xls'!Oper1
etc.

Comment faire ?
Merci,
GGal









Avatar
GGAL
OK

J'ai adapté la solution à mon cas de la façon suivante :
Dans le classeur Base.xls je crée une nouvelle feuille Init où je mets le
nom des plages : dans la colonne A les plges du classeur Base.xls, et dans la
colonne B et en regard les plages correspondantes du classeur Données.xls
(j'utilise pour cela par exemple Insertion>Nom>Coller une liste, puis comme
le chemin apparaît dans les cellules de la colonne B, je le remplace par rien
et je n'ai que le nom de la plage)
Ensuite j'écris la procédure suivante :

Sub NommerPlage()
Workbooks("Base.xls").Sheets("Init").Activate
DerLig=Range("A65536").EndxlUp).Row
For Ligne = 1 To DerLig
Names.Add Name:=Range("A" & Ligne), RefersTo:="='" & chem & "'!" & Range("B"
& Ligne)
Next Ligne
WorkBooks("Base.xls").Sheets(1).Activate
End Sub

chem est le chemin du classeur Données.xls défini par ailleurs.
Attention à la saisie des caractères :
"='" est en fait " puis = puis ' puis "
"'!" est en fait " puis ' puis ! puis "

GGAL


Tu as raison, on peut nommer directement la plage par macro.

Si le nom existe déjà, le renommer à nouveau remplace l'ancienne référence
par la nouvelle

Sub NommerPlage()
Names.Add Name:="Test", RefersTo:="=$a$1"
Names.Add Name:="Cible",
RefersTo:="='c:données[cible.xls]feuil1'!$a$1"
End Sub

Attention. Si tu fais référence à une plage nommée dans un autre classeur,
il faut ôter les crochets encadrant le nom du classeur

Names.Add Name:="cible1", RefersTo:="='c:donnéescible.xls'!nom"


Ok?

--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"GGAL" a écrit dans le message de news:

Il y a quelque chose qui ne va pas pour la méthode d'anonymousA, mais la
méthode de Pierre fonctionne.
Je réfléchis : Plutôt que de remplacer des chemins ou des classeurs, et
puisqu'on connaît le chemin du classeur Données.xls, on ne peut pas nommer
les plages directement par macro ?
GGal


Bonjour

L'idée es d'itérer sur les noms du classeur, de vérifier la propriété
RefersTo de chaque nom pour voir si l'ancien nom s'y trouve, et si oui,
de
remplacer l'ancien nom par le nouveau. Ceci pourrait faire l'affaire

Sub ModifierCibles()
Dim NomAncienClasseur As String
Dim NomNouveauClasseur As String
Dim Nom As Name

NomAncienClasseur = "c:données[cible.xls]"
NomNouveauClasseur = "c:données[nouvellecible.xls]"

For Each Nom In ThisWorkbook.Names
If InStr(1, Nom.RefersTo, NomAncienClasseur, vbTextCompare) <> 0
Then _
Nom.RefersTo = Replace(expression:=Nom.RefersTo,
Find:=NomAncienClasseur, _
Replace:=NomNouveauClasseur, compare:=vbTextCompare)
Next Nom

End Sub

Cela convient-il?

--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"GGAL" a écrit dans le message de news:

Bonjour,

À partir d'un classeur de départ (base.xls), j'ai nommé manuellement
des
plages provenant d'un autre classeur Données.xls, par
Insertion>Nom>Définir.
J'ai donc par exemple :

ListeOp1
Fait référence à
='D:ArchivesDonnées.xls'!Oper1

ListeOp2
Fait référence à
='D:ArchivesDonnées.xls'!Oper2
etc.

Je souhaiterais, par macro, pouvoir modifier le chemin d'accès, en
remplaçant D:Archives par C:DOCUTOP de façon à avoir :

ListeOp1
Fait référence à
='C:DOCUTOPDonnées.xls'!Oper1
etc.

Comment faire ?
Merci,
GGal














Avatar
Pierre Fauconnier
Je n'ai pas tout lu, mais si cela fonctionne, le but est atteint... ;-)

Bon week-end.


--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"GGAL" a écrit dans le message de news:

OK

J'ai adapté la solution à mon cas de la façon suivante :
Dans le classeur Base.xls je crée une nouvelle feuille Init où je mets le
nom des plages : dans la colonne A les plges du classeur Base.xls, et dans
la
colonne B et en regard les plages correspondantes du classeur Données.xls
(j'utilise pour cela par exemple Insertion>Nom>Coller une liste, puis
comme
le chemin apparaît dans les cellules de la colonne B, je le remplace par
rien
et je n'ai que le nom de la plage)
Ensuite j'écris la procédure suivante :

Sub NommerPlage()
Workbooks("Base.xls").Sheets("Init").Activate
DerLig=Range("A65536").EndxlUp).Row
For Ligne = 1 To DerLig
Names.Add Name:=Range("A" & Ligne), RefersTo:="='" & chem & "'!" &
Range("B"
& Ligne)
Next Ligne
WorkBooks("Base.xls").Sheets(1).Activate
End Sub

chem est le chemin du classeur Données.xls défini par ailleurs.
Attention à la saisie des caractères :
"='" est en fait " puis = puis ' puis "
"'!" est en fait " puis ' puis ! puis "

GGAL


Tu as raison, on peut nommer directement la plage par macro.

Si le nom existe déjà, le renommer à nouveau remplace l'ancienne
référence
par la nouvelle

Sub NommerPlage()
Names.Add Name:="Test", RefersTo:="=$a$1"
Names.Add Name:="Cible",
RefersTo:="='c:données[cible.xls]feuil1'!$a$1"
End Sub

Attention. Si tu fais référence à une plage nommée dans un autre
classeur,
il faut ôter les crochets encadrant le nom du classeur

Names.Add Name:="cible1", RefersTo:="='c:donnéescible.xls'!nom"


Ok?

--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"GGAL" a écrit dans le message de news:

Il y a quelque chose qui ne va pas pour la méthode d'anonymousA, mais
la
méthode de Pierre fonctionne.
Je réfléchis : Plutôt que de remplacer des chemins ou des classeurs, et
puisqu'on connaît le chemin du classeur Données.xls, on ne peut pas
nommer
les plages directement par macro ?
GGal


Bonjour

L'idée es d'itérer sur les noms du classeur, de vérifier la propriété
RefersTo de chaque nom pour voir si l'ancien nom s'y trouve, et si
oui,
de
remplacer l'ancien nom par le nouveau. Ceci pourrait faire l'affaire

Sub ModifierCibles()
Dim NomAncienClasseur As String
Dim NomNouveauClasseur As String
Dim Nom As Name

NomAncienClasseur = "c:données[cible.xls]"
NomNouveauClasseur = "c:données[nouvellecible.xls]"

For Each Nom In ThisWorkbook.Names
If InStr(1, Nom.RefersTo, NomAncienClasseur, vbTextCompare) <>
0
Then _
Nom.RefersTo = Replace(expression:=Nom.RefersTo,
Find:=NomAncienClasseur, _
Replace:=NomNouveauClasseur, compare:=vbTextCompare)
Next Nom

End Sub

Cela convient-il?

--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien
en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"GGAL" a écrit dans le message de
news:

Bonjour,

À partir d'un classeur de départ (base.xls), j'ai nommé manuellement
des
plages provenant d'un autre classeur Données.xls, par
Insertion>Nom>Définir.
J'ai donc par exemple :

ListeOp1
Fait référence à
='D:ArchivesDonnées.xls'!Oper1

ListeOp2
Fait référence à
='D:ArchivesDonnées.xls'!Oper2
etc.

Je souhaiterais, par macro, pouvoir modifier le chemin d'accès, en
remplaçant D:Archives par C:DOCUTOP de façon à avoir :

ListeOp1
Fait référence à
='C:DOCUTOPDonnées.xls'!Oper1
etc.

Comment faire ?
Merci,
GGal