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 :

format texte vers date


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut format texte vers date
    Bonsoir à tous

    Je reviens vers vous pour un petit pb de conversion d'une colonne

    J'ai une colonne, sur une feuille excel, au format texte dans laquelle j'ai en fait des dates. La date est affichée au format jj/mm/aa hh:mm:ss:....

    exemple: 26/10/07 10:54:01.493

    Mon but est de ne garder que 26/10/2007 et en format date.

    J'ai parcouru le site mais rien à faire.
    Toute aide serala bin venue et remerciée par avance

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonjour
    le code suivant devrait te convenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub ConversionEnDate()
    Dim maChaine As String
    Dim maDate As Date
    maChaine = "26/10/07 10:54:01.493"
    maDate = CDate(Left(maChaine, 8))
    MsgBox maDate
    End Sub
    cordialement

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    j'essaye sur le champ!!!!!!!

    Je vois....
    Le pb sur cette methode est qu'elle peut être lente sur une colonne de 5000 lignes. Non?

  4. #4
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub ConversionEnDate()
    Dim maChaine As String
    Dim maDate As Date
    Dim i As Long
    For i = 2 To 5001
    Cells(i, 2) = CDate(Left(Cells(i, 1), 8))
    Next '
    End Sub
    environ 1 seconde

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub ConversionEnDate()
    Dim maChaine As String
    Dim maDate As Date
    Dim C As Range
    For Each C In Range("A2:A5001")
    C(1, 2) = CDate(Left(C.Value, 8))
    Next '
    End Sub
    un poil plus rapide

    cordialement

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    C'est que ça a l'air de marcher!!!!
    C'etait aussi simple que ça???
    Merci à toi l'ami

  6. #6
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    re
    un autre post car une autre approche

    avec un format de date dans la cellule.
    À incrémenter (double clic dans le coin inférieur droit de la cellule quand il y a la petite croix)

    @+

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    Moi je voulais que le changementse fasse sur la même cellule.
    Et ça marche aussi comme ça.
    Alor C'est tout bon!

    Je peux pas une expression comme tu propose même si elle est efficace
    Dans mon cas avant de faire ce traitement je supprime descolonnes dans mon fichier.
    La colonne des dates passe ainsi de la colonne F à A. Donc je prefere faire le traitement via une macro vba

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    Le bout de code de Fred marche très bien, mais quand je l'utilise sur une feuille excel 2003 elle beugue. Ca n'a peut etre rien à voir
    Je pense à autre chose plutôt. quand la colonne à traîter n'est pas visible dans la fenetre, ca beugue?
    Vous en pensez quoi?

  9. #9
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ConversionEnDate()
    Dim maChaine As String
    Dim maDate As Date
    Dim C As Range   ' Feuil1 à adapter
    For Each C In sheets("Feuil1").Range("A2:A5001")
    C(1, 2) = CDate(Left(C.Value, 8))
    Next '
    End Sub

    cordialement

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonour et excusez_moi.

    Y a-t-il, sous VBA, une raison de ne pas utiliser tout simplement Datevalue (plutot que les 8 1ers caractères d'un Cdate) ?

  11. #11
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir,
    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox DateValue("26/10/07 10:54:01.493")
    et a priori j'obtiens une erreur de type (err 13) ... les secondes sur trois chiffres.


    cordialement

  12. #12
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Et split, ça va pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ladate = Split("26/10/07 10:54:01.493", " ")(0)
    MsgBox ladate

  13. #13
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonsoir ousk,

    Ta solution en est une.

    En voilà une autre toute bête qui évite le split et met le millesime sur 4 chiffres, comme souhaité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Command1_Click()
      ladate = "01/01/01 01:01:493"
      MsgBox DateValue(Replace(ladate, " ", Chr(0)))
    End Sub
    Les solutions ne manquent pas ...

  14. #14
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Et l'intérêt de remplacer Split par DateValue + Replace ?
    Edit
    Je ne vois pas non plus l'intérêt de remplace left par split

  15. #15
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    C'est sur (enfin presque),

    sauf en ce qui concerne le datevalue, qui apporte le millésime souhaité (voir 1er message de la discussion) sans, après avoir "extrait", devoir alors soit l'utiliser, soit faire encore d'autres triturages de la chaine extraite.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    Voilà ma solution pour le moment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    With Workbooks("toto").Worksheets(1)
    i = 2
    Do Until .Cells(i, 1).Value = ""
        .Cells(i, 1) = CDate(Left(Cells(i, 1), 8))
        .Cells(i, 5) = CDate(Left(Cells(i, 5), 8))
        .Cells(i, 7) = CDate(Left(Cells(i, 7), 8))
    i = i + 1
    Loop
    End With
    End Sub
    Et là ça marche une fois sur deux. Vraiment bizarre

  17. #17
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    si le contenu d'une cellule n'est pas rigoureusement sous la forme "##/##/## ##:##:####", mais que certaines commencent par #/#/## ou par ##/##/####, par exemple, rien de bizarre !
    La méthode choisie (prendre 8 caractères à gauche), ma foi... se plantera.

  18. #18
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Et s'il mettait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if Instr(.Cells(i, 1)," ") <> 0 then
        .Cells(i, 1) = CDate(Left(Cells(i, 1), instr(.Cells(i, 1)," ")))
    endif
    ça te plairait mieux ?
    (le else n'étant pas ici indispensable car s'il prenait envie à la cellule d'avoir déjà le bon format (#/#/## ou ##/##/####) elle n'aurait pas à changer)
    Ça pour aller au devant de ta prochaine objection

  19. #19
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Ouais ...
    c'est déjà moins mal...

    Mes objections ?
    Ben... tu as lu comme moi ce qui pouvait arriver et semble être arrivé, non ?

    J'ai par ailleurs eu avec alsimbad un petit échange par MP au sujet de l'optimisation des codes (par MP car la discussion sur laquelle il posait une question intéressante avait été fermée).

    Je le laisse passer par ici, regarder ce que tu proposes, et me prouver (en modifiant ton code) qu'il a bien tout capté de certains aspects du développement en VB/VBA ...

    Bon dimanche

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    mes premiers 8 caractères sont toujours de la forme jj/mm/aa...

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

Discussions similaires

  1. Format Date ( texte vers numérique)
    Par mano_bi dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 30/05/2014, 13h53
  2. Texte vers date
    Par plm222 dans le forum Access
    Réponses: 9
    Dernier message: 30/12/2012, 19h42
  3. [AC-2007] convertir texte vers date dans une requête
    Par christophe31 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 04/05/2010, 15h16
  4. [AC-2003] Conversion de format texte en date ou extraction
    Par gwenagan dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 09/08/2009, 21h01
  5. passage de format texte vers nombre
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 07/06/2007, 16h01

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