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-E] [Debutant] Problème de format de cellule lors du passage en un fichier cvs


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut [VBA-E] [Debutant] Problème de format de cellule lors du passage en un fichier cvs
    Bonjour

    Je n'ai aucune expérience en Vb et j'ai besoin de faire un fichier cvs à partir d'un fichier excel. J'ai pris la solution de ouskel'n'or pour la transformation

    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
    Dim x, y, DernièreLigne, DernièreColonne
        Sheets("LISTE").Activate
        Application.ScreenUpdating = False
        ActiveSheet.Range("A1").Select
        Selection.CurrentRegion.Select
        Set tbl = ActiveCell.CurrentRegion
        DernièreLigne = tbl.Rows.Count
        DernièreColonne = tbl.Columns.Count
        Cells(1, 1).Select
        Open "c:\toto.csv" For Output As #1
            For x = 1 To DernièreLigne
                For y = 1 To DernièreColonne - 1
                    Print #1, Cells(x, y).Formula + ";";
                Next y
                Print #1, Cells(x, y + 1).Formula
            Next x
        Close #1
    Le code marche parfaitement mais j'ai un problème de format de cellule.
    Sous Excel j'ai un format qui est jj/mm/aaaa hh:mm:ss, lors de la conversion il se retrouve en texte. A cause de cela au lieu d'avoir 02/08/2005 18:22:31, j'obtiens 38566,76564.

    Comment puis je faire pour obtenir correctement la date et l'heure?

    merci de votre aide
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    As-tu essayé de remplacer ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Print #1, Cells(x, y + 1).Formula
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Print #1, Cells(x, y + 1).Text

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    je ferai bien un essai en supprimant ces .formula...!

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    pardon mais l'export est parfaitement correct.
    02/08/2005 18:22:31 = 38566,76564
    C'est le type Date ...
    Si tu veux l'heure et date, tu devras exporter une chaîne (String)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If TypeName(Cells(x, y + 1).Value) = "Date" Then
     Print #1, Format(Cells(x, y + 1).Value, "dd/mm/yyyy hh:nn:ss") & ";"
    Else
     Print #1, Cells(x, y + 1).Value & ";"
    End If
    Sinon pourquoi ne pas faire un SaveAs en format CSV tout bêtement ?
    Citation Envoyé par Masmeta
    ../..
    Le code marche parfaitement mais j'ai un problème de format de cellule.
    Sous Excel j'ai un format qui est jj/mm/aaaa hh:mm:ss, lors de la conversion il se retrouve en texte. A cause de cela au lieu d'avoir 02/08/2005 18:22:31, j'obtiens 38566,76564.

    Comment puis je faire pour obtenir correctement la date et l'heure?

    merci de votre aide
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  5. #5
    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
    Hello masmeta, tu peux donner l'adresse à laquelle tu as trouvé ce code que j'apporte la correction de cafeine
    A+
    PS - Ça m'évitera de chercher

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    cela fonctionnne sans le .formula... ( je comprends toujours pas à quoi il sert..?.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ..
     Print #1, Cells(x, y) + ";";
                Next y
                Print #1, Cells(x, y + 1)
    ...

  7. #7
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    Citation Envoyé par ouskel'n'or
    Hello masmeta, tu peux donner l'adresse à laquelle tu as trouvé ce code que j'apporte la correction de cafeine
    A+
    PS - Ça m'évitera de chercher

    Roooh le mauvais exemple pour les nouveaus

    C'est par la pour le lien clic ici

    @bbil
    Pourquoi faire cela? Tout simplement que lorsque l'on enregistre sous CVS par Excel, celui ci rajoute à la fin des données de nombreux points virgule. Et enfin je t'avoue que je ne connais pas trop le VBA pour excel et que le bout de code du grand Ouskel'n'or m'est tombé tout chaud dans le bec

    Quand j'aurai un peu plus de metier, je penserai à enregistrer en CVS et ensuite ouvrir le fichier à partir de la fin et effacer les lignes de ; jusqu'à trouver autre chose.

    merci pour votre aide
    dsl pour le retard de la réponse
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  8. #8
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    Citation Envoyé par cafeine
    Hello,

    pardon mais l'export est parfaitement correct.
    02/08/2005 18:22:31 = 38566,76564
    C'est le type Date ...
    Si tu veux l'heure et date, tu devras exporter une chaîne (String)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If TypeName(Cells(x, y + 1).Value) = "Date" Then
     Print #1, Format(Cells(x, y + 1).Value, "dd/mm/yyyy hh:nn:ss") & ";"
    Else
     Print #1, Cells(x, y + 1).Value & ";"
    End If
    J'ai essayé de faire cette solution mais il transforme les dates en chiffre dans mon point CVS. De plus il faut rajouter des ; au 2 lignes Print#1.....
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  9. #9
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    Citation Envoyé par bbil
    cela fonctionnne sans le .formula... ( je comprends toujours pas à quoi il sert..?.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ..
     Print #1, Cells(x, y) + ";";
                Next y
                Print #1, Cells(x, y + 1)
    ...
    Il me marque incompatibilité de type sur ton exemple
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  10. #10
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    J'ai teste l'enregistrement du fichier directement en CSV grâce à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sheets("LISTE").Activate
    Sheets("LISTE").Select
    Sheets("LISTE").Copy
    ActiveWorkbook.SaveAs Filename:="Courbes0" + s5, FileFormat:=xlCSVWindows, _ CreateBackup:=False
    ActiveWindow.Close
    D'abord j'ai un enregistrement avec des , et non des ; où est l'option pour modifier cela?
    Ensuite il y a toujours plein de , en fin de fichier comment je peut demander a ouvrir le fichier mettre le pointeur de fichier à la fin et ensuite demander qu'il remonte en modifiant les "," en " "?
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  11. #11
    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
    cafeine a écrit :
    Hello,

    pardon mais l'export est parfaitement correct.
    02/08/2005 18:22:31 = 38566,76564
    C'est le type Date ...
    Si tu veux l'heure et date, tu devras exporter une chaîne (String)

    Code :
    If TypeName(Cells(x, y + 1).Value) = "Date" Then
    .....Print #1, Format(Cells(x, y + 1).Value, "dd/mm/yyyy hh:nn:ss") & ";"
    ...Else
    .....Print #1, Cells(x, y + 1).Value & ";"
    End If
    Citation Envoyé par Masmeta
    J'ai essayé de faire cette solution mais il transforme les dates en chiffre dans mon point CVS. De plus il faut rajouter des ; au 2 lignes Print#1.....
    Et moi je dis : Remplace value par formula et essaie (pas testé, mais si besoin, je verrai ce qui ne va pas )
    Tu dis

  12. #12
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par Masmeta
    Il me marque incompatibilité de type sur ton exemple
    oui remplace aussi le + par l'opérateur de concaténation des chaines .. : &

  13. #13
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    Citation Envoyé par bbil
    oui remplace aussi le + par l'opérateur de concaténation des chaines .. : &
    Je ne comprend pas ce que tu veux dire.

    Voici mon code :
    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
    19
    20
    21
    22
    23
     
    Sheets("LISTE").Activate
        Dim x, y, DernièreLigne, DernièreColonne
        Application.ScreenUpdating = False
        ActiveSheet.Range("A1").Select
        Selection.CurrentRegion.Select
        Set tbl = ActiveCell.CurrentRegion
        DernièreLigne = tbl.Rows.Count
        DernièreColonne = tbl.Columns.Count
        Cells(1, 1).Select
        Open "Courbes0" + s5 + ".csv" For Output As #1
            For x = 1 To DernièreLigne
                For y = 1 To DernièreColonne - 1
                    If TypeName(Cells(x, y + 1).Value) = "Date" Then
                        Print #1, Format(Cells(x, y + 1).Formula, "dd/mm/yyyy hh:nn:ss") & ";";
                    Else
                        Print #1, Cells(x, y + 1).Formula & ";";
                    End If
                    'Print #1, Cells(x, y).Formula + ";";
                Next y
                Print #1, Cells(x, y + 1)
            Next x
        Close #1
    le résultat est que le format date n'est toujours pas reconnu, j'ai maintenant par exemple un 8 pour 02/08/2005 18:22:31.

    Par contre pourquoi l'enregistrement en CVS donne des virgules et non des points virgule. Est ce qu'il y a une option à donner pour prendre le bon séparateur?
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  14. #14
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    Citation Envoyé par Masmeta

    le résultat est que le format date n'est toujours pas reconnu, j'ai maintenant par exemple un 8 pour 02/08/2005 18:22:31.
    En faite sur cela j'ai écris une bétise. Ma colonne dd/mm/yyyy hh:nn:ss n'est pas integrer dans le fichier txt
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  15. #15
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    et tu as essayé comme je te l'ai dis plus haut tous simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ..
     Print #1, Cells(x, y) &  ";";
                Next y
                Print #1, Cells(x, y + 1)
    ...
    avec le &..?

  16. #16
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    Bon voici le code qui marche :

    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
     
        Sheets("LISTE").Activate
        Dim x, y, DernièreLigne, DernièreColonne
        Application.ScreenUpdating = False
        ActiveSheet.Range("A1").Select
        Selection.CurrentRegion.Select
        Set tbl = ActiveCell.CurrentRegion
        DernièreLigne = tbl.Rows.Count
        DernièreColonne = tbl.Columns.Count
        Cells(1, 1).Select
        Open "Courbes0" + s5 + ".csv" For Output As #1
        For x = 1 To DernièreLigne
                For y = 1 To DernièreColonne - 1
                    Print #1, Cells(x, y) & ";";
                Next y
                Print #1, Cells(x, y + 1)
        Next x
        Close #1
    Merci de votre aide
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

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

Discussions similaires

  1. [XL-2003] Problème de format de cellules imposés dans une procédure évènementielle
    Par Joloma dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/02/2011, 18h41
  2. [JXL] Probléme de format des cellule
    Par spiky33 dans le forum Documents
    Réponses: 1
    Dernier message: 30/04/2008, 14h29
  3. Problème de format de cellule (#NA)
    Par basto dans le forum Excel
    Réponses: 2
    Dernier message: 02/07/2007, 18h10
  4. [VBA-E][debutant] Problème avec l'ouverture de fichiers .INI
    Par Masmeta dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/03/2007, 08h36
  5. [VBA-E]Gros problème d'actualisation des cellules
    Par soad029 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/04/2006, 10h03

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