Developpez.com

Une très vaste base de connaissances en informatique avec
plus de 100 FAQ et 10 000 réponses à vos questions

FAQ ExcelConsultez toutes les FAQ

Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireLes cellulesLes listes de validation

Une liste de validation est une liste déroulante qui s'affiche dans une cellule, et dont le choix est limité par des données préalablement définies.

Une liste déroulante:
     * Facilite la saisie des données (évite d'écrire de longues descriptions).
     * Evite des erreurs de saisie ou d'orthographe (assure la correction).
     * Garantit que les valeurs saisies sont valides (limite le choix aux données prédéfinies).


Lorsqu'une vous sélectionnez une cellule qui contient une liste de validation, celle-ci affiche une flèche sur son bord droit. Cliquez sur la flèche pour visualiser le menu déroulant, puis sélectionnez l'entrée voulue.

Vous pouvez créer une liste déroulante depuis le menu Données/Validation.
Dans Excel2007, utilisez le bouton "Validation de données" dans le groupe "Outils de données", de l'onglet "Données".
Lorsque la boîte de dialogue est affichée:
Sélectionnez l'onglet "Options".
Choisissez "Liste" dans le menu déroulant "Autoriser:".
Le champ "Source" contient les données qui vont s'afficher dans la liste déroulante sous forme:
* D'une plage de cellules de référence =$B$1:$B$6
* Des données directement saisies dans le champ, séparées par des point virgules Riri;Fifi;Loulou
Cliquez sur le bouton OK pour valider.


L'évènement Change, du module objet Worksheet (feuille de calcul), fonctionne lorsque vous sélectionnez un nouvel élément dans la liste, à partir de la version 2000 d'Excel:

Vba
Sélectionnez

Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox Target
End Sub
Créé le 5 décembre 2007  par SilkyRoad

Par exemple, la feuille nommée "Feuil1" contient vos données sources (Dans la plage A1:A50) pour remplir la liste de validation, cellules vides comprises.
Dans la cellule B1 de la Feuil1, saisissez cette formule (qui permetta d'identifier les cellules non vides):

=SI(A1="";"";SOMMEPROD((A$1:A$50<=A1)-(ESTVIDE(A$1:A$50))))

Et utilisez les poignées de recopie vers le bas, jusqu'en B50.


Dans la colonne C1 de la même feuille, saisissez:

=SI(ESTNA(EQUIV(MIN(B$1:B$50)+LIGNE()-LIGNE(C$1);B$1:B$50;0));"";INDEX(A$1:A$50;EQUIV(MIN(B$1:B$50)+LIGNE()-LIGNE(C$1);B$1:B$50;0)))

Puis étirez la formule vers le bas, jusqu'en C50.
Cette opération permet de regrouper, en tête, les cellules non vides.


Vous pouvez maintenant nommer la plage de cellules dans la feuille source "Feuil1":
Menu Insertion/Nom/Définir
Dans le champ "Nom dans le classeur:", indiquez par exemple: PlageCible
Dans le champ "Fait référence à", indiquez =Feuil1!$C$1:$C$50

Cliquez sur le bouton Ajouter.
Cliquez sur le bouton OK pour valider.


Sélectionnez la feuille qui va contenir la liste de validation (par exemple la Feuil2).
Sélectionnez une cellule.
Utilisez le menu Données/Validation
Onglet "Options"
Autoriser ="liste"
Cochez "ignorer si vide" et "liste déroulante dans cellule".
Dans le champ "source:" saisissez:

=DECALER(PlageCible;0;0;NBVAL(PlageCible)-NB.SI(PlageCible;""))

Désormais, s'il y a des cellules vides dans la plage source Feuil1!A1:A50, elles n'apparaissent plus dans la liste de validation.

Créé le 9 avril 2007  par SilkyRoad

Dans cet exemple, la sélection d'un élément de ma première liste affichera une deuxième liste déroulante différente dans la colonne à coté.
Vous allez constituez votre première liste.
Ensuite, constituez vos sous-listes que vous nommerez du même nom que l'item correspondant dans la liste principale.

Suivez la procédure suivante :
Valeur en A1 : filles
Valeur en A2 : gars

Valeurs de B1 à B5 :
Marie
Claire
Sophie
Julie
Nathalie

Nommez la plage B1:B5, filles (même orthographe que dans la liste principale) en sélectionnant la plage puis en cliquant dans le menu Insertion/nom/définir.

Valeurs de C1 à C5 :
Marc
Dominique
Paul
François
Jacques

Nommez la plage C1:C5, garçons.

En D1, déclarez votre première liste (Données:Validation/ Liste $A$1:$A$2).
en E1, allez dans le menu Données/Validation.
Saisissez dans la zone source :
=INDIRECT($D$2)

Dès lors, vos listes sont liées.
Lorsque vous sélectionnez la valeur filles en D1, la liste déroulante de E1 proposera les prénoms des filles ...

Créé le 19 février 2009  par OuiSansDoute

Pour utiliser les cellules d'une autre feuille, il faut nommer la plage de données qui va être utilisée pour la liste de validation:

Sélectionnez la plage de cellules dans la première feuille.
Ensuite utilisez le menu Insertion/Nom/Définir.
Nommez la plage (par exemple NomListe).
Cliquez sur le bouton Ajouter, puis sur le bouton OK pour valider.

Placez vous sur la deuxième feuille qui va recevoir la liste de validation.
Utilisez le menu Données/Validation.
Sélectionnez l'onglet "Options".
Choisissez "Liste" dans le champ "Autoriser".
Dans le champ "Source", vous indiquez le nom que vous avez donné à la plage de cellules dans la première feuille, précédé du signe égal (=NomListe).
Cliquez sur le bouton OK pour valider.

Créé le 14 mai 2007  par SilkyRoad

Il est possible d'utiliser les options de l'objet Validation afin d'afficher une info-bulle sur la cellule sélectionnée.

Cet exemple affiche des info-bulles différentes si la couleur de fond de la cellule est rouge ou jaune.
(Procédure évènementielle à placer dans le module objet de la feuille devant recevoir les info-bulles)

Vba
Sélectionnez

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Cible As String
 
    'Supprime la validation existante
    Target.Validation.Delete
 
    'Vérifie la couleur de fond de la cellule sélectionnée
    Select Case Target.Interior.ColorIndex
        'si couleur de cellule Jaune
        Case 6: Cible = "dossier réglé"
        'si couleur de cellule rougee
        Case 3: Cible = "dossier en retard"
        'autres
        Case Else: Cible = "Hors zone"
    End Select
 
    'création validation et info-bulle
    With Target.Validation
        .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator:=xlBetween
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputMessage = Cible
        .ShowInput = True
        .ShowError = True
    End With
End Sub
Créé le 20 août 2007  par SilkyRoad

La vérification est effectuée sur la feuille active:

Vba
Sélectionnez

Sub Test()
    'Vérifie si la cellule A1 contient une liste de validation.
    MsgBox ValidationExiste(Range("B1"))
End Sub
 
 
Function ValidationExiste(Cell As Range) As Boolean
    Dim Cible As Range
 
    On Error Resume Next
    'Définit toutes les cellules contenant une liste de validation dans la feuille active.
    Set Cible = ActiveSheet.Cells.SpecialCells(xlCellTypeAllValidation)
    On Error GoTo 0
 
    If Not Cible Is Nothing Then
        If Not Intersect(Cible, Cell) Is Nothing Then
            ValidationExiste = True
            Else
            ValidationExiste = False
        End If
    Else
        ValidationExiste = False
    End If
End Function
Créé le 5 décembre 2007  par SilkyRoad
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.