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 :

convertir une chaine en date et heure


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien R&D
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Technicien R&D

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Points : 4
    Points
    4
    Par défaut convertir une chaine en date et heure
    Bonjour,

    Je suis assez novice en VBA et du coup j'ai un soucis et n'arrive pas à le résoudre.

    Je m'explique :

    j'ai une variable : date_ech qui contient "050316 0H"

    et j'aurai besoin de l'insérer dans une cellule sous le format 05/03/16 00:00

    j'ai tenté avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cdate Range("a1") = CDate(Left(date_ech, 2) & "/" & Mid(date_ech, 3, 2) & "/" & Right(date_ech, 2))
    Cette méthode ne marche que si j'ai la date seule. Si ma variable contient l'heure, la macro se lance pas.

    Pouvez-vous m'aider ?

    Merci

  2. #2
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Bonjour à toi,

    En effet ton right n'est pas correct !
    Si tu prends Right(date_ech, 2) sur "050316 0H" tu obtiens => 0H ......
    Il te faut un autre Mid(date_ech, 5, 2) =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CDate(Left(date_ech, 2) & "/" & Mid(date_ech, 3, 2) & "/" & Mid(date_ech, 5, 2))
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien R&D
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Technicien R&D

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Ah ok, donc en effet ça marche.

    Maintenant comment je fait pour afficher le 00:00 ? (sachant que dans mon exemple j'ai 0H, mais je pourrait avoir 8H30)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cdate(format(left("050316 0H",6),"00/00/00"))

  5. #5
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Pour l'heure, il faut déjà remplacer le h par :
    Puis si tu as une heure pile 0H 9H 10H il faut rajouter 0 pour avoir X:0

    Puis utiliser de nouveau CDate qui traite aussi les heures
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  6. #6
    Candidat au Club
    Homme Profil pro
    Technicien R&D
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Technicien R&D

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Bon alors du coup, suite aux conseils, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Date_Ech = Replace(Date_Ech, "H", ":")
    après j'imagine qu'il faut faire un If en fonction de l'heure c'est ca ?
    le code de rdurupt ne marche pas (il me renvoie juste la date), mais du coup je ne sais pas utiliser le Cdate pour les heures, un ptit coup de main ?

    EDIT : Pour être plus clair, je suis en train de faire un fichier de traitement de datas et du coup il va y avoir pas mal de date_ech à le suite. Faut que la macro soit capable de bien coller l'heure si c'est 00:00 ou 8:37 par exemple.

  7. #7
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Pourtant j'ai indiqué :
    Puis utiliser de nouveau CDate qui traite aussi les heures
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  8. #8
    Candidat au Club
    Homme Profil pro
    Technicien R&D
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Technicien R&D

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    ben voui, mais j'ai quand même pas compris ^^

    j'ai mis un EDIT sur mon message précédent, et du coup, tu pourrais m'écrire un petit bout de code pour m'éclairer ?

    Merci

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Damned, les experts sont trop réactifs ..... J'ai à peine le temps de réfléchir que les solutions tombent .....

    Si dessous une approche par pas (attention, j'utilise Excel en anglais .....)
    Col A: exemple (A1), B = resultat, C= edition de la formule en B

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    050316 8H30	3/5/2016	=DATE(VALUE("20" & MID(A1,5,2)), MID(A1,3,2), LEFT(A1,2))
    	8:30:00 AM	=TIMEVALUE(SUBSTITUTE((MID(A1,FIND(" ",A1)+1, FIND("H",A1)-2)), "H", ":"))
    	3/5/2016 8:30	=B2+B1
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  10. #10
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub tast()
    d = "050316 8H"
    Debug.Print CDate(Replace(Format(d, "@@/@@/@@ @") & IIf(Right(d, 1) = "H", "00", ""), "H", ":"))
    d = "050316 8H3"
    Debug.Print CDate(Replace(Format(d, "@@/@@/@@ @") & IIf(Right(d, 1) = "H", "00", ""), "H", ":"))
    d = "050316 8H30"
    Debug.Print CDate(Replace(Format(d, "@@/@@/@@ @") & IIf(Right(d, 1) = "H", "00", ""), "H", ":"))
    d = "05031623H"
    Debug.Print CDate(Replace(Format(d, "@@/@@/@@ @") & IIf(Right(d, 1) = "H", "00", ""), "H", ":"))
    d = "05031623H55"
    Debug.Print CDate(Replace(Format(d, "@@/@@/@@ @") & IIf(Right(d, 1) = "H", "00", ""), "H", ":"))
    End Sub
    Dernière modification par Invité ; 29/04/2016 à 14h07.

  11. #11
    Candidat au Club
    Homme Profil pro
    Technicien R&D
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Technicien R&D

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    ce code marche bien quand je le teste tout seul, mais quand je l'intègre dans ma macro, il me met

    erreur d’exécution '13'
    Incompatibilité de type

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Tracker2013 Voir le message
    ce code marche bien quand je le teste tout seul, mais quand je l'intègre dans ma macro, il me met

    erreur d’exécution '13'
    Incompatibilité de type
    sur quel répons ou poste?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print CDate(Replace(Format([A1], "@@/@@/@@ @") & IIf(Right([A1], 1) = "H", "00", ""), "H", ":"))

  13. #13
    Candidat au Club
    Homme Profil pro
    Technicien R&D
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Technicien R&D

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Bon c'est bon, ca marche, j'ai du faire quelques modif dans mon code mais il reste un soucis.

    si d = 0H, il me sort juste la date sans l'heure.

  14. #14
    Candidat au Club
    Homme Profil pro
    Technicien R&D
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Technicien R&D

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    bon double post car mon problème est plus grand en fait, désolé !

    mon Date_Ech est tiré de l'extraction d'un chemin qui est variable.

    au début j'avais écrit ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nom = "L112 050416 8H.Sample.Raw.csv"
    Date_Ech = Mid(nom, 6, 9)
    mais du coup si j'ai 23h30 ou 8h ça change la longueur

    comment faire pour qu'il puisse prendre la date et l'heure (ou alors je demande à l'opérateur de toujours remplir 08H00 ?) ?

  15. #15
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Test()
    d = [A1]
    Debug.Print CDate(Replace(IIf(Len(d) < 6, d, Format(d, "@@/@@/@@ @")) & IIf(Right(d, 1) = "H", "00", ""), "H", ":"))
     
    End Sub

  16. #16
    Candidat au Club
    Homme Profil pro
    Technicien R&D
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Technicien R&D

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Même erreur,mais il est possible que je l'insère mal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Nom = "L112 050416 8H.Sample.Raw.csv"
    Debug.Print CDate(Replace(IIf(Len(Nom) < 6, Nom, Format(Nom, "@@/@@/@@ @")) & IIf(Right(Nom, 1) = "H", "00", ""), "H", ":"))

  17. #17
    Invité
    Invité(e)
    Par défaut
    tu nous donne un exemple et tu travail sur des données qu ne respecte pas l’exemple
    j'ai une variable : date_ech qui contient "050316 0H"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Nom = Split("L112 050416 8H.Sample.Raw.csv", " ")(1) & " " & Split(Split("L112 050416 8H.Sample.Raw.csv", " ")(2), ".")(0)
    Debug.Print CDate(Replace(IIf(Len(Nom) < 6, Nom, Format(Nom, "@@/@@/@@ @")) & IIf(Right(Nom, 1) = "H", "00", ""), "H", ":"))
    après il faut peut-être envisager de lui apprendre à lire!

  18. #18
    Candidat au Club
    Homme Profil pro
    Technicien R&D
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Technicien R&D

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    en fait, je tirait mon nom_ech d'un chemin de fichier, du coup je m'était pas rendu compte qu'en changeant le nombre de caractère ca changeait du coup la sélection à traiter... bref je me suis un peu perdu aussi

    En tout cas, ton dernier code marche bien, il m'a juste fallu modifier "H" en "h"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        nom = Dir(fichiers(i))
        nom1 = Split(nom, " ")(1) & " " & Split(Split(nom, " ")(2), ".")(0)
       MsgBox CDate(Replace(IIf(Len(nom1) < 6, nom1, Format(nom1, "@@/@@/@@ @")) & IIf(Right(nom1, 1) = "h", "00", ""), "h", ":"))
    Merci beaucoup

  19. #19
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Tracker2013 Voir le message
    en fait, je tirait mon nom_ech d'un chemin de fichier, du coup je m'était pas rendu compte qu'en changeant le nombre de caractère ca changeait du coup la sélection à traiter... bref je me suis un peu perdu aussi

    En tout cas, ton dernier code marche bien, il m'a juste fallu modifier "H" en "h"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        nom = Dir(fichiers(i))
        nom1 = Split(nom, " ")(1) & " " & Split(Split(nom, " ")(2), ".")(0)
       MsgBox CDate(Replace(IIf(Len(nom1) < 6, nom1, Format(nom1, "@@/@@/@@ @")) & IIf(Right(nom1, 1) = "h", "00", ""), "h", ":"))
    Merci beaucoup
    Comme ça ça marche à tous le coups
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     nom =ucase( Dir(fichiers(i)))
        nom1 = Split(nom, " ")(1) & " " & Split(Split(nom, " ")(2), ".")(0)
       MsgBox CDate(Replace(IIf(Len(nom1) < 6, nom1, Format(nom1, "@@/@@/@@ @")) & IIf(Right(nom1, 1) = "H", "00", ""), "H", ":"))

  20. #20
    Candidat au Club
    Homme Profil pro
    Technicien R&D
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Technicien R&D

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    arf, j'ai encore un problème persistant : si mon fichier est à 0H, le résultat ne me donne que la date et non la date et l'heure

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2007] Convertir une chaine en date
    Par le_dilem dans le forum Access
    Réponses: 2
    Dernier message: 02/08/2009, 12h34
  2. convertir une chaine en date
    Par Khalid.bounouader dans le forum JDBC
    Réponses: 2
    Dernier message: 09/10/2008, 11h34
  3. convertir une chaine en date dans ma page asp
    Par shirya dans le forum ASP.NET
    Réponses: 8
    Dernier message: 15/03/2007, 21h07
  4. convertir une chaine en date
    Par imane_bennouna dans le forum Langage
    Réponses: 13
    Dernier message: 22/09/2006, 19h58
  5. Convertir une chaine en format heure
    Par Lars dans le forum ASP
    Réponses: 3
    Dernier message: 24/05/2005, 11h44

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