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

Liste de validation suivant conditions (VBA)

  • Initiateur de la discussion Initiateur de la discussion prorudess
  • 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 !

P

prorudess

Guest
Bonjour à tous,

Je cherche un moyen d'alimenter une liste de validation avec le nom des onglets du classeur à condition que ces onglets remplissent certaines conditions expliquées dans l'exemple ci-joint.
Je pense que cela doit être possible en VBA.
Si quelqu'un a déjà quelques pistes, je suis preneur.

D'avance merci.

Bonne journée
 

Pièces jointes

Re : Liste de validation suivant conditions (VBA)

Bonjour produress,

à tester

Code:
Dim Ws As Worksheet, Liste As String
    Liste = ""
    For Each Ws In ThisWorkbook.Worksheets
        If UCase(Ws.Range("A1").Value) = "OUI" And Ws.Range("A2").Value = 1 Then
            Liste = Liste & "," & Ws.Name
        End If
    Next Ws
    If Len(Liste) > 0 Then Liste = Right(Liste, Len(Liste) - 1)
    With Sheets("Feuil1").Range("C2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=Liste
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub
 
Re : Liste de validation suivant conditions (VBA)

Merci tototiti2008,
Cela marche à la perfection.
Une dernière question, comment faire pour appliquer cette condition à plusieurs listes de validation ?
Par exemple une liste de validation en C2, C3 et C4.
Merci encore
 
Re : Liste de validation suivant conditions (VBA)

Re
Je t'ai donné un mauvais exemple ...
Pour l'appliquer sur des cellules non adjacentes.
Exemple : C2 D11 E1
 
Re : Liste de validation suivant conditions (VBA)

Je sais j'abuse 🙂
Existe t-il un moyen de trier par ordre alphabétique le nom des onglets dans la liste de validation ?
Encore merci par avance
 
Re : Liste de validation suivant conditions (VBA)

Re,

à tester

Code:
Sub tri(a, gauc, droi) ' Quick sort
'http://boisgontierjacques.free.fr/pages_site/formulairelistetriee.htm
   ref = a((gauc + droi) \ 2)
   g = gauc: d = droi
   Do
     Do While a(g) < ref: g = g + 1: Loop
     Do While ref < a(d): d = d - 1: Loop
     If g <= d Then
       temp = a(g): a(g) = a(d): a(d) = temp
       g = g + 1: d = d - 1
     End If
   Loop While g <= d
   If g < droi Then Call tri(a, g, droi)
   If gauc < d Then Call tri(a, gauc, d)
End Sub


Sub ListValid()
Dim Ws As Worksheet, Liste() As String
    ReDim Liste(0)
    For Each Ws In ThisWorkbook.Worksheets
        If UCase(Ws.Range("A1").Value) = "OUI" And Ws.Range("A2").Value = 1 Then
            Liste(UBound(Liste)) = Ws.Name
            ReDim Preserve Liste(UBound(Liste) + 1)
        End If
    Next Ws
    If UBound(Liste) > 0 Then ReDim Preserve Liste(UBound(Liste) - 1)
    Call tri(Liste, LBound(Liste), UBound(Liste))
    With Sheets("Feuil1").Range("C2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=Join(Liste, ",")
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub
 
Re : Liste de validation suivant conditions (VBA)

Bonjour à tous,
Je rencontre un problème avec ce code VBA.
En effet, lorsque j'enregistre le fichier en xls, celui-ci fonctionne parfaitement mais en cas d'enregistrement en xlsm je retrouve une erreur à l'ouverture du fichier : Fonction supprimée: Validation des données dans la partie /xl/worksheets/sheet1.xml
Cela a pour conséquence de supprimer toutes les listes de validation de ma feuille 1.
Si quelqu'un a une piste ...
D'avance merci de votre aide
 
Re : Liste de validation suivant conditions (VBA)

Bonjour produress,

As-tu essayé d'enregistrer une macro en créant une liste de validation sur ta version d'excel ?
si oui, est-ce que ça s'écrit de la même manière que dans le code que je t'ai fourni ?
 
Re : Liste de validation suivant conditions (VBA)

Bonjour tototiti2008,
Merci de revenir vers moi.
Je ne comprend pas ta question, qu'entends-tu par :
As-tu essayé d'enregistrer une macro en créant une liste de validation sur ta version d'excel ?
D'avance encore merci
 
Re : Liste de validation suivant conditions (VBA)

Re,

Si je lis le titre du fil, tu travailles sur Excel 2010
Si je lis ton profil, tu travailles sur Excel 2007

Moi je t'ai fait la macro sur Excel 2003, visiblement pas vraiment compatible avec ta version d'Excel 20XX
Il est possible que sur ta version (dont j'aimerais connaitre le numéro), la création de liste de validation crée un code VBA différent
Tu peux enregistrer une macro sur Excel pour voir le code qu'il écrit quand tu fait manuellement les opérations, ça permettrait de voir s'il y a des paramètres supplémentaires à la création d'une liste de validation sur ta version
 
Re : Liste de validation suivant conditions (VBA)

Merci pour tes précisions.
Effectivement je travaille désormais sur Excel 2010.
Mon fichier d'origine est en xls, est lorsque je l'enregistre pour le personnaliser, je crée un xlsm ou je reste en xls suivant la personne à qui je l'envoie.
Voici le code généré en manuel depuis Excel 2010 :
Code:
Sub Macro1()
' Macro1 Macro
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$A$1"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub
Quand je ré-ouvre le fichier une fois converti en xlsm, il me supprime toutes les listes de validation (crées sans macro) de la feuille 1.
La macro, elle, re-crée les listes de validation suivant les noms d'onglets et les autres feuilles du classeur comportant des listes de validation ne sont pas impactées.

Pour information, j'utilise ta formule VBA sur plusieurs feuilles du classeur avec l'évènement Private Sub Worksheet_activate() et sur le ThisWorkbook avec l'évènement Private Sub Workbook_Open()
 
Dernière modification par un modérateur:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
320
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…