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 - Perte de données suite enregistrement en CSV


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Par défaut VBA - Perte de données suite enregistrement en CSV
    Bonjour,
    Je rencontre actuellement un problème lors de la sauvegarde des données de mes traitements sous le format CSV.

    Je récupère des informations d'un fichier XLS avec une macro via un tableau.

    A partir d'une nouvelle feuille XLS, je retraite les données et les intègre.
    Mon nouveau tableau compte plusieurs lignes devant contenir 139 colonnes, pleines ou vides, avec pour séparateur ",".
    Seulement, lors de la sauvegarde des données sous format CSV, je me retrouve avec les 16 premières lignes comptant 139 données mais les suivantes seulement 97. (je précise que les 42 dernières données de chaque ligne doivent être vides exepté pour une ligne correspondant au nom des colonnes)

    J'ai testé d'ajouter un espace dans la dernière colonne, je me retrouve avec un fichier carré avec 139 colonnes mais mon fichier est rejeté lors des traitements à cause de l'espace, de même j'ai ajouté une 140ème colonne pleine que je supprime avant enregistrement final mais je me retrouve toujours avec un tableau asymétrique.

    Je vous mets la partie principale du mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For m = 0 To n
        Range("A" & m + 6 & ":EI" & m + 6).Value = Array("EX", Right(Date, 4) & Right(Left(Date, 5), 2) & Left(Date, 2) & "_EX_" & m + 1, "1", "N", "OT", "L", "F4", "PR", "L", "SY", "", "", tab_NE(m, 3) & tab_NE(m, 4), "E", "OT", "FU", tab_NE(m, 14), tab_NE(m, 15), "", _
        tab_NE(m, 17), "", "", "", "", tab_NE(m, 22), "N", tab_NE(m, 23), tab_NE(m, 17), tab_NE(m, 25), tab_NE(m, 26), tab_NE(m, 27), "", _
        tab_NE(m, 28), Left(tab_NE(m, 29), 19) & "Z", Left(tab_NE(m, 29), 10), tab_NE(m, 30), "", tab_NE(m, 32), "", "", Left(tab_NE(m, 29), 19) & "Z", "E", "Y", "Y", Left(tab_NE(m, 34), 19) & "Z", tab_NE(m, 35), tab_NE(m, 36), "N", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", _
        "N", "", "CR", "FR", "FR", "C", "F", "", "", "", "", "", "", "", "", "P", tab_NE(m, 51), "N", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
     
    Next m
    Avez-vous déjà rencontré ce problème et l'avez-vous résolu ?

    Je vous remercie par avance.
    Bien cordialement

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour la_caisse.

    Question 1 : Quelle méthode utilises-tu pour la sauvegarde en csv ?
    Question 2 : Pourquoi les 16 premières lignes comptent 139 données et les suivantes 97 ?
    Il faudrait voir un fichier XLS contenant les 20 premières lignes pour pouvoir situer la cause du problème.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Par défaut
    Bonjour Docmarti et merci pour ton retour :

    1/ j'utilise le code suivant pour enregistrer au format CSV :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveWorkbook.SaveAs Filename:="H:\My Documents\EX_" & Right(Date, 4) & Right(Left(Date, 5), 2) & Left(Date, 2) & ".csv", FileFormat:=xlCSV, CreateBackup:=False
    2/ Mon besoin est d'avoir 139 caractères par lignes et non 97.
    Seulement, il ne prend en compte que les 11 lignes supérieures et inférieures à la ligne qui en comporte réellement 139 de pleines.
    Les autres s'arrêtent à la dernière valeur pleine.

    Merci beaucoup
    Cdt

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    en connaissant le nombre de lignes à traiter, il serait judicieux de définir
    une variable tableau du nombre de lignes par le total de colonnes puis d'y alimenter le nécessaire …

    Ensuite en utilisant la fonction Join avec le séparateur vbNewLine par exemple
    il est possible de créer l'intégralité du texte à sauvegarder en une seule fois ! (Exemple ici)

    Sinon un classeur avec une feuille source et un fichier texte désiré en pièces jointes éclairciraient le besoin réel
    car 139 données (colonnes) puis 139 caractères ne représentent pas du tout la même chose ‼

    De la précision nait la solution …

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Un petit HS, on pourra utiliser le format de date comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.SaveAs Filename:="H:\My Documents\EX_" & Format(Date, "yyymmdd") & ".csv", FileFormat:=xlCSV, CreateBackup:=False

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Par défaut
    Citation Envoyé par Marc-L Voir le message

    Bonjour,

    en connaissant le nombre de lignes à traiter, il serait judicieux de définir
    une variable tableau du nombre de lignes par le total de colonnes puis d'y alimenter le nécessaire …

    Ensuite en utilisant la fonction Join avec le séparateur vbNewLine par exemple
    il est possible de créer l'intégralité du texte à sauvegarder en une seule fois ! (Exemple ici)

    Sinon un classeur avec une feuille source et un fichier texte désiré en pièces jointes éclairciraient le besoin réel
    car 139 données (colonnes) puis 139 caractères ne représentent pas du tout la même chose ‼

    De la précision nait la solution …

    Au temps pour moi, je suis désolé pour cette erreur de syntaxe.
    Il s'agit bien de 139 colonnes/données que je souhaite créer.

    Donc à partir de mon fichier source, je ne suis pas obligé de passer par un feuille excel intermédiare avant de sauvegarder en CSV.
    C'est intéressant mais je ne suis arrivé au bout de mes peines.

    Merci

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut Exemple de scenario :
    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
        Dim COL$(1 To 139)  ' tableau colonnes pour une ligne
     
           DT$ = Format(Date, "yyyymmdd") & "_EX_"
        COL(1) = "EX":  COL(3) = "1":  COL(4) = "N"     ' etc ... éléments fixes
     
        For m& = 0 To n    ' début traitement lignes
            COL(2) = DT & m + 1     ' début éléments variables
     
            ' Une fois les éléments variables définis, conversion en ligne de texte :
            If T$ > "" Then T = T & vbNewLine
            T = T & Join(COL, ",")
        Next
     
        '   Ecriture du fichier :
        Open "D:\Tests\Test.csv" For Output As #1:  Print #1, T:  End
    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Par défaut
    Un grand merci pour cette aide.
    Cordialement
    L.

  9. #9
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    J'aimerais quand même savoir comment il est parvenu à créer un fichier CSV à colonnes asymétriques avec cette commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.SaveAs Filename:="H:\My Documents\EX_" & Right(Date, 4) & Right(Left(Date, 5), 2) & Left(Date, 2) & ".csv", FileFormat:=xlCSV, CreateBackup:=False

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Par défaut
    C'est à cause de l'ouverture d'un fichier csv sous excel puis la sauvegarde de celui-ci sous csv.
    Il ne prend pas les valeurs vides.

  11. #11
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Je ne suis pas arrivé à reproduire cette situation.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub CSV_Open_SaveAs()
     
        Workbooks.Open Filename:= _
            "C:\Documents and Settings\client\Mes documents\Test_CSV.csv"
     
            chemin = ThisWorkbook.Path & "\test_CSV_Sauver_CSV.csv"
     
    ActiveWorkbook.SaveAs Filename:=chemin, FileFormat:=xlCSV, CreateBackup:=False
     
     
    End Sub

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/11/2011, 18h18
  2. Perte de données suite a une panne d'électricité
    Par mario9 dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/07/2011, 02h33
  3. [NFS] Perte de données suite à coupure de courant
    Par lavazavio dans le forum Réseau
    Réponses: 2
    Dernier message: 28/07/2010, 15h58
  4. perte de données suite à ajout dans repeater
    Par remitbo dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/04/2009, 19h09
  5. perte de données suite plantage
    Par patbeautifulday1 dans le forum Access
    Réponses: 1
    Dernier message: 21/02/2006, 16h12

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