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'un tableau à 1 dimension et 5 colonnes [XL-2000]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 618
    Par défaut Alimentation d'un tableau à 1 dimension et 5 colonnes
    Bonjour,

    Je souhaite alimenter une listbox ayant 5 colonnes depuis 5 colonnes contenues dans 2 feuilles différentes.

    Ma listbox doit être triée suivant la première colonne. Il me faut donc passer par un tableau interne et en faire le tri.

    Je ne sais pas comment définir un tableau à 1 dimension avec 5 colonnes et le renseigner ?

    Comment le trier ?

    Julien.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,
    pour le tri il y a ce qu'il faut dans Excel et pour une variable tableau,
    Utiliser les variables tableaux en VBA Excel

    Et en prime pour le même prix : Conceptualisation des variables tableau en VBA !


    Mais il est plus simple, pour un débutant, de recopier toutes les données dans une feuille et
    de laisser donc Excel effectuer le tri puis d'alimenter directement la ListBox avec la plage de ces données …


    Et en bonus (même si je procéderais autrement, cela dépanne un débutant) :

    Comment remplir une ComboBox sans doublon et trié par ordre croissant ?

    Il y a donc tout ce qu'il faut sur le site, suffit de regarder dans les tutoriels et la FAQ ‼

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 618
    Par défaut
    Effectivement, je n'ai pas pensé à utiliser une nouvelle feuille excel.

    Merci beaucoup.

  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
    Bonjour,

    Exemple en PJ

    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
     
    Private Sub UserForm_Initialize()
      Set f = Sheets("BD")
      a = f.Range("a2:c" & f.[A65000].End(xlUp).Row)
      Call Tri(a, 1, LBound(a), UBound(a))
      Me.ListBox1.list = a
    End Sub
     
    Sub Tri(a, ColTri, gauc, droi) ' 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 k = LBound(a, 2) To UBound(a, 2)
             temp = a(g, k): a(g, k) = a(d, k): a(d, k) = temp
           Next k
           g = g + 1: d = d - 1
        End If
      Loop While g <= d
      If g < droi Then Call Tri(a, ColTri, g, droi)
      If gauc < d Then Call Tri(a, ColTri, gauc, d)
    End Sub
     
    Private Sub CommandTriNom_Click()
      Dim a()
      a = Me.ListBox1.list
      Call Tri(a(), 1, LBound(a, 1), UBound(a, 1))
      Me.ListBox1.list = a
    End Sub
    Jacques Boisgontier
    Fichiers attachés Fichiers attachés

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    Bonjour juju5 et boisgontierjacques

    malgré que la discutions soit résolu je voudrais vous proposer une solution beaucoup plus simple

    pour faire ce genre de travaille sur un tri de tableau j'utilise une simple doubleboucle for next sur le meme tableau

    la boucle commencant par le 1er item la 2 eme boucle commence par l'item suivant et en comparant les deux
    si plus petit alors le suivant devient le premier et vis et versa
    quelque ligne suffisent

    le code dans le userform
    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
    Option Base 1
    Private Sub CommandButton1_Click()
        Dim tablo
        With Sheets("BD"): tablo = .Range("a2:c" & .[A65000].End(xlUp).Row): End With
        For i = 1 To UBound(tablo) - 1
            For E = i + 1 To UBound(tablo)
                If tablo(E, 2) < tablo(i, 2) Then
                    ' om memorise les valeur de la ligne sur 3 colonnes
                    temp1 = tablo(i, 1): temp2 = tablo(i, 2): temp3 = tablo(i, 3)
                    ' on inverse les lignes
                    tablo(i, 1) = tablo(E, 1): tablo(i, 2) = tablo(E, 2): tablo(i, 3) = tablo(E, 3)
                    'on met les valeurs memorisée dans la ligne de l'index e
                    tablo(E, 1) = temp1: tablo(E, 2) = temp2: tablo(E, 3) = temp3: End If
            Next
        Next
         UserForm1.ListBox1.List = tablo
    End Sub
    Private Sub UserForm_Activate()
          ' on rempli la liste avec la plage tel quel
            tablo = Sheets("BD").Range("a2:c" & Sheets("BD").[A65000].End(xlUp).Row)
        Me.ListBox1.List() = tablo
    End Sub
    si on enlève les ligne de commentaire vous pourrez constater que le code est très court et simple

    j'espère que le roi des tableaux et dictionnaire ne m'en voudra pas trops
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    En gros Patrick c'est un tri à bulles et c'est le plus lent !

    Par code, le plus rapide étant bien le QuickSort proposé par Jacques …
    Selon l'adaptation il est vrai … J'ai aussi une version non récursive !

    Quand il y a moins d'un millier d'éléments à trier, le CombSort plus simple s'avère aussi rapide mais s'effondre au delà.

    Mais le plus rapide étant quand même le tri interne à Excel …

    Sinon il m'arrive d'utiliser un dictionnaire triant automatiquement ses clefs, et oui il y a d'autres objets que Dictionary

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

Discussions similaires

  1. [XL-2003] VBA alimenter et restituer un tableau à 2 dimensions
    Par totor2027 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/04/2010, 16h56
  2. [tableau à 2 dimensions] association String et float
    Par LoLoSS dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/07/2004, 10h53
  3. Tableau à n dimensions
    Par youb dans le forum MFC
    Réponses: 10
    Dernier message: 13/05/2004, 14h13
  4. Passage d'un tableau à deux dimensions
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 20/10/2003, 14h50
  5. Réponses: 23
    Dernier message: 21/08/2003, 07h16

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