VBA : Noms de plage - Liste déroulante

[Résolu]
Signaler
Messages postés
2
Date d'inscription
mardi 24 juillet 2007
Statut
Membre
Dernière intervention
24 juillet 2007
-
Messages postés
2
Date d'inscription
mardi 24 juillet 2007
Statut
Membre
Dernière intervention
24 juillet 2007
-
Bonjour à mes lecteurs, merci par avance pour vos suggestions.

Le sujet :
1. Je souhaite nommer sous VBA (Excel 2007) une plage de cellules variable  (suivant le nombre de saisies effectuées par l'opérateur, la plage est + ou - longue).
2. Je veux récupérer, toujours sous VBA, cette plage, à partir de son nom pour alimenter une saisie à partir d'une liste déroulante.

Mon problème : A priori le code utilisé permet bien de sélectionner la plage concernée et de la nommer (je la retrouve avec des références correctes dans le gestionnaire de noms). En revanche le nom n'apparait pas lorsque l'on sélectionne manuellement la plage de cellules sur la feuille et il ne peut être invoqué par la liste déroulante créée qui ne fonctionne pas.

Le code :
*****
Sub ListeDepts()

Range ("C12").Select
Range (Selection, Selection.End(xlDown)).Select
ActiveSheet.Names.Add Name:="Depts", RefersTo:=Selection.Address

End Sub
*****

La liste est paramétrée dans une cellule de la feuille sur laquelle se trouve la zone nommée. Il s'agit d'une liste de saisie contrôlée.

En résumé : le code ci dessus sélectionne bien la plage "variable", le nom "Depts" est visiblement donné à cette plage. Mais le nom n'apparait pas sur un F5 et n'est pas reconnu par la liste !

C'est sûrement trivial, je me lance dans VBA avec comme seule base l'enregistreur de macro et la mine d'info placée sur le net par les bons.
Toute aide est appréciée, merci.

Stevfen

2 réponses

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
6
Le pb vient de l'argument passé à RefersTo.
Toi tu donnes les coordonnées de la plage sous forme de String ($C$12:$C$16 par exemple), alors que ce qui est attendu, c'est un objet Range.

Il faut juste modifier un petit peu ta macro (et la simplifier en une seule ligne tant qu'on y est ^^) :
ActiveSheet.Names.Add Name:="Depts", RefersTo:=Range(Range("C12"), Range("C12").End(xlDown).Address)

Molenn
Messages postés
2
Date d'inscription
mardi 24 juillet 2007
Statut
Membre
Dernière intervention
24 juillet 2007

Molenn,

Je mesure à quel point j'ai des progrès à faire et en particulier sur les composantes de VBA. Je n'ai pas encore tout compris de ton argument, ce que je sais c'est que c'est efficace !
Merci pour ton aide.

Stevfen