J'ai créé un classeur permettant de gérer 3 niveaux de validations par
liste, en utilisant select case, avec 10 choix possibles chaque fois.
Il fonctionne bien, et j'envisageais de le proposer à misange, mais...
...le code est un peu lourd (110 case), et mon niveau ne me permet
pas -encore- de mettre au point les boucles que je pressens pour optimiser
le code.
L'un d'entre vous serait-il intéressé, pour m'aider à finaliser ce classeur
?
http://cjoint.com/?cmrCzhRIpC
Chacune de vos critiques et/ou suggestions sera la bienvenue.
J'ai, depuis longtemps, téléchargé ton classeur, http://www.excelabo.net/moteurs/compteclic.php?nom=av-listevalidmultiples et l'ai utilisé à plusieurs reprises.
Loin de moi l'idée de vouloir réinventer l'eau chaude.
Je voulais simplement, au départ, tester la possibilité de redéfinir un nom sous condition. La lecture du code -indigeste- que j'ai pondu m'a laissé entrevoir la solution de boucler avec deux variables. Malheureusement je n'ai pas encore trouvé le joint.
En fait, j'aimerais écrire, à la place de : Range("A3").Value Range(i&j).value i étant la variable représentant le nom de la colonne, j la variable représentant le nom de la ligne.
Merci de m'avoir répondu,
-- Bien amicordialement, P. Bastard
Bonjour, *Alain*
J'ai, depuis longtemps, téléchargé ton classeur,
http://www.excelabo.net/moteurs/compteclic.php?nom=av-listevalidmultiples
et l'ai utilisé à plusieurs reprises.
Loin de moi l'idée de vouloir réinventer l'eau chaude.
Je voulais simplement, au départ, tester la possibilité de redéfinir un nom
sous condition.
La lecture du code -indigeste- que j'ai pondu m'a laissé entrevoir la
solution de boucler avec deux variables.
Malheureusement je n'ai pas encore trouvé le joint.
En fait, j'aimerais écrire, à la place de :
Range("A3").Value
Range(i&j).value
i étant la variable représentant le nom de la colonne,
j la variable représentant le nom de la ligne.
J'ai, depuis longtemps, téléchargé ton classeur, http://www.excelabo.net/moteurs/compteclic.php?nom=av-listevalidmultiples et l'ai utilisé à plusieurs reprises.
Loin de moi l'idée de vouloir réinventer l'eau chaude.
Je voulais simplement, au départ, tester la possibilité de redéfinir un nom sous condition. La lecture du code -indigeste- que j'ai pondu m'a laissé entrevoir la solution de boucler avec deux variables. Malheureusement je n'ai pas encore trouvé le joint.
En fait, j'aimerais écrire, à la place de : Range("A3").Value Range(i&j).value i étant la variable représentant le nom de la colonne, j la variable représentant le nom de la ligne.
Merci de m'avoir répondu,
-- Bien amicordialement, P. Bastard
AV
| Je voulais simplement, au départ, tester la possibilité de redéfinir un nom | sous condition.
Je comprends pas très bien pourquoi tu veux absolument boucler..... La meilleure méthode me semblant être, après avoir nommé les plages, l'utilisation de la fonction INDIRECT et, éventuellement de la fonction DECALER pour les plages dynamiques Par ailleurs, je ne saurais trop te conseiller de stocker tes données de façon bien structurée : pas de lignes et/ou de colonnes vides, commencer en A1, noms de champs en ligne 1...etc...
AV
| Je voulais simplement, au départ, tester la possibilité de redéfinir un nom
| sous condition.
Je comprends pas très bien pourquoi tu veux absolument boucler.....
La meilleure méthode me semblant être, après avoir nommé les plages,
l'utilisation de la fonction INDIRECT et, éventuellement de la fonction DECALER
pour les plages dynamiques
Par ailleurs, je ne saurais trop te conseiller de stocker tes données de façon
bien structurée : pas de lignes et/ou de colonnes vides, commencer en A1, noms
de champs en ligne 1...etc...
| Je voulais simplement, au départ, tester la possibilité de redéfinir un nom | sous condition.
Je comprends pas très bien pourquoi tu veux absolument boucler..... La meilleure méthode me semblant être, après avoir nommé les plages, l'utilisation de la fonction INDIRECT et, éventuellement de la fonction DECALER pour les plages dynamiques Par ailleurs, je ne saurais trop te conseiller de stocker tes données de façon bien structurée : pas de lignes et/ou de colonnes vides, commencer en A1, noms de champs en ligne 1...etc...
AV
Patrick BASTARD
Merci pour ces conseils, *Alain*
-- Bien amicordialement, P. Bastard
Je voulais simplement, au départ, tester la possibilité de redéfinir un nom sous condition.
Je comprends pas très bien pourquoi tu veux absolument boucler..... La meilleure méthode me semblant être, après avoir nommé les plages, l'utilisation de la fonction INDIRECT et, éventuellement de la fonction DECALER pour les plages dynamiques Par ailleurs, je ne saurais trop te conseiller de stocker tes données de façon bien structurée : pas de lignes et/ou de colonnes vides, commencer en A1, noms de champs en ligne 1...etc...
AV
Merci pour ces conseils, *Alain*
--
Bien amicordialement,
P. Bastard
Je voulais simplement, au départ, tester la possibilité de redéfinir
un nom sous condition.
Je comprends pas très bien pourquoi tu veux absolument boucler.....
La meilleure méthode me semblant être, après avoir nommé les plages,
l'utilisation de la fonction INDIRECT et, éventuellement de la
fonction DECALER pour les plages dynamiques
Par ailleurs, je ne saurais trop te conseiller de stocker tes données
de façon bien structurée : pas de lignes et/ou de colonnes vides,
commencer en A1, noms de champs en ligne 1...etc...
Je voulais simplement, au départ, tester la possibilité de redéfinir un nom sous condition.
Je comprends pas très bien pourquoi tu veux absolument boucler..... La meilleure méthode me semblant être, après avoir nommé les plages, l'utilisation de la fonction INDIRECT et, éventuellement de la fonction DECALER pour les plages dynamiques Par ailleurs, je ne saurais trop te conseiller de stocker tes données de façon bien structurée : pas de lignes et/ou de colonnes vides, commencer en A1, noms de champs en ligne 1...etc...
La solution proposée est nien plus élégante, mai j'aurais un suggetstion à proposer:
Ecrire : If Target = [A2] Then au lieu de If Target.Address = "$A$2"
C'est à la fois aussi clair et plus rapide
Cordialement, -- LR
Patrick BASTARD
Bonjour, *Laurent*
La solution proposée est nien plus élégante,
C'est peu dire, (on ne compare pas un code de PB avec un code de AV) et je viens précisément ici pour améliorer mon style. Mais, sauf urgence, chercher une solution par soi-même (quitte à appeler à l'aide quand ça coince) me semble plus formateur que d'utiliser un code "tout cuit". Qu'en penses-tu?
-- Bien amicordialement, P. Bastard
Bonjour, *Laurent*
La solution proposée est nien plus élégante,
C'est peu dire, (on ne compare pas un code de PB avec un code de AV) et je
viens précisément ici pour améliorer mon style.
Mais, sauf urgence, chercher une solution par soi-même (quitte à appeler à
l'aide quand ça coince) me semble plus formateur que d'utiliser un code
"tout cuit".
Qu'en penses-tu?
C'est peu dire, (on ne compare pas un code de PB avec un code de AV) et je viens précisément ici pour améliorer mon style. Mais, sauf urgence, chercher une solution par soi-même (quitte à appeler à l'aide quand ça coince) me semble plus formateur que d'utiliser un code "tout cuit". Qu'en penses-tu?
-- Bien amicordialement, P. Bastard
Yoyo
Bonjour Patrick, AV et Laurent,
Je te propose 2 solutions. La première sur la base de ce qu'a dit AV (fonctions DECALER et INDIRECT), et la seconde par modification des noms par la procédure événementielle Worksheet_SelectionChange (désactivée au départ : supprimer le Exit Sub pour l'activer)...
http://cjoint.com/data/cnoa2eptBa.htm
Amicalement Yoyo
"Patrick BASTARD" a écrit dans le message de news:u9lnfL$
Bonsoir, toutes et tous.
J'ai créé un classeur permettant de gérer 3 niveaux de validations par liste, en utilisant select case, avec 10 choix possibles chaque fois. Il fonctionne bien, et j'envisageais de le proposer à misange, mais... ...le code est un peu lourd (110 case), et mon niveau ne me permet pas -encore- de mettre au point les boucles que je pressens pour optimiser le code. L'un d'entre vous serait-il intéressé, pour m'aider à finaliser ce classeur
?
http://cjoint.com/?cmrCzhRIpC
Chacune de vos critiques et/ou suggestions sera la bienvenue.
-- Bien amicordialement, P. Bastard
Bonjour Patrick, AV et Laurent,
Je te propose 2 solutions. La première sur la base de ce qu'a dit AV
(fonctions DECALER et INDIRECT), et la seconde par modification des noms par
la procédure événementielle Worksheet_SelectionChange (désactivée au départ
: supprimer le Exit Sub pour l'activer)...
http://cjoint.com/data/cnoa2eptBa.htm
Amicalement
Yoyo
"Patrick BASTARD" <pasdespambastardp@freepasdespam.fr> a écrit dans le
message de news:u9lnfL$LGHA.1124@TK2MSFTNGP15.phx.gbl...
Bonsoir, toutes et tous.
J'ai créé un classeur permettant de gérer 3 niveaux de validations par
liste, en utilisant select case, avec 10 choix possibles chaque fois.
Il fonctionne bien, et j'envisageais de le proposer à misange, mais...
...le code est un peu lourd (110 case), et mon niveau ne me permet
pas -encore- de mettre au point les boucles que je pressens pour optimiser
le code.
L'un d'entre vous serait-il intéressé, pour m'aider à finaliser ce
classeur
?
http://cjoint.com/?cmrCzhRIpC
Chacune de vos critiques et/ou suggestions sera la bienvenue.
Je te propose 2 solutions. La première sur la base de ce qu'a dit AV (fonctions DECALER et INDIRECT), et la seconde par modification des noms par la procédure événementielle Worksheet_SelectionChange (désactivée au départ : supprimer le Exit Sub pour l'activer)...
http://cjoint.com/data/cnoa2eptBa.htm
Amicalement Yoyo
"Patrick BASTARD" a écrit dans le message de news:u9lnfL$
Bonsoir, toutes et tous.
J'ai créé un classeur permettant de gérer 3 niveaux de validations par liste, en utilisant select case, avec 10 choix possibles chaque fois. Il fonctionne bien, et j'envisageais de le proposer à misange, mais... ...le code est un peu lourd (110 case), et mon niveau ne me permet pas -encore- de mettre au point les boucles que je pressens pour optimiser le code. L'un d'entre vous serait-il intéressé, pour m'aider à finaliser ce classeur
?
http://cjoint.com/?cmrCzhRIpC
Chacune de vos critiques et/ou suggestions sera la bienvenue.
-- Bien amicordialement, P. Bastard
Patrick BASTARD
Bonjour, *Yoyo*
Merci pour ton code, tout simplement superbe...
Encore une petite, pour la route : Comment changer 10 de resize(10, 1) par le nb d'items que comporte la liste, que je souhaite variable? Set Plage = Cells(17, (Asc(Range("B2")) - Asc("A")) * 2 + 1).Resize(10, 1) Set Plage = Cells(17, (Asc(Range("B2")) - Asc("A")) * 2 + 1).Resize(*nbval(plage)* , 1)
-- Bien amicordialement, P. Bastard
Je te propose 2 solutions. La première sur la base de ce qu'a dit AV (fonctions DECALER et INDIRECT), et la seconde par modification des noms par la procédure événementielle Worksheet_SelectionChange (désactivée au départ
supprimer le Exit Sub pour l'activer)...
http://cjoint.com/data/cnoa2eptBa.htm
Amicalement Yoyo
Bonjour, *Yoyo*
Merci pour ton code, tout simplement superbe...
Encore une petite, pour la route :
Comment changer 10 de resize(10, 1) par le nb d'items que comporte la liste,
que je souhaite variable?
Set Plage = Cells(17, (Asc(Range("B2")) - Asc("A")) * 2 + 1).Resize(10, 1)
Set Plage = Cells(17, (Asc(Range("B2")) - Asc("A")) * 2 +
1).Resize(*nbval(plage)* , 1)
--
Bien amicordialement,
P. Bastard
Je te propose 2 solutions. La première sur la base de ce qu'a dit AV
(fonctions DECALER et INDIRECT), et la seconde par modification des
noms par la procédure événementielle Worksheet_SelectionChange
(désactivée au départ
Encore une petite, pour la route : Comment changer 10 de resize(10, 1) par le nb d'items que comporte la liste, que je souhaite variable? Set Plage = Cells(17, (Asc(Range("B2")) - Asc("A")) * 2 + 1).Resize(10, 1) Set Plage = Cells(17, (Asc(Range("B2")) - Asc("A")) * 2 + 1).Resize(*nbval(plage)* , 1)
-- Bien amicordialement, P. Bastard
Je te propose 2 solutions. La première sur la base de ce qu'a dit AV (fonctions DECALER et INDIRECT), et la seconde par modification des noms par la procédure événementielle Worksheet_SelectionChange (désactivée au départ
supprimer le Exit Sub pour l'activer)...
http://cjoint.com/data/cnoa2eptBa.htm
Amicalement Yoyo
AV
| La solution proposée est nien plus élégante, mai j'aurais un suggetstion à | proposer: | Ecrire : If Target = [A2] Then | au lieu de If Target.Address = "$A$2" | C'est à la fois aussi clair et plus rapide
Hum... hum... Quand tu écris "If Target = [A2]" ça veut dire implicitement "If Target.Value = [A2]" et ça n'a strictement rien à voir avec "Target.Adress" !
AV
| La solution proposée est nien plus élégante, mai j'aurais un suggetstion à
| proposer:
| Ecrire : If Target = [A2] Then
| au lieu de If Target.Address = "$A$2"
| C'est à la fois aussi clair et plus rapide
Hum... hum...
Quand tu écris "If Target = [A2]" ça veut dire implicitement "If Target.Value =
[A2]" et ça n'a strictement rien à voir avec "Target.Adress" !
| La solution proposée est nien plus élégante, mai j'aurais un suggetstion à | proposer: | Ecrire : If Target = [A2] Then | au lieu de If Target.Address = "$A$2" | C'est à la fois aussi clair et plus rapide
Hum... hum... Quand tu écris "If Target = [A2]" ça veut dire implicitement "If Target.Value = [A2]" et ça n'a strictement rien à voir avec "Target.Adress" !
AV
Yoyo
re bonjour Patrick,
Je pense que tu peux faire ainsi (2 lignes de codes au lieu d'une) :
Set Plage = Cells(17, (Asc(Range("B2")) - Asc("A")) * 2 + 1) Set Plage = Plage.Resize(Plage.End(xlDown).Row - Plage.Row + 1,1)
Bien sûr, il faut une cellule vide sous ta liste ;-)))
Amicalement Yoyo
"Patrick BASTARD" a écrit dans le message de news:
Bonjour, *Yoyo*
Merci pour ton code, tout simplement superbe...
Encore une petite, pour la route : Comment changer 10 de resize(10, 1) par le nb d'items que comporte la liste,
que je souhaite variable? Set Plage = Cells(17, (Asc(Range("B2")) - Asc("A")) * 2 + 1).Resize(10, 1) Set Plage = Cells(17, (Asc(Range("B2")) - Asc("A")) * 2 + 1).Resize(*nbval(plage)* , 1)
-- Bien amicordialement, P. Bastard
re bonjour Patrick,
Je pense que tu peux faire ainsi (2 lignes de codes au lieu d'une) :
Set Plage = Cells(17, (Asc(Range("B2")) - Asc("A")) * 2 + 1)
Set Plage = Plage.Resize(Plage.End(xlDown).Row - Plage.Row + 1,1)
Bien sûr, il faut une cellule vide sous ta liste ;-)))
Amicalement
Yoyo
"Patrick BASTARD" <pasdespambastardp@freepasdespam.fr> a écrit dans le
message de news:eoofcjKMGHA.3272@tk2msftngp13.phx.gbl...
Bonjour, *Yoyo*
Merci pour ton code, tout simplement superbe...
Encore une petite, pour la route :
Comment changer 10 de resize(10, 1) par le nb d'items que comporte la
liste,
que je souhaite variable?
Set Plage = Cells(17, (Asc(Range("B2")) - Asc("A")) * 2 + 1).Resize(10, 1)
Set Plage = Cells(17, (Asc(Range("B2")) - Asc("A")) * 2 +
1).Resize(*nbval(plage)* , 1)