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 sur des dates


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 930
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 930
    Par défaut Tri sur des dates
    Bonjour à tous je souhaiterais trier une colonne excel contenant un nombre de jours, ou des heurs depuis un instant T

    Je ne peux pas mettre le fichier car j'ai le message "fichier non valie".

    Je mets donc les valeurs de la colonne dans le corps du message

    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
     
     
    11 mins ago
    3 days 5 hrs ago
    2 hrs 19 mins ago
    2 hrs 19 mins ago
    2 hrs 20 mins ago
    2 hrs 18 mins ago
    8 days 17 hrs ago
    1 day 18 hrs ago
    8 hrs 1 min ago
    321 days 1 hr ago
    321 days 1 hr ago
    9 days 9 hrs ago
    11 days 19 hrs ago
    12 hrs 14 mins ago
    4 days 20 hrs ago
    11 hrs 18 mins ago
    127 days 23 hrs ago
    443 days 5 mins ago
    443 days 5 mins ago
    443 days 4 mins ago
    443 days 3 mins ago
    443 days 3 mins ago
    442 days 23 hrs ago
    442 days 23 hrs ago
    442 days 23 hrs ago
    442 days 23 hrs ago
    42 days 13 hrs ago
    4 days 18 hrs ago
    291 days 9 hrs ago
    8 days 10 hrs ago
    8 days 10 hrs ago
    8 days 10 hrs ago
    191 days 18 hrs ago
    Merci d'avance pour votre aide

  2. #2
    Membre très actif
    Homme Profil pro
    Auto entrepreneur
    Inscrit en
    Décembre 2021
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Auto entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 376
    Par défaut
    Bonjour,

    Soit un tableau structuré "t_Delais" composé de 5 colonnes :

    Nom : Capture.JPG
Affichages : 210
Taille : 57,3 Ko

    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
     
    Option Explicit
     
    Sub TriDelai()
     
    Dim I As Integer, J As Integer
    Dim AireDelai As Range
    Dim TableDelai As Variant
    Dim TempsEnMinutes As Long
     
        Set AireDelai = Range("t_Delais[Temps]")
        Range(AireDelai.Offset(0, 1), AireDelai.Offset(0, 3)).Clear
     
        For I = 1 To AireDelai.Count
            TempsEnMinutes = 0
            TableDelai = Split(AireDelai(I), " ")
            If UBound(TableDelai) > 0 Then
               For J = LBound(TableDelai) To UBound(TableDelai)
                   If InStr(1, TableDelai(J), "days", vbTextCompare) > 0 Then
                      AireDelai(I).Offset(0, 1) = TableDelai(J - 1)
                      TempsEnMinutes = TableDelai(J - 1) * 24 * 60
                   End If
     
                   If InStr(1, TableDelai(J), "hrs", vbTextCompare) > 0 Then
                      AireDelai(I).Offset(0, 2) = TableDelai(J - 1)
                      TempsEnMinutes = TempsEnMinutes + TableDelai(J - 1) * 60
                   End If
     
                   If InStr(1, TableDelai(J), "mins", vbTextCompare) > 0 Then
                      AireDelai(I).Offset(0, 3) = TableDelai(J - 1)
                      TempsEnMinutes = TempsEnMinutes + TableDelai(J - 1)
                   End If
     
                    AireDelai(I).Offset(0, 4) = TempsEnMinutes
     
               Next J
            Else
     
            End If
     
        Next I
     
        With Sheets("Feuil1").ListObjects("t_Delais")
             .Sort.SortFields.Clear
             .Sort.SortFields.Add2 Key:=Range("t_Delais[Total]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            With .Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
     
        Set AireDelai = Nothing
     
    End Sub

  3. #3
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 930
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 930
    Par défaut
    Merci. C'est un code vbscript que je mets dans la feuille Excel c'est bien ça?

  4. #4
    Membre très actif
    Homme Profil pro
    Auto entrepreneur
    Inscrit en
    Décembre 2021
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Auto entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 376
    Par défaut
    Non, dans un module standard.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 930
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 930
    Par défaut
    Merci bien. Je vais essayer ça.

  6. #6
    Membre très actif
    Homme Profil pro
    Auto entrepreneur
    Inscrit en
    Décembre 2021
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Auto entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 376
    Par défaut
    Il n'est peut-être pas utile d'avoir toutes les colonnes intermédiaires, vous pourriez ne garder que le total.

  7. #7
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 206
    Par défaut
    Bonjour

    une solution par formule avec LET et FRACTIONNER.TEXTE (version récente d'Excel) avec A2 la cellule contenant le texte à convertir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    =LET(
    ago;SUBSTITUE(A2;" ago";"");
    s;SUBSTITUE(ago;"s";"");
    day;SUBSTITUE(s;" day";"|1440");
    hr;SUBSTITUE(day;" hr";"|60");
    min;SUBSTITUE(hr;" min";"|1");
    tableau;FRACTIONNER.TEXTE(min;"|";" ");
    SOMME(INDEX(tableau;;1)*INDEX(tableau;;2)))
    on supprime les " ago" et les "s' (pour gérer les "1 hr" et "2 hrs")
    on remplace les " day" par |1440 le nombre de minutes dans une journée
    idem les " hr" par "|60", et les " min" par "|1"

    puis FRACTIONNER.TEXTE va découper les | et les " " restant
    et la SOMME va faire le produit des colonnes (SOMMEPROD historique)

    Stéphane

  8. #8
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 930
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 930
    Par défaut
    Citation Envoyé par E KERGRESSE Voir le message
    Bonjour,

    Soit un tableau structuré "t_Delais" composé de 5 colonnes :

    Nom : Capture.JPG
Affichages : 210
Taille : 57,3 Ko

    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
     
    Option Explicit
     
    Sub TriDelai()
     
    Dim I As Integer, J As Integer
    Dim AireDelai As Range
    Dim TableDelai As Variant
    Dim TempsEnMinutes As Long
     
        Set AireDelai = Range("t_Delais[Temps]")
        Range(AireDelai.Offset(0, 1), AireDelai.Offset(0, 3)).Clear
     
        For I = 1 To AireDelai.Count
            TempsEnMinutes = 0
            TableDelai = Split(AireDelai(I), " ")
            If UBound(TableDelai) > 0 Then
               For J = LBound(TableDelai) To UBound(TableDelai)
                   If InStr(1, TableDelai(J), "days", vbTextCompare) > 0 Then
                      AireDelai(I).Offset(0, 1) = TableDelai(J - 1)
                      TempsEnMinutes = TableDelai(J - 1) * 24 * 60
                   End If
     
                   If InStr(1, TableDelai(J), "hrs", vbTextCompare) > 0 Then
                      AireDelai(I).Offset(0, 2) = TableDelai(J - 1)
                      TempsEnMinutes = TempsEnMinutes + TableDelai(J - 1) * 60
                   End If
     
                   If InStr(1, TableDelai(J), "mins", vbTextCompare) > 0 Then
                      AireDelai(I).Offset(0, 3) = TableDelai(J - 1)
                      TempsEnMinutes = TempsEnMinutes + TableDelai(J - 1)
                   End If
     
                    AireDelai(I).Offset(0, 4) = TempsEnMinutes
     
               Next J
            Else
     
            End If
     
        Next I
     
        With Sheets("Feuil1").ListObjects("t_Delais")
             .Sort.SortFields.Clear
             .Sort.SortFields.Add2 Key:=Range("t_Delais[Total]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            With .Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
     
        Set AireDelai = Nothing
     
    End Sub
    Bonlour,
    j'ai cette erreur (voir les pièces jointes)Nom : 2023-12-30 10_26_15-Window.png
Affichages : 101
Taille : 14,9 KoNom : 2023-12-30 10_25_50-Window.png
Affichages : 104
Taille : 22,0 Ko

  9. #9
    Membre très actif
    Homme Profil pro
    Auto entrepreneur
    Inscrit en
    Décembre 2021
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Auto entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 376
    Par défaut
    Bonjour,

    Comment s'appelle votre tableau structuré ?

  10. #10
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 930
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 930
    Par défaut
    Ma feuille vous voulez dire ?

    Je l'ai appelé t_Delais.

  11. #11
    Membre très actif
    Homme Profil pro
    Auto entrepreneur
    Inscrit en
    Décembre 2021
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Auto entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 376
    Par défaut
    Bonjour,

    Non pas la feuille, le tableau structuré.

    Vous avez essayé avec le fichier que j'ai mis en ligne ?

Discussions similaires

  1. Tri d'une requete sur des dates
    Par arnaud036 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/05/2009, 00h26
  2. Réponses: 3
    Dernier message: 15/06/2006, 13h03
  3. Recherche et tri sur des doublons XSLT
    Par MusSDev dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 01/06/2005, 10h27
  4. analyse "périodes" basées sur des dates.
    Par Yorglaa dans le forum Oracle
    Réponses: 7
    Dernier message: 22/12/2004, 12h39
  5. Réponses: 9
    Dernier message: 17/01/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