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 :

Macro - filtre et Calcul de date/heure


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Macro - filtre et Calcul de date/heure
    Bonjour,

    J'ai un tableau excel 2007, contient une colonne " DATE/HEURE ", et cet colonne contient des valeurs comme " 01/07/2011 07:13 ", " 01/07/2011 07:19 ", " 01/07/2011 07:57 ", " 04/07/2011 15:50 "...etc.

    je souhaite creer un macro qui fais un filtre dans mon tableau pour trier et grouper les dates par jours et calcule la difference entre le premier date et le dernier, j'explique encore :

    le macro va creer une nouvelle valeur dans un nouvel cellule, cet valeur est egale à le MAX( de date) - le Min( de date)

    exemple : [01/07/2011 07:57] - [01/07/2011 07:13] = 0:44 min

    Merci pour vos aide et avances.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 141
    Points : 414
    Points
    414
    Par défaut Tri et différence de dates en Excel VBA
    Bonjour spy_shoooter,

    1. Spécification : où trouver la source des données et où afficher le résultat cible ?

    Citation Envoyé par spy_shoooter Voir le message
    J'ai un tableau excel 2007, qui contient une colonne " DATE/HEURE "
    Où ? Toujours indiquez par des constantes Excel VBA trouver la source des données.
    Ce n'est pas la valeur numérique du n° de rangée et du n° de colonne qui importe, c'est comment vous allez les nommer et quel est le commentaire associé.

    Citation Envoyé par spy_shoooter Voir le message
    créer une nouvelle valeur dans une nouvelle cellule, cette valeur est égale à le MAX( de date) - le Min( de date)
    Idem. Où ? Il faut préciser par des constantes Excel VBA commentées afficher le résultat cible de façon à faciliter la compréhension du problème et plus tard la relecture du code.

    2. Maquette Excel VBA du tri et de la différence de dates

    Ouvrir Excel. Une feuille vide apparaît.
    Ouvrir le Visual Basic Editeur (VBE) en cliquant sur l'Excel menu "Outils" > "Macro" > "Visual Basic Editeur" (Alt+F11)

    Cliquez sur le VBE menu "Insérer" > "Module".
    Dans la fenêtre d'Edition de Module1, copier-coller :
    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
    Option Explicit
    Public Const rowDuration = 2 ' Target: maximal difference of dates
    Public Const colDuration = 1
     
    Public Const nbrDate = 4
    Public Const rowDateStart = rowDuration + 1 ' Source: first date to be sorted
    Public Const rowDateEnd = rowDateStart + nbrDate - 1 ' Last date to be sorted
     
    Public Const colDate = 1
     
    Sub SortDate()
    Dim rngDate As Range, dateMax As Date, dateMin As Date, strNbrDay As String, nbrDay As Integer
     
        Set rngDate = Range(Cells(rowDateStart, colDate), Cells(rowDateEnd, colDate))
        rngDate.Sort Key1:=Cells(rowDateStart, colDate), Order1:=xlDescending, Header:=xlNo, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        dateMax = Cells(rowDateStart, colDate)
        dateMin = Cells(rowDateEnd, colDate)
     
        nbrDay = DateDiff("d", dateMin, dateMax)
        strNbrDay = IIf(nbrDay > 0, CStr(nbrDay) + " jours ", "")
        Cells(rowDuration, colDuration) = strNbrDay + Format(dateMax - dateMin, "HH:MM:SS")
    End Sub
    3. Usage de SortDate()

    La feuille Excel étant vide, mettre les quatre dates indiquées de A3 à A6.
    Enlever l'espace blanc avant la date et après l'heure.

    Dans la fenêtre d'Exécution immédiate (Ctlr+G) du VBE, copier-coller et valider par ENTER :
    Le résultat attendu dans la feuille de calcul est en première colonne.
    Sous l'en-tête "DATE/HEURE" en A1, on trouve la différence entre les dates extrêmes en A2
    puis les dates triées dans l'ordre du plus récent au plus ancien toujours de A3 à A6 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DATE/HEURE
    3 jours 08:37:00
    04/07/2011 15:50
    01/07/2011 07:57
    01/07/2011 07:19
    01/07/2011 07:13
    4. Personnalisation des constantes pour s'adapter à votre contexte

    Vous pouvez personnaliser le nombre de dates nbrDate ainsi que l'endroit trouver les dates et afficher le résultat en changeant les constantes.

    Si vous voulez inverser l'ordre de tri, remplacez Order1:=xlDescending par Order1:=xlAscending puis inversez les bornes de rangées pour récupérer dateMax et dateMin.

    5. L'enregistreur de macros comme modèle

    Pour trouver par vous même l'instruction principal de tri, enregistrez avec l'enregistreur de macro les actions suivantes :

    • Sélectionner les cellules A3 à A6
    • Excel menu "Données" > "Tri". Cochez l'option [x] Pas d'en-tête de rangée.


    Comparez le code généré par l'enregistreur de macro avec la maquette SortDate().
    ___________

    Si la discussion est résolue, vous pouvez cliquer sur le bouton

    En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.

Discussions similaires

  1. [XL-2007] Filtre élaboré calculé et dates
    Par calimhiro dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/06/2013, 18h02
  2. [XL-2007] Filtre de données selon date/heure
    Par chouchou60 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/06/2012, 11h32
  3. calculer difference date heure en jours ouvres
    Par wahabts7 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/04/2010, 23h48
  4. Calcul de date/heure et ActiveRecord
    Par dgouyette dans le forum Ruby
    Réponses: 2
    Dernier message: 19/11/2007, 21h36
  5. Calcul entre deux dates heures
    Par Isa31 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 31/03/2005, 13h17

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