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 :

Liste déroulante avec choix multiple


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
    Responsable sécurité
    Inscrit en
    Septembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 5
    Par défaut Liste déroulante avec choix multiple
    Bonjour à tous !

    Voila, j'ai un fichier sur lequel je cherche à réaliser des listes déroulantes avec choix multiples.
    J'ai trouvé un exemple remis sur un forum par eriic que je trouve très bien mais je ne sais pas le retranscrire...

    Accepteriez-vous de regarder mon fichier ?

    Pour info :
    le [Séparateur] et les noms de listes dynamiques sont créés dans la feuille "Listes BD - Ne pas toucher"
    Les listes concernent :
    SiegeLesion
    TypeLesion
    CausesPrincipales
    ManqueOrganisationnel
    DefautComportemental
    ManqueTechnique
    ManqueEPC
    ManqueEPI

    Pour les listes déroulantes à choix multiples, ceci concerne la feuille "2 - Base de Données", colonnes AI, AJ, AW, AX, AY, AZ, BA, BA (de la ligne 7 à la ligne 60 inclus)

    J'aimerais avoir votre aide pour que ces listes à choix multiple puissent fonctionner.
    Acceptez-vous de m'aider ? (j'ai essayer quelques modifications mais je ne suis pas doué en programmation)

    Merci par avance

    Seb
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Accepteriez-vous de regarder mon fichier ?
    est donc une question que tu poses à tous, ici.
    Ma réponse à cette question est très clairement non. Je n'ouvre jamais un classeur tiers !
    J'accepterai par contre bien volontiers de répondre à une question que tu poserais de manière claire et précise sur la partie de ton code que :
    - tu isolerais
    - tu montrerais ici, entre balises code
    Voilà.

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Pour compléter la réponse de unparia: http://www.developpez.net/forums/d84...s-discussions/

    J'ai trouvé un exemple remis sur un forum par eriic
    Un lien vers ce sujet serait probablement utile.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Septembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 5
    Par défaut
    Désolé si ça ne correspond pas à vos habitudes ou si je m'y prends mal.
    Je ne suis pas un utilisateur de VBA ou de système de programmation.

    Voici le code utilisé par Eriiic sur son excel simplifié, sur la feuille 'Feuil1' :

    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
    82
     
    Option Explicit
     
    Dim interne As Boolean
    Private Sub LbxVille_Change()
        Dim ch As String, i As Long, sep As String
        If Not interne Then
            ch = ""
            sep = [Séparateur]
            For i = 0 To LbxVille.ListCount - 1
                If LbxVille.Selected(i) = True Then ch = ch & sep & LbxVille.List(i)
            Next i
            ch = Mid(ch, Len(sep) + 1)
            ActiveCell = ch
        End If
    End Sub
     
    Private Sub LbxVille_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    ' un clic droit désélectionne ou sélectionne l'ensemble de la liste
        Dim i As Long, cpt As Long, state As Boolean
        If Button = xlSecondaryButton Then  ' si clic-droit
            ' nb sélections
            For i = 0 To LbxVille.ListCount - 1
                If LbxVille.Selected(i) Then cpt = cpt + 1
            Next i
            ' si aucune sélection sélectionner tout
            ' sinon désélectionner tout
            If cpt = 0 Then state = True Else state = False
            interne = True    ' palliatif, EnableEvents ne marche pas
            For i = 0 To LbxVille.ListCount - 1
                LbxVille.Selected(i) = state
            Next i
            interne = False
        End If
        LbxVille_Change
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim ch As String, ch2 As String, pos As Long, i As Long
        Dim plage, nomListe, numListe As Long, topIndex As Boolean
        ' plages avec sélection multiple sur cette feuille
        plage = Array("B2:B100", "F2:F3")
        ' nom des listes dans la feuille Listes (en liaison avec les plages définies au-dessus)
        nomListe = Array("Ville", "Prénom")
        ' plage concernée ?
        For numListe = 0 To UBound(plage)
            If Not Intersect(Target, Range(plage(numListe))) Is Nothing Then Exit For
        Next numListe
     
        If numListe <= UBound(plage) Then ' si plage de liste existant
            ' initialiser listbox
            LbxVille.ListFillRange = "Listes!" & Worksheets("Listes").Range(nomListe(numListe)).Address          ' A2:A17" ' [Listes!Ville].Address
            LbxVille.Top = Target.Offset(1, 0).Top
            LbxVille.Left = Target.Offset(0, 1).Left
     
            interne = True    ' palliatif, EnableEvents ne marche pas
            ch = ActiveCell
            ch2 = [Séparateur] & ch & [Séparateur]
            topIndex = False
            ' sélectionner selon contenu cellule
            For i = 0 To LbxVille.ListCount - 1
                If InStr(ch2, [Séparateur] & LbxVille.List(i) & [Séparateur]) > 0 Then
                    ' l'item a été trouvé dans la cellule
                    LbxVille.Selected(i) = True
                    If Not topIndex Then
                        LbxVille.topIndex = i    ' le 1er sélectionné doit être visible dans la textbox
                        topIndex = True
                    End If
                End If
            Next i
            interne = False
            ' afficher textbox
            LbxVille.Visible = True
        Else
            ' ne plus afficher la textbox
            LbxVille.Visible = False
        End If
    End Sub
     
    Sub reinit()
        Application.EnableEvents = True
    End Sub
    Son but était de faire apparaître sur la feuille 'Feuil1' une liste de choix de villes enregistrée sous le nom dynamique 'Ville' se trouvant sur la feuille 'Listes'

    Mon soucis, c'est qu'en copiant ce code sur la page de code de ma feuille, en remplacant 'Feuil1' par le nom de ma feuille ('BASE de données'), idem pour 'Listes' ('Ne pas toucher') et 'Ville' par mon nom de liste ('TypeLesion'), ça ne marche pas.
    J'ai aussi pensé à indiquer les bonnes cellules destination (remplacement de "B2:B100" par ma zone de choix "AI7:AI60"...).
    Y-a-t-il d'autres éléments que je dois modifier ?

    D'autre part, je ne sais pas comment faire pour que je puisse réaliser plusieurs listes... Dois-je réaliser plusieurs fois ce même code d'affiler ?

    Encore une fois, désolé, je ne suis pas programmateur ou même un bon bidouilleur...
    Si besoin, les fichiers Excels sont disponibles.

    Merci pour votre aide

    Seb

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Citation Envoyé par letoutcasse2000 Voir le message
    ça ne marche pas.
    Ce n'est pas très explicite.
    Le code s'arrete avec un message d'erreur? si oui lequel et a quelle ligne?
    Si non, qu'obtiens tu comme résultat?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Septembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 5
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Ce n'est pas très explicite.
    Le code s'arrete avec un message d'erreur? si oui lequel et a quelle ligne?
    Si non, qu'obtiens tu comme résultat?
    Voila mon code :
    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
    82
     
    Option Explicit
     
    Dim interne As Boolean
    Private Sub LbxSiegeLesion_Change()
        Dim ch As String, i As Long, sep As String
        If Not interne Then
            ch = ""
            sep = [Séparateur]
            For i = 0 To LbxSiegeLesion.ListCount - 1
                If LbxSiegeLesion.Selected(i) = True Then ch = ch & sep & LbxSiegeLesion.List(i)
            Next i
            ch = Mid(ch, Len(sep) + 1)
            ActiveCell = ch
        End If
    End Sub
     
    Private Sub LbxSiegeLesion_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    ' un clic droit désélectionne ou sélectionne l'ensemble de la liste
        Dim i As Long, cpt As Long, state As Boolean
        If Button = xlSecondaryButton Then  ' si clic-droit
            ' nb sélections
            For i = 0 To LbxSiegeLesion.ListCount - 1
                If LbxSiegeLesion.Selected(i) Then cpt = cpt + 1
            Next i
            ' si aucune sélection sélectionner tout
            ' sinon désélectionner tout
            If cpt = 0 Then state = True Else state = False
            interne = True    ' palliatif, EnableEvents ne marche pas
            For i = 0 To LbxSiegeLesion.ListCount - 1
                LbxSiegeLesion.Selected(i) = state
            Next i
            interne = False
        End If
        LbxSiegeLesion_Change
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim ch As String, ch2 As String, pos As Long, i As Long
        Dim plage, nomListe, numListe As Long, topIndex As Boolean
        ' plages avec sélection multiple sur cette feuille
        plage = Array("AI7:AI60")
        ' nom des Listes BD - Ne pas toucher dans la feuille Listes BD - Ne pas toucher (en liaison avec les plages définies au-dessus)
        nomListe = Array("SiegeLesion")
        ' plage concernée ?
        For numListe = 0 To UBound(plage)
            If Not Intersect(Target, Range(plage(numListe))) Is Nothing Then Exit For
        Next numListe
     
        If numListe <= UBound(plage) Then ' si plage de liste existant
            ' initialiser listbox
            LbxSiegeLesion.ListFillRange = "Listes BD - Ne pas toucher!" & Worksheets("Listes BD - Ne pas toucher").Range(nomListe(numListe)).Address          ' A2:A17" ' [Listes BD - Ne pas toucher!SiegeLesion].Address
            LbxSiegeLesion.Top = Target.Offset(1, 0).Top
            LbxSiegeLesion.Left = Target.Offset(0, 1).Left
     
            interne = True    ' palliatif, EnableEvents ne marche pas
            ch = ActiveCell
            ch2 = [Séparateur] & ch & [Séparateur]
            topIndex = False
            ' sélectionner selon contenu cellule
            For i = 0 To LbxSiegeLesion.ListCount - 1
                If InStr(ch2, [Séparateur] & LbxSiegeLesion.List(i) & [Séparateur]) > 0 Then
                    ' l'item a été trouvé dans la cellule
                    LbxSiegeLesion.Selected(i) = True
                    If Not topIndex Then
                        LbxSiegeLesion.topIndex = i    ' le 1er sélectionné doit être visible dans la textbox
                        topIndex = True
                    End If
                End If
            Next i
            interne = False
            ' afficher textbox
            LbxSiegeLesion.Visible = True
        Else
            ' ne plus afficher la textbox
            LbxSiegeLesion.Visible = False
        End If
    End Sub
     
    Sub reinit()
        Application.EnableEvents = True
    End Sub
    Message d'erreur :
    Erreur de compilation
    Variable non définie

    Il s'agit de la ligne 51, LbxSiegeLesion a été surligné en jaune

    J'ai pourtant Créé le nom SiegeLesion (même orthographe) avec comme référence =DECALER('Listes BD - Ne pas toucher'!$R$3;;;NBVAL('Listes BD - Ne pas toucher'!$R:$R)-1; )
    Il s'agit bien de là où se trouve ma liste.

    Encore merci pour votre aide

Discussions similaires

  1. Réponses: 12
    Dernier message: 16/09/2013, 20h23
  2. [Débutant] Liste déroulante avec choix multiple (checkbox)
    Par Genyuumaru dans le forum ASP.NET MVC
    Réponses: 3
    Dernier message: 20/11/2012, 09h42
  3. Réponses: 11
    Dernier message: 19/02/2010, 16h00
  4. Liste déroulante avec sélection multiple
    Par lbar012001 dans le forum VBA Access
    Réponses: 4
    Dernier message: 03/11/2007, 09h44
  5. Double liste déroulante avec choix d'onglet
    Par fugy33 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/06/2007, 10h45

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