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 :

Trie sur listview


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 59
    Points : 24
    Points
    24
    Par défaut Trie sur listview
    bonjour tout le monde,

    je cherche depuis des jours un fonction qui permet le trie des colonnes d'une listeview sachant que la colonne peut contenir soit des dates , des lettres et des nombres avec 3 chiffres après la virgule
    le prob du trie classique sur les date ne trie pas sur les mois et les années mais uniquement sur les jours
    le trie sur les chiffre ne marche pas
    il n 'y a que le trie sur les chaînes alphabétique qui fonctionne correctement

    est ce qu'il y a quelqu’un qui peut m'aider cad à un code vba de trie sur les 3 cas
    merci d'avance

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour

    Pour le tri,
    Mets les dates au format yyyy/mm/dd
    et les nombres au format 0000000000000000
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  3. #3
    Invité
    Invité(e)
    Par défaut
    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
     
     
    Sub test()
    Dim Dico As Object
    Set Dico = CreateObject("System.Collections.SortedList")
    Add Dico, "1/1/17 12:55"
    Add Dico, "1/1/17"
    Add Dico, "test12rd152"
    Add Dico, "AAAAA"
    ReDim r(Dico.Count - 1)
    Dim i As Integer
    For i = 0 To Dico.Count - 1
    Debug.Print Dico.GetKey(i), Dico.GetByIndex(i)
        r(i) = Dico.GetByIndex(i)
    Next
    End Sub
    Sub Add(ByRef Dico As Object, value)
    If CStr(value) = "" Then Exit Sub
    If IsDate(value) And InStr(value, "/") And InStr(value, ":") Then Dico(CStr(Format(value, "yyyy-mm-dd hh:mm:ss"))) = value: Exit Sub
    If IsDate(value) And InStr(value, "/") Then Dico(CStr(Format(value, "yyyy-mm-dd"))) = value: Exit Sub
    Dico(CStr(ForamteTxt(value))) = value
    End Sub
     
     
    Public Function ForamteTxt(v)
    Dim num As String, txt As String, i As Integer
    For i = 1 To Len(v)
        If IsNumeric(Mid(v, i, 1)) Then
            num = num & Mid(v, i, 1)
        Else
        If num <> "" Then ForamteTxt = ForamteTxt & Format(num, String(13, "0")): num = ""
        ForamteTxt = ForamteTxt & Mid(v, i, 1)
        End If
    Next
    If num <> "" Then ForamteTxt = ForamteTxt & Format(num, String(13, "0"))
    End Function

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    le trie des colonnes d'une listeview sachant que la colonne peut contenir soit des dates , des lettres et des nombres avec 3 chiffres après la virgule
    Un tel tri n'a aucun sens raisonnable, pas plus, d'ailleurs que n'en auraient des valeurs aussi disparates d'un même champ d'une base de données.

    Dis-moi (je suis très curieux) dans quel ordre trierais-tu des carottes, des prix, des poissons et des températures ?
    Bref ...

    Je me demande si une référence de produit 1121345578 est plus grande ou plus petite que la date 20/01/20127. Tu veux bien m'aider à le déterminer ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 441
    Points
    1 441
    Par défaut
    bonjour,
    c'est peut être un tri en cascade
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour mjpmjp
    Moi, j'ai l'habitude de me fier à ce qui est écrit.
    Reste que je pense (et espère presque) que tu as raison de penser que le demandeur n'a pas su s'exprimer

    sachant que la colonne peut contenir soit des dates , des lettres et des nombres avec 3 chiffres après la virgule
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 441
    Points
    1 441
    Par défaut
    bonjour unparia,
    c'est impressionnant tellement que c'est affolant , la façon de poser la question et de ce fait le problème lui même qu'ont un grand nombre de participants ...

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  8. #8
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 59
    Points : 24
    Points
    24
    Par défaut
    Bonjour tout le monde,
    merci pour toutes les réponses

    quand j'ai dit "sachant que la colonne peut contenir soit des dates , des lettres et des nombres avec 3 chiffres après la virgule"

    je veux dire par la que la colonne peut contenir soit des dates, soit des chaines de caractères alphabétiques soit des nombres avec 3 chiffres après la virgule mais en aucun cas la colonne ne contient un mélange
    merci d'avance

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Re
    L'astuce est simple :
    - ajout d'une colonne invisible (de largeur si infime que non visible)
    - si nombre : mettre dans cette colonne le nombre formaté avec des "0" devant
    - si date : mettre dans cette colonne la fate formatée en "ddddmmyy"
    - trier sur CETTE colonne
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Exemple (ici une colonne avec des dates)
    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
    Private Sub UserForm_Activate()
        ListView1.ColumnHeaders.Add , , "Nom", ListView1.Width / 3
        ListView1.ColumnHeaders.Add , , "prénom ID", ListView1.Width / 3, lvwColumnCenter
        ListView1.ColumnHeaders.Add , , "date de naissance", ListView1.Width / 3
        ListView1.ColumnHeaders.Add , , "", 0 '----->>>>>>>>>>>>>>>>>>> colonne invisible ajoutée
        Dim itmX As ListItem
        For i = 1 To 10
           Set itmX = ListView1.ListItems.Add(, , i)
           itmX.SubItems(1) = "a" & i
     
           If i Mod 2 = 0 Then
              d = "17/02/2000"
               itmX.SubItems(2) = d
               itmX.SubItems(3) = Format(CDate(d), "yyyymmdd")
           Else
              d = "20/03/2002"
               itmX.SubItems(2) = d
               itmX.SubItems(3) = Format(CDate(d), "yyyymmdd")
     
           End If
        Next
    End Sub
     
     
    Private Sub CommandButton1_Click()
      ListView1.SortOrder = lvwAscending
      ListView1.SortKey = 3
      ListView1.Sorted = True
    End Sub

    Voilà tout.

    EDIT : et pour ce qui est des nombres : si les formater avec des "0" peut être assez fastidieux, un autre petit truc : transforme-les en date interne, elle-même formatée ensuite en yyyymmdd et le tour est joué (y compris pour les nombres négatifs...)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

Discussions similaires

  1. [VB.net CF] Doubleclick sur listview
    Par WriteLN dans le forum Windows Forms
    Réponses: 21
    Dernier message: 27/09/2005, 14h20
  2. [langage]trie sur numérique et chaîne de caractère
    Par helene22500 dans le forum Langage
    Réponses: 9
    Dernier message: 31/05/2005, 14h19
  3. Trie sur une requette SELECT
    Par Yali dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/08/2004, 09h56
  4. doublon et trie sur autre colonne
    Par Force59 dans le forum Requêtes
    Réponses: 10
    Dernier message: 01/04/2004, 09h02
  5. est il possible de faire un trie sur un paramètre donné
    Par chtiboss dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/03/2004, 11h51

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