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 :

Conversion date+heure au format date et heure [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut Conversion date+heure au format date et heure
    Bonjour,


    ça faisait longtemps que j'étais pas venu dans le coin

    J'ai des indices de criticité à calculer pour un client, en suivant l'heure à laquelle il a appelé, et le moment où ça a été réglé.
    Pour cela, j'ai créé un fichier Excel, où j'ai la première heure, et je voudrais calculer l'heure limite pour régler le problème.

    Mon souci se situe si jamais c'est une criticité jugée élevée, je n'ai qu'1h30 pour régler le problème du client.

    Sauf que ces 1h30 prennent en compte les heures d'ouverture du service.

    En gros, je finis à 18h, et je recommence à 8h le lendemain.
    Si jamais le client appelle le 27/02/2013 à 17h15 par exemple, je dois résoudre son problème au plus tard le 28/02/2013 à 09h30.

    J'ai l'impression qu'avec des formules Excel, ça va être compliqué à faire. Du coup, je me suis lancé à faire une fonction personnalisée, avec VBA, dont en voici un morceau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Datefinale As Date
    heuredate = TimeSerial(Hour(DateAdd("h", 1, Cells(2, 8).Value)), Minute(DateAdd("n", 30, Cells(2, 8).Value)), Second(Cells(2, 8).Value))
    If Hour(heuredate) >= 18 Then
        ARajouter = DateDiff("n", TimeSerial(Hour(Cells(2, 8).Value), Minute(Cells(2, 8).Value), Second(Cells(2, 8).Value)), heuredate)
    End If
    heurefinale = TimeSerial(8, 0, 0) + TimeSerial(Int(ARajouter / 60), ARajouter Mod 60, 0)
    Datefinale = DateAdd("d", 1, Cells(2, 8).Value)
    testdate = DateSerial(Year(Datefinale), Month(Datefinale), Day(Datefinale))
    Datefinale = Format(testdate & " " & heurefinale, "jj/mm/aaaa hh:mm")
    Ave tout ça, j'arrive bien à extraire l'heure (ma variable "heurefinale" est bien à 9h30), la date (ma date "Datefinale" est bien au 28/02/2013), mais je n'arrive pas à concaténer les 2 avec la fonction Format.
    => ça me fait une erreur incompatibilité de type.

    Auriez-vous une idée de comment je pourrais faire ?

    En vous remerciant par avance pour vos réponses.

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 76
    Points : 60
    Points
    60
    Par défaut
    Pourquoi tu n'essayes pas de les dissocier?

    Enfin je vois ceci avec mes yeux de debutant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Datefinale as string
     
    Date_testdate = Format(testdate, "dd/mm/yyyy")
    Date_heurefinale = Format(heurefinale, "hh:mm")
     
    Datefinale = CStr(Date_testdate & " " & heurefinale)

  3. #3
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Ton calcul est curieux .
    Tu dis que tu as 1h30 pour régler le problème. Si le top départ est le 27/02/2013 à 17h15 et le temps accordé 1h30, on s'attend à un top de fin le 28/02/2013 à 8h45 (45mn le 27/02/2013 + 45mn le 28/02/2013 = 1h30).

    Cordialement.

  4. #4
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Oui, oui c'est bien ça mon problème.

    Mais finalement, j'ai trouvé une solution beaucoup plus simple plutôt que de m’embêter avec un calcul avec les heures et les dates grâce aux différentes docs trouvées ici et là.

    Finalement, je suis passé par le nombre, et voici la fonction que je vais utiliser (attention les yeux ) :

    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
    82
    83
    84
    Function AjoutDate(DateDepart As Date, Valeurajoutee As Long) As Date
    'fonction pour calculer la date de prise en compte maximale
    If (Valeurajoutee = 1) Then
    'Elevée => 1h30
        'on rajoute 1h30
        dateapresajout = DateDepart + ((3 / 2) / 24)
        DateFinale = dateapresajout
        'si on dépasse 18h => il faut qu'on aille au lendemain
        If Hour(dateapresajout) >= 18 Then
            DateFinale = dateapresajout + (14 / 24)
        End If
        'si l'heure est entre midi et 13h30 => il faut repousser de 1h30
        If (Hour(dateapresajout) = 12) Or (Hour(dateapresajout) = 13) Then
            DateFinale = dateapresajout + ((3 / 2) / 24)
        End If
        'si on est samedi ou dimanche il faut avancer d'un jour
        If Weekday(DateFinale) = vbSaturday Then
            DateFinale = DateAdd("d", 1, DateFinale)
        End If
        If Weekday(DateFinale) = vbSunday Then
            DateFinale = DateAdd("d", 1, DateFinale)
        End If
        ' si jour férié = avancer d'un jour aussi
        For j = 1 To Feuil4.Range("A1").End(xlDown).Row
            If DateValue(DateFinale) = Feuil4.Cells(j, 1).Value Then
                DateFinale = DateAdd("d", 1, DateFinale)
            End If
        Next j
        'cas exceptionnel ou jour férié est un vendredi => il faut revérifier si on est samedi ou dimanche après
        If Weekday(DateFinale) = vbSaturday Then
            DateFinale = DateAdd("d", 1, DateFinale)
        End If
        If Weekday(DateFinale) = vbSunday Then
            DateFinale = DateAdd("d", 1, DateFinale)
        End If
        AjoutDate = DateFinale
    ElseIf (Valeurajoutee = 2) Then
    'Moyenne => 8h
        dateapresajout = DateDepart + (8 / 24)
        DateFinale = dateapresajout
        dateapresajout = DateFinale
        If ((Hour(DateDepart) >= 8) And (Hour(DateDepart) < 12)) Then
            DateFinale = dateapresajout + ((3 / 2) / 24)
            dateapresajout = DateFinale
        End If
        DateFinale = dateapresajout
        If ((Hour(dateapresajout) >= 18) Or (Hour(dateapresajout) < 8)) Then
            DateFinale = dateapresajout + (14 / 24)
            dateapresajout = DateFinale
        End If
        If Weekday(DateFinale) = vbSaturday Then
            DateFinale = DateAdd("d", 1, DateFinale)
        End If
        If Weekday(DateFinale) = vbSunday Then
            DateFinale = DateAdd("d", 1, DateFinale)
        End If
        For j = 1 To Feuil4.Range("A1").End(xlDown).Row
            If DateValue(DateFinale) = Feuil4.Cells(j, 1).Value Then
                DateFinale = DateAdd("d", 1, DateFinale)
            End If
        Next j
        AjoutDate = DateFinale
    ElseIf (Valeurajoutee = 3) Then
    'Normale => 1,5 jour soit 1 jours + 4h
        DateDepart = AddWorkingDays(DateDepart, 1)
        dateapresajout = DateDepart + (4 / 24)
        If ((Hour(DateDepart) >= 8) And (Hour(DateDepart) < 12)) Then
            DateFinale = dateapresajout + ((3 / 2) / 24)
            dateapresajout = DateFinale
        End If
        DateFinale = dateapresajout
        If Hour(dateapresajout) >= 18 Then
            DateFinale = dateapresajout + (14 / 24)
        End If
        For j = 1 To Feuil4.Range("A1").End(xlDown).Row
            If DateValue(DateFinale) = Feuil4.Cells(j, 1).Value Then
                DateFinale = DateAdd("d", 1, DateFinale)
            End If
        Next j
    ElseIf (Valeurajoutee = 4) Then
    'Faible => 3 jours
        DateDepart = AddWorkingDays(DateDepart, 3)
    End If
    End Function

    Merci en tout cas pour la 1ere réponse, qui m'a permis de m'aiguiller sur certaines autres choses que je voulais faire

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

Discussions similaires

  1. [XL-2010] Conversion de cellules en format date via VBA?
    Par Steppingstone dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/02/2015, 16h15
  2. conversion string en date gestion du format date US/FR
    Par blacklolou dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/06/2012, 11h19
  3. [AC-2010] Format Date en jj/mm/aa avec heure forcée
    Par alex en droit dans le forum IHM
    Réponses: 2
    Dernier message: 26/12/2011, 10h29
  4. suppression de l'heure en format date
    Par rachaexeptionnelle dans le forum VBA Access
    Réponses: 3
    Dernier message: 21/12/2011, 18h23
  5. Format de l'heure d'une date [Oracle 10g]
    Par Dark Ryus dans le forum Oracle
    Réponses: 3
    Dernier message: 23/04/2007, 11h47

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