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 colonne en date apres import CSV [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 73
    Points : 52
    Points
    52
    Par défaut Convertir une colonne en date apres import CSV
    Bonjour,

    j'ai un petit problème suite à l'import d'un fichier CSV.
    une de mes colonne importée contient des dates, et dans le fichier excel, les dates sont aléatoirement conciderer comme date ou string ce qui empeche de faire des filtres automatiques.
    Le parcours de chacune des ligne avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     range("h" & ligne)=cdate(range("h" & ligne))
    est impossible car le fichier contient plus de 15 000 ligne...
    Avez vous une solution ?

  2. #2
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Citation Envoyé par imaril Voir le message
    Bonjour,
    ...
    Le parcours de chacune des ligne avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     range("h" & ligne)=cdate(range("h" & ligne))
    est impossible car le fichier contient plus de 15 000 ligne...
    Avez vous une solution ?
    Pourquoi n'est-ce pas possible ?

    Sinon, en fonction de ta méthode d'import du CSV, tu peux peut-être directement travailler sur les lignes CSV.

    A+
    N'oubliez pas le si votre problème est solutionné.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    je dit que ce n'est pas possible car cette manip prend a peu près 10minutes...
    pour les condition dans l'import, en fait quand je fais le workbooks.open et que je met mon fichier CSV, il l'ouvre directement en format excel ( pas toutes les colonnes dans la même cellule) donc je peux pas faire tu convertir...

  4. #4
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Citation Envoyé par imaril Voir le message
    je dit que ce n'est pas possible car cette manip prend a peu près 10minutes...


    As tu essayé en mettant le sreenupdating à False et/ou en désactivant les calculs automatiques?
    Ca me parrait énorme pour "seulement" 15000 lignes?
    N'oubliez pas le si votre problème est solutionné.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    oui oui je le fais toujours le screen update
    mais vu qu'il y a pas de formule, j'avais pas mis le calculate, je test apres manger avec le calculate et je te tiens au courant

  6. #6
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,

    par vba ou autre...
    tu ajoutes une colonne en vba à côté de la tienne (la C ajoutée par exemple à gauche de la D qui contient tes données) et tu appliques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Trans()
    With Columns("C:C")
        .FormulaR1C1 = "=RC[1]*24/24"
       .NumberFormat = "m/d/yyyy" 'ou format voulu...
    End With
    End Sub

    Sans vba..
    tu ajoutes la colonne, tu la sélectionnes, tu tapes =, clic sur la cellule de la m^me ligne de la colonne voulue, *24/24 et tu valides par CTRL+Entrée

    tu supprimes l'ancienne ensuite...

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    Je souhaite que se soit fait par macro (car ensuite il y a un autre traitement)
    mais a quoi sert le *24/24 ??

  8. #8
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,
    en premier lieu, le soucis est de savoir si ça marche chez toi ?

    Sinon, c'est trop long à expliquer en 2 lignes, ça tient de l'interprétation des dates sous Excel (différente en vba), de la notion de numéro de série et de la représentation décimale d'une durée...

    Ainsi, pour Excel, la base de temps unitaire retenue est la journée, ce qui fait que pour une durée donnée le numéro de série sera identique en valeur à sa représentation décimale C'est fondamental aussi pour comprendre l'interprétation des nombres convertis en date-heure et pour les ambiguïtés des calculs horaires basiques. Le chiffre qui intervient est toujours exprimé en jour
    la multiplication par 24 fait qu'Excel interprète tout ce qu'il peut en date, en divisant pas 24, on rétablit notre valeur d'origine qui nous retourne le numéro de série qui sera correctement formaté suivant le format qu'on applique à la colonne...

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    bon ca a l'air de marcher
    je te remercie beaucoup et le traitement est rapide (même pour les 15Kligne)

    edit : juste un petit problème dans toute les case vide de la colonne il me met 00/01/1900
    ce n'est pas un problème très grave mais bon si il y a un moyen simple de l'éviter

  10. #10
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,

    c'est logique, vois comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Trans()
    With Columns("C:C")
       .FormulaR1C1 = "=IF(RC[1]<>"""",RC[1]*24/24,"""")"
       .NumberFormat = "m/d/yyyy"
    End With
    End Sub

    sinon pour mieux comprendre tu peux répliquer le tableau ci-dessous dans une feuille



    ps : les formules sont à relativiser par lignes...

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    Merci beaucoup et merci ² pour ta petite explication tres claire

    a plus sur le forum

  12. #12
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,

    voici plus propre, ça te rajoute une colonne transitoire, te fait le traitement voulu, recopie les valeurs de la colonne obtenue sur elle-même et supprime la colonne originelle... (car si tu supprimes la colonne tout court, les formules à côté ne vont pas aimer...)

    attention => suppression colonne !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Trans2()
    With Columns("D:D")
       .Insert Shift:=xlToRight
       '.select '' ne pas mettre dans le code surtout, à activer pour compréhension de la suite si besoin...
       ''le with column("D:D") pointe vers la colonne E apparente suite à l'insertion, mais qui représente toujours l'objet d'origine
       '' à savoir la colonne pointée via l'instruction With...
       .Offset(0, -1).FormulaR1C1 = "=IF(RC[1]<>"""",RC[1]*24/24,"""")"
       .Offset(0, -1).NumberFormat = "m/d/yyyy"
       .Offset(0, -1).Copy
       .Offset(0, -1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
       .Delete
    End With
    End Sub
    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    je t'ai devancé sur ce point je pense voici le code que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub convert_date(num_col As Integer) 
     
    Columns(num_col).Insert Shift:=xlToRight 
    With Columns(num_col) 
        .FormulaR1C1 = "=if(RC[1]<>"""",RC[1]*24/24,"""")" 
        .NumberFormat = "dd/mm/yyyy hh:mm" 
        .Copy 
        .PasteSpecial Paste:=xlPasteValues 
    End With 
    Cells(1, num_col) = Cells(1, num_col + 1) 
    Columns(num_col + 1).EntireColumn.Delete 
    End Sub
    cela reviens au même je pense
    par rapport au formule, je n'en ai pas besoin, vu que par la suite je vais copier tt les valeur de mon CSV dans un nouveau fichier et il n'y a pas de formule dans un CSV ^^

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

Discussions similaires

  1. Changer le format d'une table apres import csv
    Par jjjdud dans le forum SAS Base
    Réponses: 1
    Dernier message: 20/11/2013, 19h55
  2. convertir une chaine en date
    Par imane_bennouna dans le forum Langage
    Réponses: 13
    Dernier message: 22/09/2006, 19h58
  3. Trier une colonne par date
    Par foobar42 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/07/2006, 17h46
  4. Convertir une chaîne en date
    Par davinout dans le forum Langage
    Réponses: 4
    Dernier message: 25/04/2006, 19h35
  5. [Firebird] Convertir une String en date
    Par laffreuxthomas dans le forum SQL
    Réponses: 1
    Dernier message: 04/05/2005, 19h42

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