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 :

[VBA] Changement de format de temps


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2015
    Messages : 20
    Par défaut [VBA] Changement de format de temps
    Bonsoir à tous,

    Je suis en train de faire une macro sous VBA, et à un certain moment je dois convertir un colonne entière comprenant des temps. Les colonnes de base se présentent sous la forme successive:
    0
    0.005
    0.01
    0.015
    0.02
    0.025
    0.03
    Etc...

    Ces cellules nous indiquent des valeurs de temps précises au millième de seconde.

    J'aimerais convertir ces cellules sous la forme:
    00:00:00.000
    00:00:00.005
    00:00:00.010
    00:00:00.015
    Etc

    C'est a dire sous la forme "hh:mm:ss.ms".
    J'ai essayé le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For o = 1 To DernLigne
    Cells(o, 1).NumberFormatLocal = "hh:mm:ss.ms"
    Next
    Cependant, les cellules renvoyées sont absurdes. Par exemple, si on prend la cellule de base "0.005", la valeur renvoyée par ma macro pour cette cellule est "00:07:12.712" au lieu de "00:00:00.005".. J'ai besoin qu'on m'éclaire car je ne vois pas quoi faire.

    Je vous remercie par avance et vous souhaite une bonne fin de soirée!

  2. #2
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Salut Michel,

    Si tes temps sont toujours de ce format:
    0
    0.005
    0.01
    0.015
    0.02
    0.025
    0.03
    Alors je ferai de cette façon avec un split

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "00:00:00." & split("0.005",".")(1)
    Sinon avec un replace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    replace("00:00:00.000","000",split("0.005",".")(1)
    ici il y aura un problème si les millisec sont égale à 0
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    replace("00:00:00.000","0.000","0.005")
    ici plus de souci mais pour les millisec = 0 cela te retournera de cette façon:
    00:00:00
    Enfin pour palier à tous ces désagréments tu peux faire comme çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iif(tacellule > 0, replace("00:00:00.000","0.000",tacellule), tacellule="00:00:00.000")
    Seb

  3. #3
    Membre chevronné
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Par défaut
    Bonjour
    Sachant que dans un journée il y a 24H, que dans une heure il y a 60mn, dans une minute il y a 60s....
    Tu peux essayer un truc du genre [B1] =A1/60/60/24 puis ajouter la mise en forme [h]:mm:ss.000;@

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2015
    Messages : 20
    Par défaut
    Bonjour a tous, et merci.

    Je suis au final partit sur l'idée de sogedic, j arrive a tout calculer correctement, mais impossible d afficher dans ce format.
    Tout s'affiche dans le format "00:00:00", je n 'arrive pas à forcer l'affichage sous la forme "00.00.00.000", directement dans ma macro..

    Quelqu'un a une idée?




  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub test()
    ActiveCell.NumberFormat = "hh:mm:ss.000"
    ActiveCell.Value2 = "00:00:00.015"
    ActiveCell.Offset(1).NumberFormat = "hh:mm:ss.000"
    ActiveCell.Offset(1).Value2 = ActiveCell.Value2 + CDate("00:20:00")
    End Sub
    Dernière modification par Invité ; 20/01/2016 à 15h37.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2015
    Messages : 20
    Par défaut
    Salut à toi,

    Merci beaucoup pour ton aide! J'ai testé ton code, et pour ma par j'aimerai faire une boucle qui me remplisse les colonnes d'une cellule jusqu'a un certain indice N. L'incrément serait de 0.005ms. Si on repart de ton code, j'ai pensé à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub test()
     
    For i=1 To N
     
    Cell(i,1).NumberFormat = "hh:mm:ss.000"
    Cell(i,1).Value2 = "00:00:00.000"
    Cell(i,1).Offset(1).NumberFormat = "hh:mm:ss.000"
    Cell(i,1).Offset(1).Value2 = ActiveCell.Value2 + CDate("00:00:00.005")
    'le "+CDate("00:00:00.005") permettrait d'incrémenter
     
    Next
     
    End Sub
    Cependant, le code ne semble pas être bon car j'ai une erreur qui apparrait quand j'exécute ma macro...

    Quelqu'un voit d'ou vient le problème?

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

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