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 :

créer sa propre liste en vba avec validation de données [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 143
    Par défaut créer sa propre liste en vba avec validation de données
    Bonjour le forum,

    J'ajoute sur une feuille excel protégée, une ligne en lui paramétrant les données d'utilisateur.

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Sub saisuiv(modif As Boolean)
     
    Sheets("SUIVI").Unprotect
     
    Load formSaisi
        If modif = True Then
            lig = ActiveCell.Row
            tit = Sheets("SUIVI").Range("d" & lig).Value
            For lig1 = 0 To formSaisi.lisAge.ListCount - 1
                If tit = formSaisi.lisAge.List(lig, 0) Then
                    formSaisi.lisAge.ListIndex = lig1
                    Exit For
                End If
            Next
        Else
            lig = 15
            Do While Sheets("SUIVI").Range("c" & lig).Value <> ""
                lig = lig + 1
                If lig = 10000 Then
                    MsgBox "erreur systeme, contacter le concepteur", vbCritical
                    Exit Sub
                End If
            Loop
        End If
     
    formSaisi.Show vbModal
     
    If formSaisi.Checbut.Value = True Then
        tit = formSaisi.lisAge.List(formSaisi.lisAge.ListIndex, 0)
        tit1 = formSaisi.listAct.List(formSaisi.listAct.ListIndex, 0)
        With Sheets("SUIVI")
            .Range("c" & lig).Value = formSaisi.saisDat.Value
            .Range("d" & lig).Value = tit
            .Range("f" & lig).Value = formSaisi.infMet.Caption
            .Range("g" & lig).Value = tit1
            .Range("k" & lig).Value = formSaisi.listGest.List(formSaisi.listGest.ListIndex, 0)
            .Range("l" & lig).Value = formSaisi.listDesc.List(formSaisi.listDesc.ListIndex, 0)
            .Range("M" & lig & ":N" & lig).NumberFormat = "[$-fr-FR]d-mmm-yy;@"
            .Range("Q" & lig & ":S" & lig).NumberFormat = "[$-fr-FR]d-mmm-yy;@"
            .Range("M" & lig & ":S" & lig).Locked = False
            .Range("M" & lig & ":S" & lig).FormulaHidden = False
            .Range("i" & lig & ":j" & lig).Locked = False
            .Range("i" & lig & ":j" & lig).FormulaHidden = False
            With .Range("I" & lig).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="Oui;Non"
            End With
            With .Range("j" & lig).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="Réussite;Échec;Prochainement"
            End With
     
            b = 6
            Do While Sheets("Liste des ACTIONS").Range("c" & b).Value <> ""                               'saisi colonne acteurs
                If tit1 = Sheets("Liste des ACTIONS").Range("c" & b).Value Then
                    .Range("h" & lig).Value = Sheets("Liste des ACTIONS").Range("d" & b).Value
                    Exit Do
                End If
                b = b + 1
                If b = 10000 Then Exit Do
            Loop
     
            b = 6
            Do While Sheets("Informations personnelles").Range("c" & b).Value <> ""                               'saisi colonne secteur
                If tit = Sheets("Informations personnelles").Range("c" & b).Value Then
                    .Range("e" & lig).Value = Sheets("Informations personnelles").Range("g" & b).Value
                    Exit Do
                End If
                b = b + 1
                If b = 10000 Then Exit Do
            Loop
     
        End With
    End If
     
    Unload formSaisi
     
    Sheets("SUIVI").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Sheets("SUIVI").EnableSelection = xlUnlockedCells
     
    End Sub
    Vous trouverez ci dessus le code qui fonctionne sans problème mais j'ai un petit soucis sur cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
           With .Range("I" & lig).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="Oui;Non"
            End With
            With .Range("j" & lig).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="Réussite;Échec;Prochainement"
            End With
    elle consiste à créer sur une cellule une liste de choix avec les éléments "oui" ou "non".
    Et pour l'autre cellule une liste de choix avec les éléments "Réussite" ou "échec" ou "prochainement"
    J'ai utilisé l'enregistreur de macro pour récupérer les méthodes et j'ai supprimé le superflus.

    Après le test j’obtiens qu'un seul choix : "Oui;Non" pour l'une et pour l'autre j'ai qu'un seul choix "Réussite, échec prochainement.".
    J'enlève la protection et je vais sur validation des données pour vérifier mon contenu, tout va bien.
    Je ferme et je reviens en mode utilisateur je me retrouve avec tous mes choix comme je l'attendais !!!!

    Pourquoi cela ne fonctionne pas du premier coup ?
    Car l'utilisateur ne va pas faire la manip que j'ai fait à chaque fois .

    Merci pour votre aide,

  2. #2
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour,

    Il serait préférable de passer à un tableau structuré (listobject) , ils comportent de nombreux avantages, y compris celui d'étirer les formules ,mfc, et liste de validation automatiquement jusqu'à la dernière ligne du tableau.

    Et si vous apprécierez de coder en Vba, facilite aussi grandement l'utilisation de plage de cellules...

    Bref l'essayer, c'est l'adopter.

    Bav,

  3. #3
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    mfoxy :

    Sinon, remplacer les ; par des , :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
           With .Range("I" & lig).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="Oui,Non"
            End With
            With .Range("j" & lig).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="Réussite,Échec,Prochainement"
            End With

  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 les amis, Bonjour le Forum,

    Oui, l'ami mfoxy, l'usage d'un tableau structuré est plus que pertinent, ici en particulier

    Une proposition

    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
    Option Explicit
     
    Sub test_valid()
     
    Dim laliste As String
     
    With Worksheets(1)
     
           laliste = Application.WorksheetFunction.TextJoin(",", False, .ListObjects("Tableau1").ListColumns("Parent").DataBodyRange)
     
           With .Range("D1").Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=laliste
            End With
     
    End With
     
    End Sub
    Je recherche les termes pour préciser les paramètres de la fonction Textjoin.

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 143
    Par défaut problème corrigé
    Bonsoir tout le monde,

    Effectivement passé par un tableau structuré est la méthode la meilleure.
    Sur ce coup, vu le nombre de données j'ai estimé que je pouvais m en passé.

    Par contre il me semblait avoir testé la virgule !!!
    Et ben non, car celà fonctionne !!

    merci pour votre aide

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

Discussions similaires

  1. créer sa propre liste en vba avec validation de données
    Par chrisaccess dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/12/2020, 07h49
  2. [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
  3. Info : Petit programme VBA avec base de donnée excel
    Par guismoman60 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/10/2013, 10h20
  4. [AC-2010] Associer liste de choix avec une autre donnée
    Par theolivier dans le forum IHM
    Réponses: 3
    Dernier message: 10/10/2012, 13h38
  5. Réponses: 2
    Dernier message: 27/02/2011, 10h11

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