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

  1. #1
    Membre à l'essai
    Transformation de durée sup. à 24h00 en date + heures après importation Excel
    Bonjour à tous,

    Encore une fois, je fais appel à vous pour me permettre de briller au bureau.

    Je pensais pouvoir relever le défi facilement par moi-même mais, il semble que je ne vienne pas de la même planète que les développeurs Microsoft.

    La situation est la suivante:

    J'ai un simple fichier Excel avec 3 colonnes: Nom, Prenom et total_heures.
    La colonne total_heures de ce fichier .xlsx est au format HH:MM:SS
    Pour certaines lignes de ce fichier, il est possible d'avoir des totaux supérieurs à 23:59:59 (exemple: Jean, Lemoine, 50:00:00)

    Après importation dans Access avec un format 'Date' appliqué sur la 3ième colonne, la table s'affiche correctement pour toutes les lignes inférieures à 24:00:00 mais dès que le 24 heures est atteint, le logiciel applique une logique particulière qui n'est pas dénuée de sens mais, comme je le dis à ma conjointe:" Si j'avais voulu un T-Shirt Rose, je ne t'aurais pas demandé d'en acheter un rouge et un blanc pour qu'ensuite tu les laves ensemble !!!!!!"

    donc.. pour l'exemple de Jean Lemoine, les 50:00:00 deviennent 1900-01-02 02:00:00. On peut imaginer que cela équivaut à 2 jours (48 heures) + 2 heures.

    Sauf que j'aimerais voir afficher 50:00:00 dans ma table ou minimalement dans une requête pour pouvoir ensuite faire des calculs sur des durées et non des dates.

    et là..... malgré des recherches sur des forums français et anglais, je ne trouve rien de simple.

    Il y a bien des posts ou même des blogs complets avec des formules de vba de 50 lignes mais je ne peux pas croire qu'il n'y ait pas plus simple ?

    Si Access a été en mesure d'appliquer un algorithme pour transformer la donnée à l'import, le même formule doit bien pouvoir être inversée sans passer par de la technologie extraterrestre non?

    Donc si quelqu'un à une piste de solution, ça serait super. PS: Je prends aussi la solution toute faite.

    Merci à tous

  2. #2
    Membre à l'essai
    Méaculpa, je viens de voir que le format est déjà présent dans le fichier Excel.
    La barre de formule pour une cellule affiche 1900-01-01 04:00:00 alors que la cellule affiche 28:00:00.

    Je vais chercher de ce côté

  3. #3
    Rédacteur/Modérateur

    Bonsoir,

    Pour info dans Access pour afficher un total d'heures supérieur à 24 on convertit une date en texte comme expliqué dans la faq :

    https://access.developpez.com/faq/?page=dates#durees

    et en effet, les dates sont stockées sous forme numérique, la partie entière représente la date et la partie décimale l'heure.

    Ensuite pour faire des calculs sur ces formats spéciaux "50:00:00" il faut l'éclater en 3 parties H, M , S, puis convertir en secondes :

    Duree= H*3600 + M*60 + S

    faire la somme de chaque durée :

    TotalDuree=Duree1 + Duree2 + ...+ DureeN

    Enfin, faire l'opération inverse pour avoir le résultat au format "HH:MM:SS", avec quelque chose comme :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    H = TotalDuree\3600
    M = (TotalDuree mod 3600)\60
    S = (TotalDuree mod 3600) mod 60


    Et enfin on concatène donc ces résultats pour obtenir à nouveau "HH:MM:SS".

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Un formulaire de contrôle des disponibilités du matériel sur une période donnée :
    Disponibilité du matériel

    ça permet de voir l'état du "stock" de matériel maintenant et dans le futur

    Portez-vous bien !