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 :

Alimentation d'une LISTBOX par une variable tableau triée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Août 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Août 2017
    Messages : 32
    Par défaut Alimentation d'une LISTBOX par une variable tableau triée
    Bonjour à toutes et à tous,

    Le fichier suivant permet d'afficher une liste de codes triés relative à la commande (col E) encodée dans le textbox.

    Tous les codes (col F) ne sont pas contigus et la base de données originale contient plus de 50.000 lignes.

    Le code semble fonctionnel mais est-il correct pour autant (utilité de passer par 2 dimensions, utilisation d'un dictionnaire ....)

    Merci à vous
    Fichiers attachés Fichiers attachés

  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,

    La recherche directement sur les cellules et AddItem ne vont pas comtribuer à accélérer le code.

    Avec cette version:
    -On peut choisir les colonnes affichées & l'ordre d'affichage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ColVisu = Array(1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 15) ' Colonnes à visualiser (adapter)
    -Choisir la colonne de tri
    -On pourrait remplacer le textBox par un comboBox

    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
    Option Compare Text
    Dim f, TblBD, ColVisu(), NbCol
    Private Sub UserForm_Initialize()
      Set f = Sheets("BD")
      Set Rng = f.Range("A2:Z" & f.[A65000].End(xlUp).Row)
      TblBD = Rng.Value ' rapidité
      ColVisu = Array(1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 15) ' Colonnes à visualiser (adapter)
      NbCol = UBound(ColVisu) + 1
      ReDim TblTitreListBox(1 To UBound(ColVisu) + 1)
      TitreBD = Application.Transpose(Rng.Offset(-1).Resize(1).Value)
      For i = LBound(ColVisu) To UBound(ColVisu)
        TblTitreListBox(i + 1) = TitreBD(ColVisu(i), 1)
      Next i
      Me.ComboTri.List = TblTitreListBox
      '---- Contenu ListBox initial
      EnteteListBox
      Affiche
    End Sub
     
    Private Sub TextBox1_Change()
      Affiche
    End Sub
     
    Sub Affiche()
      temp = "*" & Me.TextBox1 & "*"
      Dim Tbl(): n = 0
      For i = 1 To UBound(TblBD)
        If TblBD(i, 5) Like temp Then
          n = n + 1: ReDim Preserve Tbl(1 To NbCol, 1 To n)
          c = 0
          For Each k In ColVisu
            c = c + 1: Tbl(c, n) = TblBD(i, k)
          Next k
        End If
      Next i
      If n > 0 Then Me.ListBox1.Column = Tbl Else Me.ListBox1.Clear
    End Sub
     
    Sub EnteteListBox()
      x = Me.ListBox1.Left + 8
      y = Me.ListBox1.Top - 12
      For Each k In ColVisu
        Set Lab = Me.Controls.Add("Forms.Label.1")
        Lab.Caption = f.Cells(1, k)
        Lab.Top = y
        Lab.Left = x
        x = x + f.Columns(k).Width * 1#
        temp = temp & f.Columns(k).Width * 1# & ";"
      Next
      temp = Left(temp, Len(temp) - 1)
      Me.ListBox1.ColumnCount = UBound(ColVisu) + 1
      Me.ListBox1.ColumnWidths = temp
    End Sub
     
    Private Sub ComboTri_click()
      Dim Tbl()
      colTri = Me.ComboTri.ListIndex
      Tbl = Me.ListBox1.List
      TriMultiCol Tbl, LBound(Tbl), UBound(Tbl), colTri
      Me.ListBox1.List = Tbl
    End Sub
     
    Sub TriMultiCol(a, gauc, droi, colTri) ' Quick sort
      ref = a((gauc + droi) \ 2, colTri)
      g = gauc: d = droi
      Do
        Do While a(g, colTri) < ref: g = g + 1: Loop
        Do While ref < a(d, colTri): d = d - 1: Loop
        If g <= d Then
           For c = LBound(a, 2) To UBound(a, 2)
              temp = a(g, c): a(g, c) = a(d, c): a(d, c) = temp
           Next
           g = g + 1: d = d - 1
         End If
       Loop While g <= d
       If g < droi Then TriMultiCol a, g, droi, colTri
       If gauc < d Then TriMultiCol a, gauc, d, colTri
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

  3. #3
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Août 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Août 2017
    Messages : 32
    Par défaut
    Merci boisgontierjacques pour votre réponse rapide et fonctionnelle

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/08/2017, 10h23
  2. méthode qui alimente une variable tableau
    Par huître dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 15/05/2011, 17h33
  3. [XL-2002] Alimentation d'une variable tableau par userform
    Par Troudz dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/02/2011, 15h45
  4. [Tableaux] récuperer une variable tableau passé par URL
    Par molesqualeux dans le forum Langage
    Réponses: 2
    Dernier message: 23/12/2005, 01h12
  5. Acces à une variable-tableau de PHP
    Par Erwan21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/02/2005, 13h55

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