XL 2010 VBA : Comment modifier la référence d'un nom ?

Gllou06

XLDnaute Nouveau
Bonsoir à tous.
J'ai beau chercher, je ne trouve pas de réponse qui me convienne sur le web.

Mon problème : Je n'arrive pas modifier (par macro) les références des noms que j'ai créé.
J'ai un classeur qui contient plusieurs feuilles et sur chaque feuille des plages de cellules qui sont nommées automatiquement

For nPlage = PreCo To DerCo
Range(NomCol & "11:" & NomCol & Range(NomCol & DerLi).End(xlUp).Row).CreateNames Top:=True
numcol = numcol + 1
NomCol = Split(Columns(numcol).Address(ColumnAbsolute:=False), ":")(1) 'Conversion en lettre du n° de colonne
Next nPlage

A chaque fois que des modifications sont apportées, ma macro supprime, insére des colonnes (d'après d'autres feuilles/tableau du même classeur) et devrait me renommer l'ensemble des cellules "titre"... Ca ne fonctionne pas ; En revanche, j'ai toutes les références qui s'affichent au fur et à mesure pour me demander si je veux remplacer... c'est agaçant... mais ça prouve qu'il se passe bien quelque chose.

J'ai pensé pouvoir supprimer les noms "indésirables" avant de créer les nouveaux mais ça ne fonctionne pas non plus !

Un petit tableau et la partie du code sont en pièce jointe.

Avez-vous une idée ? Merci d'avance
 

Pièces jointes

  • ModifRéf.xlsm
    14.3 KB · Affichages: 42

Dranreb

XLDnaute Barbatruc
Bonsoir.
Je pense que je le ferais comme ça, si ce sont bien des noms de portée classeur qu'il faut :
VB:
Sub xx()
Dim Plg As Range, TNoms(), C&
Set Plg = ActiveSheet.UsedRange
Set Plg = Intersect(ActiveSheet.[11:10000], Plg)
TNoms = Plg.Rows(1).Value
Set Plg = Plg.Rows(2).Resize(Plg.Rows.Count - 1)
For C = 1 To UBound(TNoms, 2)
   Plg.Columns(C).Name = TNoms(1, C)
   Next C
End Sub
La collection Names d'une Worksheet ne comporte que des noms de portée feuille.
Mais il correspondent aussi à des noms de portée classeur munis du préfixe de feuille suivi d'un "!"
 

Gllou06

XLDnaute Nouveau
Bonjour et merci pour ce code qui fonctionne très bien.
Mon niveau en vba n'arrive pas à votre cheville !
Si je peux permettre une requête supplémentaire, comment faire pour limiter la référence des noms au nombre de lignes de chaque colonne ?
Mes plages peuvent varier de 1 à 248 lignes et je ne souhaite pas avoir des pop-up de sélection qui ont un "ascenceur" garni de "vides"

Dans l'esprit
"For nPlage = numcol To Dert
Range(NomCol & "11:" & NomCol & Range(NomCol & "300").End(xlUp).Row).CreateNames Top:=True"

Je vous remercie de votre dévouement.
Cordialement
 

Dranreb

XLDnaute Barbatruc
Essayez comme ça :
VB:
Sub xx()
Dim Plg As Range, TNoms(), LMax&, C&
Set Plg = ActiveSheet.UsedRange
Set Plg = Intersect(ActiveSheet.[11:10000], Plg)
TNoms = Plg.Rows(1).Value
LMax = Plg.Rows.Count + 1
For C = 1 To UBound(TNoms, 2)
   Application.Range(Plg(2, C), Plg(LMax, C).End(xlUp)).Name = TNoms(1, C)
   Next C
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 896
Membres
101 833
dernier inscrit
sandra25