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 :

Transfert d'un dictionary dans une listbox ( VBA) [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Janvier 2013
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 58
    Par défaut Transfert d'un dictionary dans une listbox ( VBA)
    bonjour
    Je reviens vers vous , pour demander votre aide , merci d'avance:
    Mon problème se pose comme suite :
    j’alimente un "Scripting.Dictionary" a partir d'une variable tableau (ici "TabFBase") de plusieurs colonnes ( après filtrage), je transmet le résultat dans une autre variable tableau ( ici "a") , et puis j'alimente ma Listbox comme dans le bout de code ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim j, i, dico1,a
                Set dico1 = CreateObject("Scripting.Dictionary")
                For i = Ubound(TabBase,1) To 2 Step -1
                    If TabFBase(i, 3) = "Nom" And TabFBase(i, 21) = "Statut" Then
                        dico1(i) = Array(TabFBase(i, 1), TabFBase(i, 2), TabFBase(i, 5), TabFBase(i, 9), TabFBase(i, 11), _
                        TabFBase(i, 12), TabFBase(i, 7), TabFBase(i, 16), TabFBase(i, 22))
                    End If
                Next i
                If dico1.Count <= 1 Then Exit Sub           
                a = Application.Transpose(Application.Transpose(dico1.items))
                Me.CBNTicket.List = a
    Lorsque le "Dico1" contient plus de deux enregistrements , pas de problème , mais lorsqu'il contient un seul , la Listbox est vide et je ne reçois aucun message.
    merci de votre aide SVP
    BN : Lorsque je transmet le résultat directement dans une feuille , sa marche Nickel

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    Une piste possible

    List attend un Array 2D.

    Si n=1 dans le Array Tbl(1 To ncol, 1 To n)
    ApplicationTranspose(Tbl) génère un Array à 1 dimension X(1 To ncol)

    Boisgontier

  3. #3
    Membre averti
    Inscrit en
    Janvier 2013
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 58
    Par défaut
    bonjour jacques et merci de votre réactivité
    Y'a t'il une solution pour contourner le .AddItem

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Voici une séquence pour alimenter une ListBox sans les lignes vides d'un Array a():
    -On ajoute 1 ligne à Tbl() pour qu'il y ait au moins 2 lignes
    -On supprime la ligne en trop dans le ListBox avec RemoveItem


    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
     
    Private Sub UserForm_Initialize()
      Set f = Sheets("bd")
      Set d = CreateObject("Scripting.Dictionary")
      a = f.Range("A2:D" & f.[A65000].End(xlUp).Row).Value
      For i = LBound(a) To UBound(a)
        If a(i, 1) <> "" Then d(i) = Array(a(i, 1), a(i, 2), a(i, 3), a(i, 4))
      Next i
      n = d.Count
      If n > 0 Then ' gestion 1 seule ligne dans la BD
        Dim Tbl: Tbl = Application.Transpose(d.items)
        ReDim Preserve Tbl(1 To 4, 1 To n + 1)
        Me.ListBox1.List = Application.Transpose(Tbl)
        Me.ListBox1.RemoveItem n 
      End If
    End Sub
    Boisgontier

  5. #5
    Membre averti
    Inscrit en
    Janvier 2013
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 58
    Par défaut
    bonjour
    merci pour l'astuce
    cdt

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Pour éviter Application.Transpose, on peut utiliser .Column au lieu de .List


    Boisgontier

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

Discussions similaires

  1. VBA Excel: insertion d'un tableau dans une listbox
    Par LANGAZOU dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 18/08/2015, 09h28
  2. [XL-2010] VBA : Recopier une plage filtrée dans une Listbox de formulaire
    Par Pipeti dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/06/2015, 18h36
  3. [Autocad] Insertion d'une ligne dans une listbox (VBA)
    Par stick25 dans le forum Général VBA
    Réponses: 8
    Dernier message: 18/03/2010, 10h56
  4. [VBA-E]Rechercher (textbox) dans une listbox
    Par Kaiba dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 04/04/2007, 14h05
  5. [VBA-E] réaliser un glisser-déplacer dans une listbox
    Par bandit boy dans le forum Macros et VBA Excel
    Réponses: 74
    Dernier message: 07/04/2006, 12h10

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