Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Liste de validation avec plage nommée

  • Initiateur de la discussion Initiateur de la discussion apt
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

apt

XLDnaute Impliqué
Bonjour à tous,

Suite à ce sujet :

Liste de validation de noms de feuilles sans macro

Je cherche à définir une liste de validation avec une plage nommée ListeFeuilles, qui liste tous les noms des feuilles d'un classeur, excepté le nom de la première feuilles, mais sans passer par une colonne intermédiaire.

VB:
=TRANSPOSE(REMPLACER(LIRE.CLASSEUR(1);1;TROUVE("]";LIRE.CLASSEUR(1));""))

Mais en affectant cette plage à la liste de validation, une erreur est affichée :
La source est reconnu comme erroné

Est-ce possible ?

Merci d'avance.

🙂
 

Pièces jointes

Solution
Travailler un peu pour comprendre ce qu'on vous propose.

J'ai suivi ton conseil, et voici ce que j'ai pu avoir :

VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim s As Object, liste$
Dim nSheets As Variant
 
nSheets = Array("Feuil1", "Feuil3")

For Each s In Me.Sheets
    If UBound(Filter(nSheets, s.Name)) < 0 Then liste = liste & "," & s.Name
Next
With Sh.[B6].Validation
    .Delete
    .Add xlValidateList, Formula1:=Mid(liste, 2)
End With
End Sub
Bonjour apt,

Si l'on ne veut pas utiliser une plage pour la liste il faut du VBA pour la créer en dur.

Voyez le fichier joint et ces macros dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
Workbook_SheetActivate ActiveSheet
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If TypeName(Sh) <> "Worksheet" Then Exit Sub
Dim s As Object, liste$
For Each s In Me.Sheets
    If s.Name <> Sh.Name Then liste = liste & "," & s.Name
Next
With Sh.[G2].Validation
    .Delete
    .Add xlValidateList, Formula1:=Mid(liste, 2)
End With
End Sub
Notez que comme une formule est créée celle-ci ne doit pas dépasser 8192 caractères.

A+
 

Pièces jointes

J'ai ajouté la nouvelle condition, mais la liste de validation continue d'apparaître dans les autres feuilles, même lorsque le classeur est rouvert !

VB:
Private Sub Workbook_Open()
Workbook_SheetActivate ActiveSheet
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If TypeName(Sh) <> "Worksheet" Then Exit Sub
If Sh.Name <> "Feuil1" Then Exit Sub
Dim s As Object, liste$
For Each s In Me.Sheets
    If s.Name <> Sh.Name Then liste = liste & "," & s.Name
Next
With Sh.[G2].Validation
    .Delete
    .Add xlValidateList, Formula1:=Mid(liste, 2)
End With
End Sub
 
Bonjour apt,
Si je veux exclure certaines feuilles de la liste, que devrais-je faire ?
Travailler un peu pour comprendre ce qu'on vous propose.

Il y a déjà une feuille d'exclue, en exclure plusieurs n'est pas difficile :
VB:
For Each s In Me.Sheets
    If s.Name <> "Feuil1" And s.Name <> "Feuil2" And s.Name <> "Feuil3" Then liste = liste & "," & s.Name
Next
With Sh.[G2].Validation
    .Delete
    If liste <> "" Then .Add xlValidateList, Formula1:=Mid(liste, 2)
End With
A+
 
Travailler un peu pour comprendre ce qu'on vous propose.

J'ai suivi ton conseil, et voici ce que j'ai pu avoir :

VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim s As Object, liste$
Dim nSheets As Variant
 
nSheets = Array("Feuil1", "Feuil3")

For Each s In Me.Sheets
    If UBound(Filter(nSheets, s.Name)) < 0 Then liste = liste & "," & s.Name
Next
With Sh.[B6].Validation
    .Delete
    .Add xlValidateList, Formula1:=Mid(liste, 2)
End With
End Sub
 

Pièces jointes

Ou aussi ;
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim nSheets, s As Object, liste$
If Sh.Name <> "Feuil1" Then Exit Sub
nSheets = Array("Feuil1", "Feuil3")
For Each s In Me.Sheets
    If IsError(Application.Match(s.Name, nSheets, 0)) Then liste = liste & "," & s.Name
Next
With Sh.[B6].Validation
    .Delete
    If liste <> "" Then .Add xlValidateList, Formula1:=Mid(liste, 2)
End With
End Sub
 
merci pour le code.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…