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 une combobox avec les informations d'une LISTVIEW [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2024
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2024
    Messages : 5
    Par défaut Créer une combobox avec les informations d'une LISTVIEW
    Bonsoir,

    En premier lieu, excusez moi si je ne fais pas bien les choses

    Bénévole au sein d'une asso et malgré ma pugnacité, je ne trouve pas. Novice, mais j'apprends et je commence à me débrouiller au regard des différents tutos (mais je bute).

    Donc, je souhaite remplir une combobox dans mon userform "Saisie" avec les infos d'une listview du champ "activite", puis selon le choix de l'info de ma combobox afficher dans ma listview les renseignents s'y rapportant.
    Merci de votre aide
    Cordialement

    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
     
     
    Private Sub CBdiscipline_Change()
     
    ' LA PARTIE CI DESSOUS NE FONCTIONNE PAS NON PLUS 'Erreur de compilation' Impossible d'affecter a un tableau
     
    'Set MonDico = CreateObject("Scripting.Dictionary")
    '   ReDim a(ListView1.ListItems.Count) As String
    '   For i = 0 To ListView1.ListItems.Count - 1
    '   a = ListView1.ListItems(i).ListSubItems(8).Text
    '   If a(i) <> "" Then MonDico(a(i)) = ""
    '   Next i
    '   CBdiscipline.List = MonDico.keys
     
    ' CELLE CI NON PLUS avec message d'erreur 'erreur d'execution 35600 Index out of Bounds
     
    For i = 1 To ListView1.ListItems.Count
                If ListView1.ListItems(i).ListSubItems(8).Text <> "" Then
                 If CBdiscipline.ListCount > 0 Then  'Deja des items dans la liste
                Paspresent = True
                For j = 0 To CBdiscipline.ListCount - 1
                    If CBdiscipline.List(j) = ListView1.ListItems(i).ListSubItems(8).Text Then
                        Paspresent = False
                    End If
                Next
          Else 'pas encore d'item dans la liste
                Paspresent = True
          End If
     
          If Paspresent = True Then CBdiscipline.AddItem ListView1.ListItems(i).ListSubItems(7).Text
     
        End If
    Next i
    End Sub
    Récompenses Ufo.xlsm

  2. #2
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 510
    Par défaut
    Bonjour,
    Voici quelques petites réflexions :
    • Ne pas ajouter de lignes vides sur vos tableaux structurés cela est contre-productif
    • Donner des noms explicites à vos tableaux exemple : vt_Listing et vt_Datas.
    • Un seul tableau devrait suffire donc concaténer les deux tableaux.
    • A mon humble avis la colonne Nom & Prénom est inutile.


    Concernant les formulaires :
    • Je pense qu'un seul formulaire peut faire l'affaire
    • Au vu de l'utilisation du ListView il peut être avantageusement remplacé, par une zone de liste.
    • Utiliser la puissance d'Excel et des tableaux structurés dans vôtre code.


    Exemples :
    A l'initialisation du formulaire on rempli la zone de liste déroulante (Disciplines) avec les valeurs triées de la colonne activité du tableau vt_Listing :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
        Disciplines.List = Evaluate("=SORT(UNIQUE(vt_Listing[Activite]))")
    End Sub
    Si vous utilisez une zone de liste (DetailsMembers) en lieux et place du listView vous pouvez mettre à jour la liste sur changement de la zone de liste déroulante Disciplines :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Disciplines_Click()
        DetailsMembers.List = Evaluate("=FILTER(vt_Listing,(vt_Listing[Activite]=""" & Me.Disciplines.Value & """),""Pas de données disponibles"")")
    End Sub
    ce ne sont que des codes minimalistes qui demandent à être étoffés notamment au niveau de la gestion des erreurs.
    NB le remplissage des listes avec la méthode Evaluate n'est pas compatible avec RowSource. Il faut donc supprimer toutes références sur les propriétés RowSource des zones de liste.

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

Discussions similaires

  1. Publipostage Word avec les informations d'une BDD
    Par EcceLex dans le forum Word
    Réponses: 1
    Dernier message: 05/04/2017, 20h47
  2. [XL-2010] PB remplir une ComboBox avec les valeurs de plusieurs cellules sur la même lignes
    Par eviuss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/05/2014, 07h01
  3. Réponses: 2
    Dernier message: 18/03/2013, 19h56
  4. Remplir une comboBox avec les polices système
    Par rillette87 dans le forum Flex
    Réponses: 2
    Dernier message: 15/04/2011, 16h02
  5. Réponses: 2
    Dernier message: 26/07/2004, 13h34

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