rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[VBA excel] liste deroulante a nom variable

JsJulieta, le jeudi 19 octobre 2006 à 12:04:06
hello
un petit souci sous VBA excel, en fait c est plutot un gros puisque ca fait plusieurs jours q je m arrach les cheveux dessus sans trouver la solution. voici ma bete noire :
j ai cree un programme qui permet de creer une liste deroulante
en gros sous excel ca marche comme ca :
- je selectionne ma ligne de donnes (dans la premiere colonne j ai un code, et les colonnes suivantes sont les differents noms de zone auquel le code peut appartenir)
-je defini alors une liste dont le nom est automatiquement la premiere colonne (insert/name/define desolee excel v. ang), la reference de la liste sera les 5 cellules suivantes
- dans une autre feuille, je selectionne la cellule dans laquelle je veu creer ma liste et je fais data/validation
- dans le menu qui apparait, onglets parametres : allow list et je choisis comme source la liste q j ai cree juste avant: insert/name/paste
- je n oublie pas de cocher d ignorer les cellules vides puisque chaque code n appartient pas forcement a 5 zones.
vous me suivez toujour?
alors je me di chouette ca va etre facile sous vba, eh ben non car le nom de la liste q je cree a chque nouvelle ligne change (c est le contenu de ma premiere cellule) et impossible de trouver comment faire. je vous montre la partie epineuse du prog :



(a as string, i as integer)
For i = 2 To 1345
Workbooks("Modele for new program").Worksheet("result").Activate
Rows(i).Select
a = Cells(i, 1).Value
ActiveWorkbook.Names.Add Name:=a,
RefersToR1C1:= _
"=result!R2C2:R2C256"
Sheets("final").Select
Cells(i, 2).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=AB21_1BB"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With

Next i

(en italique ce qui bloque)
j ai essaye de changer plusieurs fois la syntaxe mais sans jamais trouver
de plus, meme en choisissant d ignorer les blancs, ils apparaissent qd meme dans ma liste...
alors si vous avez une petite solution, merci de m aider!
Répondre à JsJulieta  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Scorpio, le jeudi 19 octobre 2006 à 14:06:57
J'aimerais bien t'aider mais je comprends pas exactement ton problème...
Quel est le résultat obtenu, quelles différence avec celui que tu veux, en quoi c'est genant etc
Répondre à Scorpio

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JsJulieta, le jeudi 19 octobre 2006 à 15:29:50
en fait si tu as en premiere colonne le mot X et puis 3 cellules suivantes sur la meme ligne contenant des infos sur X, je veux creer dans une autre feuille une cellule avec X dedans et a cote une cellule avec liste deroulante comprenant le contenu des 3 cellules precedentes.
pour cela je cree sous vba une liste avec les 3 cellules et je leur attribue un nom, a savoir celui contenu dans la premiere colonne (par exemple X) :
a = Cells(i, 1).Value
ActiveWorkbook.Names.Add Name:=a, RefersToR1C1:= _
"=result!R2C2:R2C4"
je veux creer une liste deroulante pour chacune des premieres cellules, donc creer pour chaque ligne une liste sous vba avec comme nom le contenu de la premiere cellule (le nom de cette liste variera donc pour chaque ligne).
Le probleme est que si la variable a = le contenu de chaque premiere cellule, et qu ensuite la liste doit prendre le nom contenu dans a, eh bien ca bug
Name:=a VBA comprend pas et j arrive pas a trouver la bonne syntaxe
aurai tu une idee?
Répondre à JsJulieta

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Scorpio, le jeudi 19 octobre 2006 à 15:43:17
J'avoue que là je vois pas trop le problème...

Met un point d'arret juste avant ta ligne name:=a, et avec la fenetre d'execution VB (affichage fenetre d'execution) regarde ce que contient a en tapant : " ? a" et entrée.

essaye aussi en déclarant ta variable au tout début de ton code
dim a as string
Répondre à Scorpio

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Scorpio, le jeudi 19 octobre 2006 à 15:48:13
autre chose...

il semble que t'oublies d'incrémenter les valeurs des listes à ce niveau

RefersToR1C1:= _ 
"=result!R2C2:R2C256" 
Répondre à Scorpio

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JsJulieta, le jeudi 19 octobre 2006 à 16:52:56
quand je met le point d arret, a contient "X" (avec les guillemets, normal c est une chaine de caractere) ce qui en theorie est normalement reconnu par la commande Name, enfin c est ce que je croyais!
en fait niveau syntaxe ca devrait etre marque comme ca: Name:="X"
Mais comme le nom varie a chaque fois, je suis obligee de preciser que le nom est egal a la variable a et donc de retirer les guillemets. et si je les mets, il croit que le nom de la liste est a chaque fois le mot "a"
en ce qui concerne la variable, pas de souci elle est bien definie au debut comme une chaine de caractere.
pour: "il semble que t'oublies d'incrémenter les valeurs des listes à ce niveau

RefersToR1C1:= _
"=result!R2C2:R2C256
"
il y a en effet une erreur. je croi q les chiffres qui font reference a l emplacement des cellules sont une reference fixe (designe l'emplacement dans la feuille) et pas relative (emplacement par rapport a la cellule selectionnee). du coup ca me fai un probleme supplementaire, car mes chiffres doivent varier en meme temps que je passe a la ligne suivante...
Répondre à JsJulieta

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Scorpio, le jeudi 19 octobre 2006 à 16:59:11
Il semblerait que le problème se situe bien au niveau des guillemets...

Je suppose que si tu mets le nom de la liste en dur ca marche... A ce moment là il faut essayer de bidouiller sur ca.

Pour créer ta macro tu as utilisé l'enregistreur?

Sinon pour ton 2ème problème, tu peux passer utiliser l'autre syntaxe 'un truc genre R[2]C[2] qui veut dire la ligne courante + 2, la colonne courante +2 (un truc du genre, ca fait 2 ans que j'ai pas fait de VB excel) ou alors tu te sert de ton i... A mon avis les 2 doivent marcher.
Je regarderai demain pour otn nom de variable

Bonne soirée et bon courage
Répondre à Scorpio

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JsJulieta, le jeudi 19 octobre 2006 à 17:31:36
ok ca marche pour les references de liste je vai utiliser ce que tu m a conseille
pour creer le programme, je me suis efectivement base sur l enregistrement de la macro, mais bon ca a pas toujours du bon.. si tu veu modifier un truc, eh ben ca marche plus!
en tou k merci pour ton aide, je vai continuer a m arracher les cheveux sur le probleme encore un peu pour aujourd hui.
Bonne soiree a toi aussi, tiens moi au courant si tu as du nouveau
merci
Répondre à JsJulieta

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Scorpio, le vendredi 20 octobre 2006 à 10:43:57
Re bonjour!

J'ai un peu regardé chez moi vite fait et j'ai pas eu le meme problème que toi.
Avec le meme code (à peu près)...

J'ai bien réussi à créer 2 listes. Le contenu était le meme mais ca c'est normal car j'ai laissé les références fixes comme toi.

La seule chose qui change par rapport à toi c'est ma déclaration de variables faite avec dim, et la ligne avec workbook machin que j'ai pas.
Sinon ta ligne rows(i).select est inutile je pense...

Préviens moi si jamais ca marche
Bon courage
Répondre à Scorpio

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JvDo, le vendredi 20 octobre 2006 à 10:51:41
Bonjour,

sans trop approfondir ton pb (au passage, un fichier joint aurait facilité la compréhension!), je pense que la solution repose sur l'utilisation de la fonction INDIRECT() que tu positionnes dans la définition de ta liste de validation.

donc a priori pas besoin de code pour cela.

voici un exemple : http://cjoint.com/?kukZuvllyr


A+
Répondre à JvDo

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JsJulieta, le mercredi 25 octobre 2006 à 16:51:30
merci pour ces reponses, je vai essayer de suite!
Répondre à JsJulieta

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JsJulieta, le mercredi 25 octobre 2006 à 16:52:30
merci pour ces reponses, je vai essayer de suite!
Répondre à JsJulieta

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JsJulieta, le mercredi 25 octobre 2006 à 16:56:50
merci pour ces reponses, je vai essayer de suite!
Répondre à JsJulieta

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 JvDo, le jeudi 26 octobre 2006 à 02:14:27
Bonsoir,

une solution plus complète et sans macro :

tu définis un nom disons "test" avec :
test=DECALER(Feuil1!$A$1;EQUIV(Feuil1!$B$4;Feuil1!$A$1:$A$1000;0)-1;1;1;NBVAL(INDEX(Feuil1!$1:$1000;EQUIV(Feuil1!$B$4;Feuil1!$A$1:$A$1000;0);0))-1)

où B4 contient une première liste de validation pour choisir le premier niveau de nom.

tu mets en C4 une validation liste =test et le tour est joué.

si tu veux un fichier, regarde http://cjoint.com/?kAcoesVkze

cordialement
Répondre à JvDo
Logiciels pertinents trouvés dans les téléchargements
Télécharger Ma Liste d'Achats  2.01Ma Liste d'Achats - Faire les courses est une tâche bien compliquée pour les non initiés. Ma liste d'achats est comme son nom l'indique, un...Catégorie: Environnement de travail
Licence: Freeware/gratuit
Télécharger SpaceTime   1.0SpaceTime - Pour plus de fluidité et d'ergonomie dans vos recherches sur le web, en mode interactif, c'est encore mieux. Space Time est...Catégorie: Internet
Licence: Freeware/gratuit
Télécharger Excel Viewer 2003Excel Viewer - Avec Microsoft Office Excel Viewer 2003, vous pouvez ouvrir, afficher et imprimer des classeurs Excel (fichiers XLS ), même...Catégorie: Tableur
Licence: Freeware/gratuit
Télécharger MOREFUNC (Macro complémentaire EXCEL) 5.06MOREFUNC (Macro complémentaire EXCEL) - Morefunc est une macro complémentaire proposant 67 nouvelles fonctions de feuille de calcul pour Excel. Ces fonctions sont...Catégorie: Tableur
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « [VBA excel] liste deroulante a nom variable »