Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

10 réponses

1 2
Avatar
isabelle
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
ThierryP
Je m'incline avec humilité devant la science et le savoir !!
D'abord, j'ai tout compris du premier coup, et en plus ça fonctionne..

Merci infiniment
@+thierry :-))))

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
ThierryP
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
anonymousA
bonjour,

c'est peut-être tout bêtement parceque dans ta liste tu as une cellule vide.

A+

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
isabelle
bonjour Thierry,

as tu cocher la case "Quand des données non valide sont tapées"
sur l'onglet Alerte d'erreur de la Fenêtre Validation ?

isabelle

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
Thierry
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
anonymousA
En réalité, la formule que t'a indiquée Isabelle ne te prémunit en rien
de ne pas integrer dans ta plage nommée une cellule vide.
Exemple, écris de la cellule A1 à la cellule A6 les valeurs de 1 à 6
puis en cellule A9 écris la valeur 7. Tu laisses bien sur les cellules
A7 et A8 vides.Ensuite , si tu nommes la plage "toto" avec la référence
ÞCALER(Feuil1!$A$1;;;NBVAL(Feuil1!$A:$A)), dans ces conditions, tu
verras que ta liste contient les valeurs de 1 à 6 + 1 blanc à la fin de
ta liste.
Ceci est un comportement d'ailleurs bien normal si tu comprends bien
comment la formule fonctionne.

A+

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
isabelle
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
Thierry
Tu as raison sur le fond...mais en fait mon but est le suivant : comme
je ne sais pas à l'avance combien il peut y avoir de noms dans ma liste
déroulante, si je prédéfinis une plage de 100 lignes, avec seulement 5
cellules remplies, j'aurais une liste déroulante comprenant 95 lignes
blanches. Par contre, il ne peut y avoir de cellules vides
intercalées... Donc la solution d'Isabelle me convenait...Sauf...

@+ thierry

En réalité, la formule que t'a indiquée Isabelle ne te prémunit en rien
de ne pas integrer dans ta plage nommée une cellule vide.
Exemple, écris de la cellule A1 à la cellule A6 les valeurs de 1 à 6
puis en cellule A9 écris la valeur 7. Tu laisses bien sur les cellules
A7 et A8 vides.Ensuite , si tu nommes la plage "toto" avec la référence
ÞCALER(Feuil1!$A$1;;;NBVAL(Feuil1!$A:$A)), dans ces conditions, tu
verras que ta liste contient les valeurs de 1 à 6 + 1 blanc à la fin de
ta liste.
Ceci est un comportement d'ailleurs bien normal si tu comprends bien
comment la formule fonctionne.

A+


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
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












1 2