IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Tableau de données avec liste de validation [XL-2003]


Sujet :

Excel

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 108
    Points : 74
    Points
    74
    Par défaut Tableau de données avec liste de validation
    Bonsoir à tous

    Voila je cherche a mettre a jour un tableau avec des listes déroulantes ou liste de validation sachant que les données sont dans des feuilles différentes.
    Même avec une macro je suis preneur
    A l'avance merci
    Phiphi

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    En remplaçant la combobox par une liste de validation tu pourrais utiliser la formule "indirect" couplet a un "rechercheH"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEH(B2;INDIRECT("'"&A3&"'!D2:F16");15;0)
    Jérôme

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    891
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 891
    Points : 831
    Points
    831
    Par défaut Une proposition...
    Voici un code qui met à jour la liste de données d'un tableau Excel 2007 pour une liste de validation :

    Comme l'évènement "_change" n'est pas très sélectif (pas du tout et il y a encore rien d'autre sous 2007), il faut tester avant d'agir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Sub Worksheet_Change(ByVal Target As Range)
        '--- Pour ajouter à la liste les noms
        Dim Rep As Integer
        If Target.Cells.Count > 1 Then Exit Sub 'Si plus d'une cellule sélectionnée
        If Target = "" Then Exit Sub                 
     
        'Pour une cellule sélectionnée dans la colonne "M", colonne avec les validation
        If Not Application.Intersect(Target, Range("M:M")) Is Nothing And Target <> vbNullString Then 
           'Si le mot tapé n'est pas dans le te tableau 2007 des données et situé en B2:B6500 
           If Application.WorksheetFunction.CountIf(Range("B2:B6500"), Target) = 0 Then 
              Application.EnableEvents = False 'Sécurité.
              'Demande ce qu'il faut faire
              Rep = MsgBox("Le nom " & Chr$(34) & Target & Chr$(34) & _
                       " ne fait pas partie de la liste." & Chr$(13) & "Voulez-vous l'ajouter à la liste ?", _
                        vbYesNoCancel + vbQuestion, "Mot non reconnu")
                If Rep = vbCancel Then 'Si annulé, replace le texte original dans la cellule de validation
                    Target = strOriginalEntry
                ElseIf Rep = vbNo Then
                    'Ne pas ajouter à la liste => ne fait rien
                Else
                    'Ajout le mot à la liste nommée "TabMateriel"
                    Call AjouteLigneTableau(Target.Value)
                End If
           End If
        End If
        Application.EnableEvents = True 
    End Sub
     
    Sub AjouteLigneTableau(Contenu As String)
        '>>>>>>>>>> Procédure de la FAQ modifiée <<<<<<<<<<<<<<<<<<<<
        Dim ListObj As ListObject
     
        'Définit le tableau dans la feuille de calcul
        Set ListObj = Worksheets("LstMaterielDisponible").ListObjects("TabMateriel")
        'Ajoute une ligne en premier
        ListObj.ListRows.Add
     
        'Ajoute la valeur (ici une colonne)
        ListObj.Range(ListObj.ListRows.Count + 1, 1).Value = Contenu
    End Sub
    ESVBA

  4. #4
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    891
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 891
    Points : 831
    Points
    831
    Par défaut Une proposition suite à MP...
    Le fichier simple sans macro pour éviter les virus de macro et le code à ajouter dans la feuille VBA (Feuil3) ou "Saisie dans la liste de validation" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Option Explicit
    Dim strValeurDOrigine As String
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        '--- Pour ajouter à la liste les noms
        Dim Rep As Integer
        If Target.Cells.Count > 1 Then Exit Sub
        If Target = "" Then Exit Sub
     
        If Not Application.Intersect(Target, Range("M:M")) Is Nothing And Target <> vbNullString Then ' Cellule avec validation change
           If Application.WorksheetFunction.CountIf(Sheets("LstObjets").Range("B3:B6500"), Target) = 0 Then 'Nom nouveau
              Application.EnableEvents = False 'Sécurité
              'Demande ce qu'il faut faire
              Rep = MsgBox("Le nom " & Chr$(34) & Target & Chr$(34) & _
                       " ne fait pas partie de la liste." & Chr$(13) & "Voulez-vous l'ajouter à la liste ?", _
                        vbYesNoCancel + vbQuestion, "Mot non reconnu")
                If Rep = vbCancel Then 'Si annulation de la saisie
                    Target = strValeurDOrigine
                ElseIf Rep = vbNo Then
                    'Si on laisse tel quel => ne fait rien
                Else 'Ajout d'une nouvelle ligne au tableau
                    Call AjouteLigneTableau(Target.Value)
                End If
           End If
        End If
        Application.EnableEvents = True 'Allow Events
    End Sub
     
    Sub AjouteLigneTableau(Contenu As String)
        Dim ListObj As ListObject
     
        'Définit le tableau dans la feuille de calcul ATTENTION ECRIT EN DUR ICI PAS PASSE EN PARAMETRE
        Set ListObj = Worksheets("LstObjets").ListObjects("TabNoms")
        'Ajoute une ligne
        ListObj.ListRows.Add
     
        'Ajoute dans la dernière ligne.
        ListObj.Range(ListObj.ListRows.Count + 1, 1).Value = Contenu
    End Sub
    Ca convient ?

    ESVBA
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Tableau de données et liste déroulante
    Par santacrus dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/02/2012, 10h45
  2. Lier un tableau de données à une liste déroulante
    Par mohammed_amine_wardy dans le forum Langage
    Réponses: 1
    Dernier message: 07/06/2009, 11h54
  3. [AJAX] lier un tableau de données à une liste déroulante
    Par Sh4dow49 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/07/2008, 22h21
  4. lier un tableau de données à une liste déroulante
    Par Sh4dow49 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 22/07/2008, 17h24
  5. Réponses: 5
    Dernier message: 06/12/2007, 22h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo