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 :

soustraire des dates


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut soustraire des dates
    bonjour,

    1/ avec une procedure " j extrais " la date de chaque ligne d une colonne en effectuant une boucle
    2/ en fonction d un critere je dois faire le calcul chaine1 - chaine2
    3/ le resultat desiré sera 2h
    la j ai le resultat en format "date depuis 1900..."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub test()
    Dim chaine1 'les strings recuperés sont a qq chose pres sous cette forme
    Dim chaine2
    chaine1 = "21 00 00.00 * 5LAA008EK            OK "
    chaine2 = "23 00 00.48 * 5LAA008EK             NOK"
    chaine1 = Trim(Left(chaine1, 12))
    chaine1 = TimeSerial(Left(chaine1, 2), Mid(chaine1, 4, 2), Mid(chaine1, 7, 2))
    chaine2 = Trim(Left(chaine2, 12))
    chaine2 = TimeSerial(Left(chaine2, 2), Mid(chaine2, 4, 2), Mid(chaine2, 7, 2))
    MsgBox chaine1
    MsgBox chaine2
    MsgBox chaine2 - chaine1
    End Sub
    j ai peut etre mal recherché sur le forum
    si vous avez des idées

  2. #2
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonsoir,
    je ne sais pas ce que tu veux faire avec ta soustraction après mais pour avoir le résultat ajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'différence en secondes
    sec = DateDiff("s", chaine1, chaine2)
    'transformation en heures, minutes, secondes
    result = sec \ 3600 & ":" & Format((sec - (sec \ 3600) * 3600) \ 60, "00") & ":" & Format(sec - ((sec \ 3600) * 3600) - ((sec - (sec \ 3600) * 3600) \ 60) * 60, "00")
    MsgBox result
    @+
    fred65200

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour fred

    pour repondre a ta question ,je dois parcourir une feuille et faire le bilan total des apparitions et disparations d alarmes sur une année d' un systeme automatisé.
    donc je fais la difference entre la disparition de l alarme et l apparition de l alarme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    hr = DateDiff("h", chaine1, chaine2 + 1) '1 si un jour de difference entre les dates

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Et si tu mets ta cellule au format nombre au lieu de date ?
    Bonne nuit

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    comme le fichier est important je travail avec un tableau en recuperant les
    données.

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    Option Base 1
     
    Dim ws As Worksheet
    Dim chaine
    Dim tabl()
    '--------------------------------------------------------------------------
    ' RECUPERE LES DONNEES DE LA 1ERE COLONNE POUR LES SCINDER EN 4 COLONNES
    ' DANS LE TABLEAU TABL()
    '--------------------------------------------------------------------------
    Sub creation_tableau()
    Set ws = Worksheets(1)
    Dim longchaine As Integer
    Dim debchaine
    Dim finchaine
    Dim dernligne
    Dim premligne
    Dim tabrange
    Dim i  As Integer
     
    premligne = ws.Cells(1, 1).End(xlDown).Row 'debut de selection
    dernligne = ws.Cells(premligne, 1).End(xlDown).Row 'fin de la selection
     
    tabrange = ws.Range("a" & premligne & ":" & "a" & dernligne) 'affectation tableau
     
    ReDim tabl(UBound(tabrange, 1), 4)
    For i = LBound(tabrange, 1) To UBound(tabrange, 1)
        chaine = tabrange(i, 1)
            If InStr(chaine, "JOURNEE DU") <> 0 Then
                    tabl(i, 1) = chaine
                    tabl(i, 2) = chaine
                    tabl(i, 3) = chaine
                    tabl(i, 4) = chaine
                Else
                    'redisposer en 4 colonnes
                    'heure / EC / intitulé / état
                    longchaine = Len(Trim(chaine)) 'suppression espace + nb de carractères
                    chaine = Trim(Left(chaine, longchaine - 7)) 'suppression des chiffres a la fin de l expression
                    tabl(i, 1) = Trim(Left(chaine, 12))
                    tabl(i, 1) = TimeSerial(Left(tabl(i, 1), 2), Mid(tabl(i, 1), 4, 2), Mid(tabl(i, 1), 7, 2)) 'conversion en hh:mn:ss
                    debchaine = InStr(chaine, "*")
                    tabl(i, 2) = Trim(Mid(chaine, debchaine + 1, 14))
                    finchaine = InStr(chaine, "ENCE") - 5 '-5 pour le debut abscence ou presence
                    debchaine = InStr(chaine, "EC") + 2
                    tabl(i, 3) = Trim(Mid(chaine, debchaine, finchaine - debchaine))
                    tabl(i, 4) = Trim(Mid(chaine, finchaine, 10))
        End If
    Next i
     
    Call calcul_tps
    End Sub
    Sub calcul_tps()
    Dim top_presence
    Dim top_abscence
    Dim tps_alarme
    Static tps_globale
    Static jourdeplus As Variant
    Dim i As Integer
    Dim j As Integer
    tps_globale = 0
    jourdeplus = 0
    For i = LBound(tabl, 1) To UBound(tabl, 1)
        If tabl(i, 2) Like "5LCA009EC" And tabl(i, 4) Like "PRESENCE" Then
            top_presence = tabl(i, 1)
                For j = i + 1 To UBound(tabl, 1)
                        If InStr(tabl(j, 1), "JOURNEE DU") <> 0 Then
                            jourdeplus = jourdeplus + 1
                        End If
                            If tabl(j, 2) Like "5LCA009EC" And tabl(j, 4) Like "ABSENCE" Then
                                top_abscence = tabl(j, 1)
                                i = j
                                tps_alarme = DateDiff("s", top_presence, top_abscence + jourdeplus)
                                Exit For
                            End If
                Next j
            tps_globale = tps_globale + tps_alarme
        End If
    Next i
    MsgBox jourdeplus
    MsgBox tps_globale
    End Sub

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je ne comprends plus rien, quelle est ta question ?
    Faut-il toujours répondre à
    3/ le resultat desiré sera 2h
    la j ai le resultat en format "date depuis 1900..."
    Si c'est ça, écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MsgBox chaine1
    MsgBox chaine2
    MsgBox Format(chaine2 - chaine1, "hh:nn:ss")
    mais tu devras vérifier, en numérique que le nombre d'heures ne dépasse pas 24 si l'écart dépasse une journée.
    A+

    Tu as une autre méthode pour récupérer tes chaînes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim chaine1 As Date
    Dim chaine2 As Date
    chaine1 = CDate(Replace(Split("21 00 00.00 * 5LAA008EK            OK ", ".")(0), " ", ":"))
    chaine2 = CDate(Replace(Split("23 00 00.48 * 5LAA008EK             NOK", ".")(0), " ", ":"))
    MsgBox Format(chaine2 - chaine1, "hh:nn:ss")
    'ou
    MsgBox DateDiff("h", chaine1, chaine2)
    A+

    PS - Une explication :
    Split transforme ta chaîne en tableau,
    Tableau dont j'extrait la première donnée, (0)
    Donnée dont je remplace les espaces par deux points
    Pour le convertir au type date.
    Après on soustrait des dates.

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

Discussions similaires

  1. Convertir et soustraire des dates
    Par jean003 dans le forum Débutez
    Réponses: 3
    Dernier message: 31/01/2011, 15h45
  2. Soustraire des dates.
    Par skorpio dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/06/2007, 19h54
  3. Soustraire des dates
    Par skorpio dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 14/06/2007, 15h09
  4. Soustraire une date avec des jours et jours ouvrés
    Par celiaaa dans le forum VBA Access
    Réponses: 5
    Dernier message: 31/05/2007, 22h37
  5. soustraire des dates et renvoyer le resultat
    Par tyrann dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 18/11/2005, 14h52

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