OVH Cloud OVH Cloud

Pb avec Validation -> Liste

13 réponses
Avatar
ThierryP
Bonjour les MPFiens !

J'ai donc testé cette macro mais apparemment quelque chose ne fonctionne
pas (c'est peut-être le type sur la chaise devant l'écran..!):
En plus, je me rends compte que je n'ai pas été très explicite, alors je
vais détailler un peu plus !
Sur une feuille de mon classeur (Sites), je gère des lieux, classé par
numéro d'ordre
Sur une autre feuille (Objets), je gère des objets, également classés
par numéro d'ordre.
Jusque là, tout va bien, çà reste clair...
Chaque objet ne peut être affecté qu'à un seul site.
En colonne A de la feuille Objets, je rentre un N° d'ordre, et dans la
colonne suivante, je veux que l'utilisateur rentre le nom du site, à
prendre dans une liste déroulante.
Apparemment, la fonction Données -> Validation ne permet pas d'aller
chercher une plage sur une autre feuille...
Donc, je me suis dit "Qu'à cela ne tienne, je suis plus malin qu'Excel"
et donc je recopie dans une colonne de ma feuille Objets la liste des
sites (Pas bête le type).
Mais comme je ne sais pas à l'avance combien de sites il peut y avoir et
que je ne veux pas avoir de lignes vides dans ma liste déroulante,
l'idée était de redéfinir la plage à chaque changement dans la feuille
Sites ou dans la feuille Objets (car un objet peut changer de site et un
site peut être rajouté ou supprimé...)
Jusque là, je ne sais pas si c'est encore clair, mais je me
comprends...!

Mais quand je recherche la première cellule vide de ma plage de
validation, çà ne marche pas, puisque même si je n'ai pas de nom de
site, j'ai au moins la formule "=Sites!Cxxx".

Alors je sèche un peu !

Si quelqu'un de compétent a eu la patience de lire ma prose jusque là,
j'aimerais assez avoir au moins une piste de recherche...!

D'avance merci au forum !!!

@+thierry :-))

Pierre Fauconnier a écrit :

> Le plus ismple est d'utiliser une plage nommée dans la liste de
validation.
> Dans VBA, tu attribues ta plage à ce nom
> Application.Names("Pierre").RefersTo = "=$a$1:$a$3"
> Attention, il faut que ce nom existe.
> Tu peux le créer via VBA
> application.names.add ...
> mais il faut alors qu'il n'existe pas...
> Tu peux le détruire avant de le recrééer, mais il faut qu'il existe
pour le détruire...
> Dès lors, je propose
> on error resume next
> application.names("Pierre").delete
> application.names.add "Pierre", "= $a$1:$a$3"
>
> Ok?
>
> Pierre Fauconnier

3 réponses

1 2
Avatar
Thierry
Oupsss!

J'ai répondu avant de tester...Mea Culpa, mea maxima culpa !!
Ca marche (mais je continue à ne pas voir pourquoi)

Merci
@+ thierry

Ca oblige à saisir une valeur, mais ça n'impose pas le critère de
validation..??


il faut également décocher la case "Ignorer si vide"
sur l'onglet Options de la Fenêtre Validation

isabelle


Bonsoir à tous les deux !
Oui, Isabelle, j'ai bien coché la case....
Et non, AnonymousA, je n'ai pas de cellule vide (grâce à la superbe
astuce qu'Isabelle m'a refilé !!)
En fait, dans je pense que le souci vient de l'interprétation par
Excel de cette formule, car j'ai trois plages différentes soumises à
validation suivant 3 listes et les 3 réagissent de le même façon.

Déjà que j'avais pas beaucoup de latin, là je l'ai complètement perdu...

@+ thierry :-))


Bonjour Isabelle !

En fait, j'ai encore un souci : ta méthode marche super bien, dans
ma liste j'ai bien toutes mes infos; malheureusement l'option
Validation ne marche pas, cad que je peux saisir n'importe quoi dans
la cellule...
J'ai comparé avec une autre condition de validation + simple, pas vu
de différence !?!
Le seul truc que je détecte, c'est qu'il me reste une ligne vide en
bas de ma liste déroulante : normal ou pas ??

Je sèche un peu

D'avance merci


bonjour Thierry,

tu peut utilisé une plage de cellule d'une autre feuille à la
condition que cette plage soit nommée ( Insertion, Nom)
pour que cette plage nommée soit évolutive utilise cette formule
Fait référence à: ÞCALER(Feuil1!$A$1;;;NBVAL(Feuil1!$A:$A))
l'utilisation d'une référence absolue ($) est indispensable.

isabelle


Bonjour les MPFiens !

J'ai donc testé cette macro mais apparemment quelque chose ne
fonctionne pas (c'est peut-être le type sur la chaise devant
l'écran..!):
En plus, je me rends compte que je n'ai pas été très explicite,
alors je vais détailler un peu plus !
Sur une feuille de mon classeur (Sites), je gère des lieux, classé
par numéro d'ordre
Sur une autre feuille (Objets), je gère des objets, également
classés par numéro d'ordre.
Jusque là, tout va bien, çà reste clair...
Chaque objet ne peut être affecté qu'à un seul site.
En colonne A de la feuille Objets, je rentre un N° d'ordre, et
dans la colonne suivante, je veux que l'utilisateur rentre le nom
du site, à prendre dans une liste déroulante.
Apparemment, la fonction Données -> Validation ne permet pas
d'aller chercher une plage sur une autre feuille...
Donc, je me suis dit "Qu'à cela ne tienne, je suis plus malin
qu'Excel" et donc je recopie dans une colonne de ma feuille Objets
la liste des sites (Pas bête le type).
Mais comme je ne sais pas à l'avance combien de sites il peut y
avoir et que je ne veux pas avoir de lignes vides dans ma liste
déroulante, l'idée était de redéfinir la plage à chaque changement
dans la feuille Sites ou dans la feuille Objets (car un objet peut
changer de site et un site peut être rajouté ou supprimé...)
Jusque là, je ne sais pas si c'est encore clair, mais je me
comprends...!

Mais quand je recherche la première cellule vide de ma plage de
validation, çà ne marche pas, puisque même si je n'ai pas de nom
de site, j'ai au moins la formule "=Sites!Cxxx".

Alors je sèche un peu !

Si quelqu'un de compétent a eu la patience de lire ma prose jusque
là, j'aimerais assez avoir au moins une piste de recherche...!

D'avance merci au forum !!!

@+thierry :-))


Le plus ismple est d'utiliser une plage nommée dans la liste de
validation.

Dans VBA, tu attribues ta plage à ce nom
Application.Names("Pierre").RefersTo = "=$a$1:$a$3"
Attention, il faut que ce nom existe.
Tu peux le créer via VBA
application.names.add ...
mais il faut alors qu'il n'existe pas...
Tu peux le détruire avant de le recrééer, mais il faut qu'il
existe pour le détruire...

Dès lors, je propose
on error resume next
application.names("Pierre").delete
application.names.add "Pierre", "= $a$1:$a$3"

Ok?

Pierre Fauconnier














Avatar
jps
t'en ferais pas un peu trop, thierry, le jour de l'élection de benoît croix,
V, bâton?
jps

"Thierry" a écrit dans le
message de news:O%
...Mea Culpa, mea maxima culpa !!


Avatar
Thierry
Désolé, mais j'avais pas vu la fumée blanche....

@+ thierry

t'en ferais pas un peu trop, thierry, le jour de l'élection de benoît croix,
V, bâton?
jps

"Thierry" a écrit dans le
message de news:O%

...Mea Culpa, mea maxima culpa !!






1 2