Alimentation de validation de cellule par VBA

Résolu/Fermé
gPaKiFé - 23 nov. 2009 à 20:15
 gPaKiFé - 24 nov. 2009 à 12:17
Bonjour,
Petit problème tout bête, j’espère,

J'ai une Sub qui est censé alimenter une cellule en terme de "validation" Liste déroulante
Pour ce faire ...
la Sub en question accepte entre autre un argument qui est en fait une référence vers l’objet « validation » de la cellule cible. D’où son petit nom ‘valTarget’
(He oui j'aimerais bien me resservir de la méthode plus tard éventuellement. :P)

Je détruis toute validation existante sur la cellule
Code:
valTarget.Delete

Puis je la recréé avec une liste de prénom (par exemple :9), contenus dans ListVal et déjà séparés par des ';' (points virgules)
Code:
valTarget.Add xlValidateList, xlValidAlertStop, Operator:=1, Formula1:=ListVal

Et puis on va dire que la Sub se finit là en gros

Côté utilisateur, le résultat est présenté comme une seule ligne dans la liste déroulante avec tous les prénoms encore séparés par le ';'.
Là où çà devient fantastique, c'est que si j'édite cette cellule que je viens d'alimenter par le biais de l'outil originel de Microsoft qui se trouve dans le menu Données -> Validation... et que je ne change rien.
Enfin presque, puisque je fais Ok quand même. :)

Alors le liste est présentée comme il fo.

Je me suis demandé si je recréé bien la liste.
Je ne suis pas tombé sur grand-chose sur les sites qui veulent à tout pris faire des listes avec des adresses de plage ou des plages nommées et je ne peux pas m’en servir pour la simple raison que les données sont trop ‘mouvantes’ et que donc cela ferait trop de nommage ou de plage.

Voila, voila si quelqu'un peut aider

C'est ma bouteille à la mer.

4 réponses

C'est super fantastique,
VBA est dans quel pays par défaut ? ^^
J'avais pas pensé au "syndrôme options régionales".
Il aura fallut se dépatouiller avec un séparateur différent et valable pour tous le monde...
(virgule) et pas le séparateur de liste des options régionales... c'est noté

Merci beaucoup, çà marche très bien maintenant...
1
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
23 nov. 2009 à 21:37
bonjour

C'est dur d'arriver à lire ce pavé mais je suis allé jusqu'au bout et resté sur ma faim.

Ce que tu trouves fantastique c'est le fonctionnement normal d'une liste de validation et je ne vois guère de problème nécessitant une bouteille à la mer.
0
Hello,
C'est que tu n'as pas vu le problème
Je crains qu'en effet tu sois resté sur ta faim si tu as manqué cette phrase.
Côté utilisateur, le résultat est présenté comme une seule ligne dans la liste déroulante avec tous les prénoms encore séparés par le ';'.

Sauf erreur, ce n'est pas le fonctionnement attendu d'une liste de validation.

Pour être plus synthétique, (je sais pas si je vais y arriver, mais bon :D)
J'alimente la liste de validation d'une cellule avec une chaîne de caractère qui ressemble à çà : "Prenom1;Prénom2;Prénom3;" placée dans ListVal
valTarget.Add xlValidateList, xlValidAlertStop, Operator:=1, Formula1:=ListVal

Et j'obtient une liste à une seule ligne qui contient ma chaine de caractère complète ni plus ni moins.
Alors que je devrait avoir trois lignes.

Si c'est plus clair on peux continuer pour arriver au truc fantastique:
Si ensuite j'édite cette cellule non plus par VBA mais par l'éditeur standard Menu Données -> Validation, sans rien modifier mais en choisissant juste Ok, Alors miracle la liste déroulante est remise en forme et présente bien autant de ligne que j'ai de prénom. (En choisissant Annuler évidemment çà marche pas)

Le problème c'est que je me vois mal dire à l'utilisateur qu'il doit repasser par l'édition de la liste de validation de sa cellule dés qu'il veut en choisir une valeur.

Le problème vient peut-être parce que j'utilise mal la méthode Add de l'objet Validation, ou peut-être une mauvaise syntaxe dans ma chaîne de caractère au moment où j'initialise ma liste.
Ou autre chose, que sais-je... on en apprend tous les jours.

Et non, désolé c'est encore un petit pavé... dans la marre
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
24 nov. 2009 à 08:25
bonjour

je la recréé avec une liste de prénom contenus dans ListVal et déjà séparés par des ';' (points virgules)

C'est bien là le problème.

Lorsque tu fait une validation manuelle, tu es en français avec séparateur "point virgule" car la virgule est séparateur décimal.

Lorsque tu es en VBA, le séparateur à utiliser est la virgule : "Prenom1,Prénom2,Prénom3" ainsi cela fonctionnera de façon "fantastique".
0