Liste déroulante source = feuille différente

  • Initiateur de la discussion Xtian (du Québec)
  • Date de début
X

Xtian (du Québec)

Guest
Bonjour le Forum

Je désire établir différentes listes de validation sur la feuil1 et les sources se trouvent sur différentes feuilles (feuil2, feuil3, ...) mais toujours avec les mêmes références aux cellules. Voir ci-dessous:

B4 et B5 de la feuil1 = zone de validation B6:B20 de la feuil2(peut changer)
B6 et B7 de la feuil1 = zone de validation B6:B20 de la feuil3(peut changer)
Même chose pour plusieurs autres cellules de la feuil1

Problème 1:
Moa m'a suggéré d'utiliser des feuilles différentes pour mes listes et de nommer ces listes pour les utiliser comme source. C'est très bien et c'est ce que je fais.Je peux, manuellement, nommer ces listes sans problèmes mais comme elles seront variables, je voudrais modifier le code suivant pour rendre variables les cellules de ma liste

ActiveWorkbook.Names.Add Name:="Liste1", RefersToR1C1:="=Feuil2!R6C2:R20C2"

J'ai de la difficulté avec les ", &, :, =, je ne sais jamais comment les disposés dans ma formule.

Je voudrais remplacer R6C2:R20C2 par B6 et Range("B50").End(xlUp).Address

Problème 2:
J'aimerais savoir comment remplacer ="=Liste1" dans le code ci-dessous par ma string LST pour sélectionner des listes différentes. J'utilise la Function Call pour effectuer les mise à jour.

Function Liste(LST as String)
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

xlBetween, Formula1:="=Liste1"
(C'est ici que j'ai un problème, je veux mettre LST

.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
--------------------------------------------------
Sub MAJ_Liste1 (Liste1)
Range("B4:B5").select
Call Liste
End sub
--------------------------------------------------
Sub MAJ_Liste2 (Liste2)
Range("B6:B7").select
Call Liste
End sub

Je prévois finalement faire un code "VALIDATION" qui appelera tous les Sub MAJ_??? pour mettre à jour toutes mes cellules de la feuil1.

Je ne sais pas si c'est assez clair...j'attends vos bonnes suggestions

Merci de votre aide

Xtian(du Québec)
 
W

wilfried

Guest
SAlut Xtian,

Si tu utilise des plage nommé comme moa te l'a suggéré, tu modifier la liste en utilisant la fonction insertion ta plage nommé ce modifie en concéquance.

J'ai fait une appli avec des listes déroulantes. Chacune de mes listes sont alimenter par des plage différentes voici la méthode que j'emploie :

range("A65536").select
lstbox1.rowsource=sheets(m_fls_src).range("A1",activecell.end(xlup))

mais chaque liste n'est alimenter que par une seul plage.

Si elle sont répartie sur plusieurs feuille, j'utiliserai une feuille tampon qui regroupe les donneés de tes plages.

A+ Wilfried ;op
 
C

ChTi'160

Guest
Salut "Xtian (du Québec)"et "Wilfried"
en pièce jointe ce que j'ai cru comprendre
on modifie une plage en Feuil2 ou en Feuil3 (range("B6:B"&Derlgn) et celle ci se renomme via "Workbook_SheetChange" et apparrait modifiée en feuil1
celà si j'ai bien compri la question Lol eh oui !!!
tiens nous au courant
A+++
Jean Marie
 

Pièces jointes

  • PlageNommee.zip
    11.3 KB · Affichages: 69
  • PlageNommee.zip
    11.3 KB · Affichages: 69
  • PlageNommee.zip
    11.3 KB · Affichages: 73
X

Xtian (du Québec)

Guest
Chti'160 ??? Liste déroulante source = feuille différente

Merci Wilfried et Chti'160 je crois que j'arriverai à résoudre mon problème avec vos informations.

Chti'160, j'ai déjà un code Private Sub Workbook_SheetChange(ByVal Target As Range) dans Feuil1 qui recherche les doublons pour une certaine plage de données (toutes mes listes déroulantes de la feuil1). Étant donné que mes listes (feuil2, feuil3, ...) sont modifiées par macros à partir d'une liste globale qui se trouve en feuil19 (Si on fait un changement dans la liste globale, la feuille correspondante est automatiquement modifiée).

Alors, si les changements, par exemple, sont effectués par macros à la liste de la feuil2, est-ce que le code dans ton exemple va s'exécuter quand même ? Serait-il préférable de créer une Private Sub Workbook_SheetChange pour chaque feuille au lieu de le mettre dans ThisWorkbook ?

Tu as exactement compris ce que je voulais dans mon message précédent. Je vais m'amuser à appliquer tes conseils en attendant ta réponse.

Merci encore et @+++
Xtian (du Québec)
 
C

ChTi'160

Guest
Salut"Xtian (du Québec)"
bonjour le Québec
je ne sais pas si j'ai compri tes questions
1° j'ai via une macro et un bouton ajouté un élément à la liste 1 et celui ci a été inclu dans la plage nommée donc celà répond à la question
Alors, si les changements, par exemple, sont effectués par macros à la liste de la feuil2, est-ce que le code dans ton exemple va s'exécuter quand même ? Réponse OUI
pour la question
j'ai déjà un code Private Sub Workbook_SheetChange(ByVal Target As Range) dans Feuil1 qui recherche les doublons pour une certaine plage de données (toutes mes listes déroulantes de la feuil1). Étant donné que mes listes (feuil2, feuil3, ...) sont modifiées par macros à partir d'une liste globale qui se trouve en feuil19 (Si on fait un changement dans la liste globale, la feuille correspondante est automatiquement modifiée).
je pense qu'il n'y a pas de problème mais je ne peux tester je n'ai pas le fichier
tu testes et si problème tu joins un fichier de 50k max pour qu'on puisse t'aider
tiens nous au courant
A+++
Jean Marie
 
X

Xtian (du Québec)

Guest
Merci Merci Merci Jean-Marie

Avec les informations que tu m'as donné, j'ai finalement obtenu ce que je voulais. J'ai un peu modifié tes informations mais le résultat est exactement ce que je voulais. J'utilise le code suivant pour mettre à jour les noms de la liste et supprimer le nom de la drenière liste active:

Sub Liste_RM()
Sheets("RM").Activate
ActiveWorkbook.Names("ListeRM").Delete

Call MAJListeEmployés("RM", 8, "H22:I22")
***Note: Je n'ai pas joint cette fonction à ce message car le code est un peu long...)

'Établir la référence de la liste
RefL = "=" & ActiveSheet.Name & "!" & Range("B6").Address & ":" & Range("B36").End(xlUp).Address
Call RenameList(RefL, "ListeRM")
End Sub

et pour renommer ma nouvelle liste:

Function RenameList(RefL, NomL As String)
'Renommer la liste de validation
'Sélectionner les cellules à nommer
Range("B6").Select
Range(Selection, Selection.End(xlDown)).Select
'Établir le nom de la liste
With Selection
ActiveWorkbook.Names.Add Name:=NomL, RefersTo:=RefL
End With

End Function

Comme mes cellules de validation sur ma feuille de saisie font référence à la listeRM, ces cellules sont automatiquement mis à jour avec la nouvelle liste.

Ah le Forum, qu'est-ce que je ferrais sans vous !!!

Salutation et à la prochaine

Xtian (du Québec)
@+++
;-)
 

Discussions similaires

Réponses
1
Affichages
155
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 490
Messages
2 088 885
Membres
103 982
dernier inscrit
krakencolas