VBA : Noms de plage - Liste déroulante

Résolu
stevfen77 Messages postés 2 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 24 juillet 2007 - 24 juil. 2007 à 14:44
stevfen77 Messages postés 2 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 24 juillet 2007 - 24 juil. 2007 à 17:46
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

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
24 juil. 2007 à 16:01
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
3
stevfen77 Messages postés 2 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 24 juillet 2007
24 juil. 2007 à 17:46
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
0
Rejoignez-nous