Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

gestion des zones nommées

13 réponses
Avatar
magic-dd
Bonjour =E0 tous

il pleut chez vous??

bref, voici ma question

j'ai un classeur avec plusieurs feuilles, et j'ai des zones nomm=E9es faite=
s avec insertion zone definir.

j'aimerai copier toutes ces zones dans tous les classeurs existants et qui =
ont besoin de ces fameuses zones par vba par ex.

est ce possible ou dois je le faire manuellement.

merci d'avance

10 réponses

1 2
Avatar
MichD
Bonjour,

Ceci copie tous les NOMS qui représentent des plages de cellules.
Il reste à adapter la destination où ces plages seront copiées.

'--------------------------------------------------
Sub test()
Dim C As Name
On Error Resume Next
'Une boucle sur chacun des "NOMS" du classeur
For Each C In ThisWorkbook.Names
'Teste si le NOM représente une plage
If TypeName(Range(C.Name)) = "Range" Then
'Si aucune erreur n’est générée, le NOM
'représente une plage de celules
If Err = 0 Then
'copie de la plage vers la destination de ton choix, à adapter
Range(C.Name).Copy Worksheets("Feuil2").Range("A1")
Else
'Si une erreur est générée, on l'efface
Err.Clear
End If
End If
Next
End Sub
'--------------------------------------------------

Si tu veux autre chose, il faut le dire!


MichD
---------------------------------------------------------------
Avatar
magic-dd
bonsoir et encore merci de me venir en aide

donc je viens de faire un test et je pense m'etre mal expliqué

je reprends

je possede un classeur nommé performance 102

Dans ce classeur j'ai 2 feuilles appellées 102TBM et 102AJE

ce classeur comporte grand nombre de zones nommées faisant reference ou à 102TBM ou 102AJE.

ces deux feuilles comporte les memes tableau sur la structure mais pas forc ement le meme de nombre de ligne remplies, d'ou ces zones nommées faisant reference ou à 102TBM ou 102AJE.

pour exemple ma feuille 102TBM aura comme zone nommée
dispo1 ÞCALER(102TBM!$B$2;NBVAL(102TBM!$A:$A)-3;0;3)

et ma feuille 102JET aura comme zone nommée
dispo2 ÞCALER(102JET!$B$2;NBVAL(102JET!$A:$A)-3;0;3)

donc ces zones nommées je souhaiterai les reprendre dans un autre classeu r appelé Performance 133 qui lui comporte 4 feuilles

j'aurais donc dispo1, dispo2, dispo3 et dispo 4 pour faire reference à ch aque feuille

j'espere avoir été un peu plus précis dans mes commentaires

merci
Avatar
magic-dd
je viens de faire un test avec l'enregistreur de macros

voila ce qui en ressort, peut etre a simplifier

Sub test22()

ActiveWorkbook.Names.Add Name:="dd", RefersToR1C1:= _
"=OFFSET(dd!R2C1,COUNTA(dd!C1)-3,0,3)"

ActiveWorkbook.Names.Add Name:="ddbis", RefersToR1C1:= _
"=OFFSET(Feuil2!R2C1,COUNTA(Feuil2!C1)-3,0,3)"

ActiveWorkbook.Names.Add Name:="waouh", RefersToR1C1:= _
"=OFFSET(Feuil3!R2C1,COUNTA(Feuil3!C1)-3,0,3)"

End Sub

il ne me restera plus qu'a faire un copier coller dans mon nouveau classeur et changer le nom des feuilles et zou lancer la macro

c'est un peu rustique mais bon je ne sais mieux faire

ce qui me gène le plus c'est le referencement des coordonnées en R1C1 p lutot qu'en A1
Avatar
MichD
| donc ces zones nommées je souhaiterai les reprendre dans un
| autre classeur appelé Performance 133 qui lui comporte 4 feuilles

Qu'est-ce que cela veut dire?
Tu veux recréer les mêmes noms mais cette fois-ci dans le nouveau classeur?

Tu veux copier ces plages de cellules des anciens classeurs vers le nouveau
classeur?

Est-ce que ce nouveau classeur Existe-t-il ?

Si tu veux copier la totalité d'une feuille d'un classeur à un autre :

Workbooks("Classeur_Source.xls").Sheets("NomFeuilleAcopier").Copy _
after:=Workbooks("Classeur_destination.xls").Sheets(1)



MichD
---------------------------------------------------------------
Avatar
magic-dd

Tu veux recréer les mêmes noms mais cette fois-ci dans le nouveau cla sseur?



oui je veux recreer les noms dans le nouveau classeur

Tu veux copier ces plages de cellules des anciens classeurs vers le nouve au

classeur?



oui mais il faudra que je change juste le nom de la feuille et du classeur



Est-ce que ce nouveau classeur Existe-t-il ?



ce classeur existe et les autres aussi


sinon n'est-il pas possible d'avoir un nom valable pour toutes les feuilles d'un classeur ?
Avatar
MichD
Dans ton nouveau classeur, si tu veux insérer les 3 noms dans les 3
premières feuilles :

'---------------------------------------
Sub test()
With ActiveWorkbook
.Names.Add Name:="dd", RefersTo:= _
"=OFFSET(" & Sheets(1).Name & "!R2C1,COUNTA(" & Sheets(1).Name &
"!C1)-3,0,3)"

.Names.Add Name:="ddbis", RefersToR1C1:= _
"=OFFSET(" & Sheets(2).Name & "!R2C1,COUNTA(" & Sheets(2).Name &
"!C1)-3,0,3)"

.Names.Add Name:="waouh", RefersToR1C1:= _
"=OFFSET(" & Sheets(3).Name & "!R2C1,COUNTA(" & Sheets(3).Name &
"!C1)-3,0,3)"
End With
End Sub
'---------------------------------------

MichD
---------------------------------------------------------------
Avatar
magic-dd
RE

je vois bien le principe du " & Sheets(3).Name & ...;

seulement il me met une erreur 1004

je craque

il me vien a l'idee aussi de de remplacer le numéro de la feuille par i e t faire une boucle genre

for i = 1 to nombre total de feuille dans le classeur

With ActiveWorkbook
.Names.Add Name:="dd" & i , RefersTo:= _
"=OFFSET(" & Sheets(i).Name & "!R2C1,COUNTA(" & Sheets(i).Name &
"!C1)-3,0,3)"

mais bon la je me crois chez les bisounours :))
Avatar
MichD
Si tu veux indexer les noms des plages créés, tu peux utiliser ceci :

'----------------------------------
Sub test()
Dim A As Integer, Nom As String
With ActiveWorkbook
For Each sh In .Worksheets
A = A + 1
Nom = "Magic" & A
.Names.Add Name:="" & Nom & "", RefersTo:= _
"=OFFSET(" & sh.Name & "!R2C1,COUNTA(" & ss & "!C1)-3,0,3)"
Next
End With
End Sub
'----------------------------------

MichD
---------------------------------------------------------------
Avatar
magic-dd
Si tu veux indexer les noms des plages créés, tu peux utiliser ceci :



tres interessant, il ne me reste plus qu'a tester en grandeur nature demain au bureau

cela marche sur un fichier test au chaud dans mon lit

sinon pour le & ss& dans COUNTA(" & ss & "!C1) il corespond au $ qui entou re le C ?



'----------------------------------

Sub test()

Dim A As Integer, Nom As String

With ActiveWorkbook

For Each sh In .Worksheets

A = A + 1

Nom = "Magic" & A

.Names.Add Name:="" & Nom & "", RefersTo:= _

"=OFFSET(" & sh.Name & "!R2C1,COUNTA(" & ss & "!C1)-3,0,3)"

Next

End With

End Sub

'----------------------------------



MichD

---------------------------------------------------------------
Avatar
MichD
Non, c'est un oubli, la ligne de code devrait être :

"=OFFSET(" & sh.Name & "!R2C1,COUNTA(" & sh.Name & "!C1)-3,0,3)"



MichD
---------------------------------------------------------------
1 2