Microsoft 365 Copie de "noms" intenpestive lors d'une copie de feuille.

Carnould

XLDnaute Junior
Bonjour à tous,
Lors d'une copie de feuille, que ce soit manuellement ou par VBA, si cette feuille possède des listes déroulantes alimentées par des tableaux nommés (avec étendue "classeur"), le gestionnaire des noms fait apparaître une duplication de ces tableaux nommés avec à chaque fois une étendue correspondant aux nouvelles feuilles créées.
Cela n'empèche nullement le fonctionnement des listes déroulantes sur ces nouvelles feuilles mais je me retrouve avec beaucoup de noms identiques dans le gestionnaire des noms ce qui nuit à la clareté. Si je supprime manuellement ces nouveaux noms créés, le fonctionnement des listes déroulantes reste normal.

Etant donnée que je fais ces duplications (nombreuses) par VBA, existe-t-il un moyen d'éviter ces duplications de noms qui ne servent à rien du tout.

Il semblerait que ce phénomène n'existe pas si la liste déroulante est alimentée par un tableau NON nommé mais ce n'est pas ce que je souhaite.

Merci d'avance pour votre aide.

Christian
 

Dranreb

XLDnaute Barbatruc
Je n'ai guère envie de faire des test pour le vérifier, mais je pense que l'objet est le membre de la collection Name du classeur. Simplement sa propriété Name n'est pas sa clé dans la collection de la feuille, sa clé c'est seulement la partie au delà du '!'.
 

Carnould

XLDnaute Junior
Quand est-ce que vous vous déciderez à joindre un classeur ??
Et pourquoi mettez vous des noms sur des tableaux qui en ont déjà un ?
(bien qu'il ne soit dans aucune collection Names)
Et pourquoi reproduisez vous des tableaux sur les feuilles ? S'ils sont pour des validations de données, mettez les donc sur une feuille à part.
J'ai beaucoup de données avec des noms de personnes. Je vais faire un classeur épuré de tous ces noms propres et l'enverrai. Cependant il contient des macros et j' ai cru comprendre qu'elles ne sont pas les bienvenues sur les forums de part le risque qu'elles font prendre, d'où mon hésitation.
Pourquoi des noms sur des tableaux qui en avait déjà ? Erreur de jeunesse car je debutais il y a 4 ou 5 mois et ne savais même pas ce qu'était un tableau nommé ou du VBA.
Je fais référence à ces tableaux pour alimenter des listes déroulantes. Ces tableaux sont sur une feuille à part. Je ne les duplique pas.
J'ai conscience que mon classeur n'est pas fait dans les règles de l'art. Je m'améliore de jour en jour grâce à des gens comme vous deux.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

[aparté]
Cependant il contient des macros et j' ai cru comprendre qu'elles ne sont pas les bienvenues sur les forums de part le risque qu'elles font prendre, d'où mon hésitation.
Jamais lu ceci sur aucun forum.
La seule chose c'est d'éviter de joindre des classeurs avec des procédures WorkBook_Open() "actives".
PS: la plupart des utilisateurs "expérimentés" d'Excel ouvrent toujours les PJ une première fois sans activer les macros.
[/aparté]
 

Carnould

XLDnaute Junior
Merci Staple1600. Je viens de mettre en commentaires la procédure WorkBook_Open(). A réactiver.
Et voici mon classeur épuré des données confidentielles.
Les saisies faisant l'objet de listes déroulantes alimentées par des tableaux nommés se font sur les feuilles de type "pilote" comme par exemple "Personne1", Personne 2", etc.. Les tableaux nommées sont sur la feuille "Param_div"
Ma procédure de duplication de la feuille "Modèle" pour créer une nouvelle feuille pilote s'appelle NouvelleFichePilote() dans Module3. Elle est associée à CTRL+n. Cette donc cette procédure qui génère des homonymes dans les noms.
J'ai mis la dernière solution d'eriiic dans ma procédure de copie (Module3 NouvelleFichePilote()) en l'adaptant avec ActiveSheet et ça focntione très bien !

Je vous joints tout de même mon classeur (réactivez WorkBook_Open). Vous constaterez probablement beaucoup de lourdeurs, beaucoup d'incohérences. C'est le résultat d'une première expérience enrichie grace à ce forum.
"Hâtez-vous lentement, et sans perdre courage, Vingt fois sur le métier remettez votre ouvrage, Polissez-le sans cesse, et le repolissez, Ajoutez quelquefois, et souvent effacez. (Boileau) .... j'en suis là !

Merci à tous
Cordialement
Christian
 

Pièces jointes

  • Comptes Pilotes - V7.3.xlsm
    224.4 KB · Affichages: 8

Dranreb

XLDnaute Barbatruc
Et ce que moi je proposais, simplement supprimer tous les noms de la collection Names de l'objet Worksheet de la feuille, vu qu'il correspondent exactement à tous ceux de celle de l'objet Workbook qui ont le nom de cette feuille en préfixe ?
 

Dranreb

XLDnaute Barbatruc
C'est pourtant simple, il suffit de ne rien tester, juste supprimer systématiquement tous les noms de la feuille puisqu'il ne peut pas y en avoir d'autres que ceux qui dans les noms du classeur sont préfixés par le nom de cette feuille.
VB:
    Dim Nom As Name
    For Each Nom In ActiveSheet.Names
        Nom.Delete
        Next nom
 

Dranreb

XLDnaute Barbatruc
Seulement un nom de cette feuille, ce qui revient à un nom du classeur préfixé par le nom de la feuille suivi d'un point d'exclamation. Un nom du classeur ou d'une autre feuille se référant à une plage de la feuille ne serait pas touché. Mais du reste je croyais que c'était seulement lors de sa création par copie de la feuille que vous vouliez le faire.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Exécutez peut êrte cette macro dans un nouveau module d'un nouveau classeur :
VB:
Sub Test()
ThisWorkbook.Names.Add "Toto", [A1]
ActiveSheet.Names.Add "Toto", [A1]
MsgBox ThisWorkbook.Names(1).Name _
   & vbLf & ThisWorkbook.Names(2).Name
End Sub
Allez peut être ensuite faire un tour dans le gestionnaire de noms
Examinez tout particulièrement la colonne "Étendue".
Il ne peut y avoir de noms identiques avec la même étendue.
Donc si un nom d'étendue "Classeur" est dupliqué à cause de la copie d'une feuille, sa copie devient forcément un nom d'étendue de feuille.
Et vous aurez remarqué grâce au MsgBox de la macro qu'un nom d'étendue feuille revient à un nom d'étendue "Classeur" préfixé par le nom de la feuille, éventuellement encadré d'apostrophes, suivi d'un point d'exclamation.
Et je confirme que ActiveSheet.Names("Toto").Name vaut "Feuil1!Toto" qui n'est donc pas sa vraie clé dans la collection de la feuille, contrairement à celle du classeur.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 195
Membres
112 680
dernier inscrit
AKDS