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 :

Tri listbox par date VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut Tri listbox par date VBA
    Bonjour le Forum,

    Tout est dans le titre, je souhaiterais connaitre la façon de trier automatiquement une listbox par date, une fois que les items se chargent d'après un choix d'une combobox svp.

    Merci beaucoup

  2. #2
    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
    combien de colonne a ta listbox?? 1 ou plusieurs

    un exemple sur 1 colonne
    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
    Private Sub tri_listbox_by_date()
        Dim tableau, tabl, i, a, e
        tableau = ListBox1.List()
        ReDim tabl(UBound(tableau))
        For i = 0 To UBound(tableau)
            For e = 0 To UBound(tableau)
                elem = tableau(e, 0)
                If tableau(i, 0) > tableau(e, 0) Then tableau(e, 0) = tableau(i, 0): tableau(i, 0) = elem
            Next e
        Next i
        a = 0
        For i = UBound(tableau) To 0 Step -1
            tabl(a) = tableau(i, 0)
            a = a + 1
        Next
        ListBox1.List = tabl
    End Sub
    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

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    il est, je pense, opportun de préciser quel type de tri tu souhaites ?

    - un tri chronologique ? Donc on trie sur les numéros de série des dates
    - un tri d'affichage ? On trie sur les Chaines de caractères "d'affichage" du format de date

    Ca peut sembler bête ce que je dis, mais prenons simplement l'option 2.
    Si tu affiches tes dates en format anglais, le tri d'affichage ne sera pas le même que le tri des dates en affichage "français"

  4. #4
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    Excusez-moi pour le manque de précisions.

    C'est une listbox multicolonnes. Le tri doit s'établir sur la colonne 9 de la listbox. Cette colonne 9 contient des dates JJ/MM/AAAA. Il s'agit donc de faire un tri chronologique.
    Merci.

  5. #5
    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

    Boisgontier
    Fichiers attachés Fichiers attachés

  6. #6
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    Désolé, mais cela ne m'aide pas beaucoup, où je ne sais pas adapter (je ne suis pas une experte en VBA)....

    De plus, si la listbox est vide, il ne faut pas que la macro plante et bloque l'application, mais que le programme continue de fonctionner

    j'ai adapté mon tri comme cele :

    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
    Function listbox1()
     
    ....
     
    Dim a()
     
       a = Me.ListBox1.List
       NbCol = UBound(a, 2) - LBound(a, 2) + 1
       Call tri(a(), LBound(a), UBound(a), NbCol, 1)
       Me.ListBox1.List = a
     
     
    End Function
     
     
    Sub tri(a(), gauc, droi, NbCol, 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 = 0 To NbCol - 1
             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 Call tri(a, g, droi, NbCol, colTri)
     If gauc < d Then Call tri(a, gauc, d, NbCol, colTri)
    End Sub

    Par contre j'ai un message d'erreur (" Erreur d'exécution 9 : L'indice n'appartient pas à la sélection") si je recherche un nom dans ma combobox et que la listbox n'affiche rien (selon la recherche il est parfois normal que la listbox soit vide).

    Mais comment passer outre ce problème ?

    Merci

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/06/2016, 10h34
  2. [LibreOffice][Tableur] Mise en place d'un tri automatique par date de naissance
    Par Fred64680 dans le forum OpenOffice & LibreOffice
    Réponses: 3
    Dernier message: 14/09/2014, 09h55
  3. recherche par date vba excel
    Par fred014 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/03/2007, 13h35
  4. [SQL-VBA]tri par date dans access
    Par Mickey_Mouse dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/02/2007, 09h49
  5. [ XML ][ XSL ] tri par date
    Par zozolh2 dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/08/2004, 10h19

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