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

Macros et VBA Excel Discussion :

Validation des données avec tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2019
    Messages : 4
    Par défaut Validation des données avec tableau
    Bonjour,

    Je souhaite effectuer une validation de données de cellule de type liste avec des données stockées dans une variable de type tableau.

    Le code élimine les doublons d'une liste de la feuille "BDD Libellé" en stockant chaque nouvel élément dans une table à une colonne. Ensuite, je souhaite que la cellule S7 de la feuille "Application" ait une validation des données avec la liste de cette table.

    Pour rendre le classeur moins lourd, je souhaite éviter d'avoir à inscrire ces valeurs dans une feuille.

    Voici le code que j'ai actuellement.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    Private Sub Worksheet_Change(ByVal Target As Range)
     
     
        Dim Montab_domaine() As Variant
     
        nb_piece_codif = Worksheets("Application").Range("W3").Value
     
        num_piece = 7
     
        If Not Application.Intersect(Target, Columns(1)) Is Nothing Then  'Si modification d'une valeur de la colonne
     
            For num_piece = 7 To nb_piece_codif + 7
     
                nb = 0
                Compteur = 0
     
                For i = 2 To Sheets("BDD Libellé").Cells(1, 1).End(xlDown).Row
     
                    Var = Sheets("BDD Libellé").Cells(i, 1).Value
                    ReDim Preserve Montab_domaine(nb)
                    Compteur = 0
     
                    For j = 0 To nb
     
                        If Montab_domaine(j) = Sheets("BDD Libellé").Cells(i, 1).Value Then
     
                        Compteur = Compteur + 1
     
                        End If
     
                    Next
     
                    If Compteur = 0 Then
     
                        Montab_domaine(nb) = Sheets("bDD Libellé").Cells(i, 1).Value
                        nb = nb + 1
     
                    End If
     
                Next
     
        '         ---------------------              VALIDATION DES DONNEES             -------------------------
     
     
                With Sheets("Application").Cells(num_piece, 19).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Montab_domaine[]"
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
     
                End With
     
             Next
     
        End If
     
    End Sub
    Lorsque je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Formula1:="=Montab_domaine[]"
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Formula1:="=Montab_domaine(4)"
    , la validation des données s'effectue bien avec la 4ème valeur de mon tableau, mais impossible de mettre l'ensemble des valeurs.

    Merci à vous,

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    il faut joindre ton tableau via le séparateur "," comme quand on crée manuellement une liste de validation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub toto()
    Dim Tabl()
        Tabl = Array("toto", "titi", "tata")
     
        With ActiveCell.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(Tabl, ",")
        End With
    End Sub

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2019
    Messages : 4
    Par défaut
    Ca fonctionne merci beaucoup pour la réactivité !

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Je ne suis pas sûr d'avoir tout compris.

    Au demeurant, il est possible d'effectuer directement une recherche au sein des clés d'un dictionnaire, celui-ci gérant ici les doublons.
    Ce en utilisant la fonction de feuille de travail Equiv (Match en langage VBA)
    Tout comme d'ailleurs dans un tableau à une dimension.

    Exemple d'utilisation

    (Ne pas omettre d'activer la référence Microsoft Scripting.Runtime)

    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
    Option Explicit
     
    Sub Index_dico()
     
    Dim c As Range
    Dim dico As Scripting.Dictionary
    Dim derligne As Long
     
    Set dico = CreateObject("Scripting.Dictionary")
     
    With Feuil1
            derligne = .Cells(.Rows.Count, 8).End(xlUp).Row
            For Each c In .Range("H1:H" & derligne)
                    With c
                            If Not dico.Exists(.Value) Then dico.Add .Value, .Value
                    End With
            Next c
    End With
     
    Dim lenom As String
    lenom = InputBox(prompt:="Entrez le nom")
     
    On Error Resume Next
    Do While IsError(Application.WorksheetFunction.Match(lenom, dico.Keys, 0))
            MsgBox prompt:="Valeur non valide"
            lenom = InputBox(prompt:="Entrez le nom")
    Loop
    On Error GoTo 0
     
    dico.RemoveAll
    Set dico = Nothing
     
    End Sub

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    MarcelG, tu as codé en Late Binding, par createobject, du coup pas besoin d'activer la référence

    suffit

    Après, certes, pas d'accès à l'intellisense.

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Joe,

    Après, certes, pas d'accès à l'intellisense.
    Justement, tout est là.
    Personnellement, je préfère désigner chaque objet avec précision.
    Celle-ci permet certaines erreurs lors de l'écriture, et, pour nos amis débutants, une disponibilité des propriétés et méthodes disponibles.

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

Discussions similaires

  1. [XL-2010] Zone de liste avec "Validation des données"
    Par CmzxNene dans le forum Conception
    Réponses: 3
    Dernier message: 30/03/2017, 01h12
  2. Réponses: 4
    Dernier message: 20/02/2015, 09h25
  3. Validation des données avec SSIS
    Par mehdiyou1985 dans le forum SSIS
    Réponses: 4
    Dernier message: 07/01/2015, 15h58
  4. validation des données / liste & tableau filtré
    Par jonleboss44 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/01/2014, 02h37
  5. Réponses: 10
    Dernier message: 03/06/2009, 14h58

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