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 :

Reformatage de 2 types de dates dans une colonne


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut Reformatage de 2 types de dates dans une colonne
    Bonjour a tous,

    J'ai une colonne de dates ou les dates sont (apres import d'un fichier texte) ecrites selon deux formats:
    - soit 16/01/2008 00:00:00
    - soit 38413

    Mon but est de reformater via vba pour arriver a un format du type 16-Jan-08.

    J'ai un début de code pour le premier cas:

    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
         Dim cell As Range, jour As String, mois As String, an As String
    For Each cell In Range("A2:A" & Range("A65536").End(xlUp).Row)
     
    If Len(cell) = 19 Then
     
     jour = Val(Left(cell, 2))
         mois = Val(Mid(cell, 5, 2))
         an = Val(Mid(cell, 7, 4))
         cell = Format(DateSerial(an, mois, jour), "dd-mmm-yyyy")
     
    End If
     
    If Len(cell) = 5 Then
     
    End If
     
     
    Next
    qui ne marche meme pas pour le premier type...

    et je ne vois pas comment faire pour l'autre format

    Pourriez-vous me guider?
    Merci d'avance !

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 203
    Points : 175
    Points
    175
    Par défaut
    Bonjour,

    Cela devrait marcher et même plus simplement avec les 2 types :

    Range("A" & i) = Format(Range("A" & i).value, "dd-mmm-yyyy")

    Par contre, je me demande s'il ne faut pas avoir les macros complémentaires pour que Format fonctionne.
    J'ai déjà vu des postes où cela ne marchait pas et je sais + pquoi...

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut jeo13 et le forum
    qui ne marche meme pas pour le premier type... et je ne vois pas comment faire pour l'autre format
    ?? c'est quoi l'autre format ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Cel As Range
    For Each cell In Range("A2:A" & Range("A65536").End(xlUp).Row)
        Cel.NumberFormat = "dd/mm/yyyy hh:mm:ss"
        Cel = CDate(Cel)
    Next Cel
    "dd/mm/yyyy hh:mm:ss" c'est ça l'autre format que tu veux ?
    A+

  4. #4
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Merci pour ton idée !

    Je viens d'insérer ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim i As Integer
     
        For i = 2 To 2000
        Range("A" & i) = Format(Range("A" & i).Value, "dd-mmm-yyyy")
     
        Next i
    Mais ca ne change rien...

  5. #5
    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
    Bonjour Gorfael,


    Citation Envoyé par jeo13 Voir le message
    ) ecrites selon deux formats:
    - soit 16/01/2008 00:00:00
    - soit 38413

  6. #6
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par Gorfael Voir le message
    Salut jeo13 et le forum
    qui ne marche meme pas pour le premier type... et je ne vois pas comment faire pour l'autre format
    ?? c'est quoi l'autre format ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Cel As Range
    For Each cell In Range("A2:A" & Range("A65536").End(xlUp).Row)
        Cel.NumberFormat = "dd/mm/yyyy hh:mm:ss"
        Cel = CDate(Cel)
    Next Cel
    "dd/mm/yyyy hh:mm:ss" c'est ça l'autre format que tu veux ?
    A+
    Merci pour ta reponse, je teste ton code pour le premier format
    L'autre format comme je l'ai dit c'est un format nombre sur 5 chiffres (ex: 38413) ...

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 203
    Points : 175
    Points
    175
    Par défaut
    Mais moi cela marche très bien!!!
    Et pour tes 2 formats texte ou numérique.
    As-tu regardé du côté des macros complémentaires. Tu les as installées?

    10/12/2008 00:0010-déc-2008
    34532 17-juil-1994
    11/12/2008 00:00 11-déc-2008
    34533 18-juil-1994
    12/12/2008 00:00 12-déc-2008
    34534 19-juil-1994
    13/12/2008 00:00 13-déc-2008
    34535 20-juil-1994
    14/12/2008 00:00 14-déc-2008
    34536 21-juil-1994

  8. #8
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Je suis sur une version Excel du bureau.
    Comment je peux savoir si elles sont installées ou non ?
    Et de quelle macro complémentaire parles-tu?

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 203
    Points : 175
    Points
    175
    Par défaut
    Dans Outils/Macros complémentaires, j'ai Utilitaire d'analyse qui est coché...

    ce code marche chez moi (EXCEL2003):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub toto()
    For i = 1 To 10
    Range("B" & i) = Format(Range("A" & i).Value, "dd-mmm-yyyy")
    Next i
    End Sub

  10. #10
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Pas besoin de macro complémentaire pour ce genre de code.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  11. #11
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Ok merci.
    Je viens de verifier et je n'ai pas cette macro complementaire d'installée... et ce code ne marche pas.
    je pense que je vais revenir sur les autres methodes.

  12. #12
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par jeo13 Voir le message
    et ce code ne marche pas.
    Et que se passe-t-il?
    Message d'erreur?
    Rien n'est modifié?

    Pourrais-tu nous fournir un classeur exemple (réduit à quelques lignes) pour qu'on puisse tester?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  13. #13
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Oui bien sur.
    Voila le lien vers le dossier zip contenant le fichier excel et les trois fichiers textes sources.

    J'ai mis en place un bouton pour automatiser l'import.

    Et ca bloque au niveau du changement de format de date...
    J'ai une erreur sur la ligne en gras :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 2 To 10000
    Range("AD" & i) = Format(Range("A" & i).Value, "dd-mmm-yyyy")
    Next i
    Mais le changement de date est bien effectué.

  14. #14
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par jeo13 Voir le message
    J'ai une erreur sur la ligne en gras
    Et quelle erreur, s'il te plait?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  15. #15
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    J'ai l'erreur suivante:

    Run-time error:13
    Type Mismatch

  16. #16
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    en fait je pense qu'il y a erreur quand il arrive a la ligne ou la donnée n'est plus une date mais #N/A car je vais jusqu'a la ligne 10 000 alors qu'il n'y a ici que 924 lignes dans le fichier

    Comment je pourrais imposer le nombre de lignes sachant qu'il sera variable a l'avenir ?

    En gros est-il possible de parcourir le fichier jusqu'a la derniere ligne non vide?

  17. #17
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    C'est bon j'ai réussi a limiter le nombre de lignes dans la boucle for en comptant simplement le nombre de lignes non vides d'une colonne spécifique.

    Merci a tous pour votre aide !

  18. #18
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut à tous

    Citation Envoyé par jeo13 Voir le message
    Merci pour ta reponse, je teste ton code pour le premier format
    L'autre format comme je l'ai dit c'est un format nombre sur 5 chiffres (ex: 38413) ...
    Ma macro du poste précédent convertit en date les 2 "formats" de données texte, qu'elles soientt en texte sous la forme de nombre entier ou de date.
    Mon incompréhension venait du fait que pour moi, le format était teste, et que dans l'exemple, on avait une partie heure non traitée.
    Désolé, étant un "vieux", je fais une différence entre format (la manière dont Excel nous permet de visualiser les données) et forme (comment sont les données). Donc, s'il n'y a besoin que de la date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Cel As Range
    For Each cell In Range("A2:A" & Range("A65536").End(xlUp).Row) 
        Cel.NumberFormat = "dd/mm/yyyy"
        Cel = CDate(Cel)
    Next Cel
    du moment que la donnée de départ soit sous un format texte ou nombre qu'excel peut interpréter comme une date.
    A+

  19. #19
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Effectivement tu fais bien de faire la différence entre format et forme
    J'avais oublié de préciser que seule la date m'intéressait
    mais c'était implicite d'apres mon code dans mon premier post ou je ne prenais pas en compte l'heure

    a+

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

Discussions similaires

  1. [XL-2007] Format date dans une colonne
    Par castours dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/07/2012, 14h32
  2. Réponses: 1
    Dernier message: 07/04/2009, 17h32
  3. [MySQL] Enregistrement de la date dans une colonne
    Par TeraD dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/03/2009, 13h49
  4. Transfert de dates dans une colonne datetime
    Par loop007 dans le forum Développement
    Réponses: 1
    Dernier message: 02/05/2008, 16h05
  5. Compter un nombre de date dans une colonne
    Par MASK55 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 07/11/2007, 12h17

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