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 convertir csv en xls - Perte de 0


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Ingénieur commercial
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut VBA convertir csv en xls - Perte de 0
    Bonjour,

    Je me permets de venir chercher de l'aide sur ce forum.
    Je suis très novice en VBA ou tout autre langage et aurais besoin de vos conseils svp.

    Je cherche à enregistrer un fichier ebay.csv en ebay.xlsx.

    J'ai trouvé sur le net 2 différents codes, en effet, j'arrive bien à convertir un fichier avec les 2 codes, mais dans les 2 cas, je "perds" les 0 qui étaient présents dans le fichier csv.

    Je m'explique:
    Certaines cellules comportent soient des codes postaux, soit des numéros de téléphone: exemple 06100 ou 06xxxxxxxxx.
    Je souhaiterais donc copier exactement cela comme du texte, mais dans le fichier converti en Excel, je me retrouve avec 6100 ou 6xxxxxxx, perte des 0 de devant.

    J'ai bien essayé de mettre un format en texte, mais cela ne fonctionne pas.

    Quelqu'un aurait-il une idée?

    Je vous mets les 2 codes ici:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     Sub TransformerFichierCsvEnExcel(ByRef fichier As File)
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Dim myPath As String, myFile As String, aa As String
     
    myPath = fichier.ParentFolder.Path 'le chemin du fichier csv
    myFile = Dir(myPath & "\*.csv")
     
    c = 1
    Do Until myFile = ""
     
    aa = Mid(myFile, 1, Len(myFile) - 4)
    ActiveWorkbook.Sheets(1).Columns("AO").Select
    ActiveWorkbook.Sheets(1).Columns("AO").NumberFormat = "@"
    Workbooks.Open Filename:=myPath & "\" & myFile
    ActiveWorkbook.SaveAs Filename:=myPath & "\" & aa & ".xls", FileFormat:=xlExcel8
     
    ActiveWorkbook.Close
    myFile = Dir
    c = c + 1
    Loop
     
     
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
     
    End Sub
     
    ou
     
    Sub ConvertiCvsXls(ByRef fichier As File)
    Dim TB
    Dim Lig As Long, i As Integer, AncNom As String
     
        myPath = fichier.ParentFolder.Path 'le chemin du fichier csv
        myFile = Dir(myPath & "\*.csv")
        aa = Mid(myFile, 1, Len(myFile) - 4)
     
        Workbooks.Open Filename:=myPath & "/" & myFile
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
            With ActiveSheet
     
            For Lig = 1 To Range("A65536").End(xlUp).Row
    'Changer la  , (virgule) par le séparateur de votre fichier
                TB = Split(.Cells(Lig, 1), ",")
     
                For i = 0 To UBound(TB)
     
                    .Cells(Lig, i + 1) = TB(i)
                    .Cells(Lig, i + 1).NumberFormat = "@"
                Next i
            Next Lig
        End With
     
        ActiveWorkbook.SaveAs Filename:=myPath & "\" & aa & ".xls", FileFormat:=xlExcel8
     
     
            If Dir(chemin & fichier) = "" Then
                'le fichier xls n'existe pas encore
                ActiveWorkbook.SaveAs chemin & fichier, FileFormat:=xlExcel9795 'Jusqu'au 2000
                Workbooks(fichier).Close SaveChanges:=False
            Else
                'le fichier xls existe, voir si ont l'écrase sans tomber en erreur.
                If MsgBox("Le fichier " & myFile & " existe déjà" & Chr(13) _
                & "Faut-il l'écraser ?", vbQuestion + vbYesNo, "Ecraser fichier") = 6 Then
                    Application.DisplayAlerts = False
                    ActiveWorkbook.SaveAs chemin & fichier, FileFormat:=xlExcel9795 'Jusqu'au 2000
                    Workbooks(fichier).Close SaveChanges:=False
                    Application.DisplayAlerts = True
                ElseIf Tous Then
                    'Eviter la surcharge de classeur si tous les fichiers
                    Workbooks(AncNom).Close SaveChanges:=False
                Else
                    Application.ScreenUpdating = True
                    Application.DisplayAlerts = True
                    Exit Sub
                End If
     
        End If
     
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    End Sub

    Merci bcp pour votre aide.
    Marion

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour le mieux est d'aboutir à du texte pur (et pas seulement du numérique affiché sous une forme de présentation)
    - Quel est le format que tu souhaites pour ces N°s de téléphone ? tout à la suite ou séparation par un espace tous les x caractères ? -->> montre
    - quelle plage (adresse) de cellules contient ces n°s de téléphone ?
    - cette plage be contient-elle QUE des numéros de téléphone et ces numéros sont-t-il à formater TOUS de la même manière ?
    J'attends tes réponses précises

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Ingénieur commercial
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut Détails
    Bonsoir,

    Voici mes réponses:

    - Les numéros de téléphones ne sont pas forcément tous du même format pour tous les pays, idem pour les codes postaux. Je souhaiterais seulement avoir EXACTEMENT ce qui est dans le fichier csv (rentré par le client), si 0 il y a, il les faut. Est-ce clair? Les numéros peuvent être tous à la suite, peu importe.
    - les numéros de téléphone sont en colonne AQ , les codes postaux en colonne AO,
    - dans la colonne contenant les codes postaux ou les tel, il faut garder le meme nombre de caractères que le fichier source csv, avec 0 si ils y sont.

    J'espère que cela réponds à vos question.
    Jai voulu vous envoyer le fichier csv en question mais je n'arrive pas à le joindre à mon message..
    voici quelques lignes en exemple:

    Sales Record Number,User Id,Buyer Fullname,Buyer Email,Buyer Address 1,Buyer Address 2,Buyer City,Buyer State,Buyer Zip,Buyer Country,Order ID,Item ID,Transaction ID,Item Title,Quantity,Sale Price,Included VAT Rate,Shipping And Handling,Insurance,Total Price,Payment Method,PayPal Transaction ID,Invoice Number,Invoice Date,Sale Date,Checkout Date,Paid on Date,Shipped on Date,Shipping Service,Feedback Left,Feedback Received,Notes to Yourself,Custom Label,Variation Details,Tracking Number,Global Shipping Reference ID,Ship To Address 1,Ship To Address 2,Ship To City,Ship To State,Ship To Zip,Ship To Country, phone number

    9539,sonnenkind1122,"Bettina Tietze",insel-des-lichts@t-online.de,Wittbruchstr.,36,Duisburg,,00167,Germany,,191874938560,1457977660009,"WORHAN® 5m TELESKOPLEITER ANLEGELEITER KLAPPLEITER ALU BOCKLEITER LEITER 500cm [5m C-Line]",1,"EUR 129.99",19%,"EUR 0.00","EUR 0.00","EUR 129.99",PayPal,7G0365452W200352L,,,05-Dec-17,05-Dec-17,05-Dec-17,06-Dec-17,"GLS Paket",Yes,,,K5C,"[WORHAN® Teleskopleiter:5m C-Line]",50571458579,,Wittbruchstr.,36,Duisburg,,00167,Germany,+34765258722

    9540,krzych73,"Krzysztof Pawluczuk",krzysztof-pawluczuk@t-online.de,"Im Winkel 11",,Harsefeld,,21698,Germany,,191874938560,1458438899009,"WORHAN® 5m TELESKOPLEITER ANLEGELEITER KLAPP

    Merci bcp pour votre aide.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Si tous n'ont pas le même format, je crains que tu n'échapperas pas à des expressions conditionnelles (sacré travail si trop de "variétés" différentes).
    J'allais te proposer quelque chose (pour les N°s de téléphone) du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Range("AQ:AQ").NumberFormat = "00 00 00 00 0#"
    For Each c In Range("AQ:AQ").SpecialCells(xlCellTypeConstants)
      c.Value = c.Text
    Next
    dont tu peux t'inspirer. Mais encore faudrait-il que le numberformat soit décidé de manière conditionnelle, puisque formats différents.

    Même démarche en ce qui concerne les codes postaux

    Je ne vois personnellement pas d'autres méthodes aboutissant à du texte pur et non du simple "affichage" formaté de numérique.

    Sauf à intervenir en amont (sur le fichier csv) ? Encore plus de boulot (et moins aisé)

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Ingénieur commercial
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut
    D'accord, merci.

    Juste pour que je comprenne bien, je fais la meme chose avec un fichier txt converti en xlsx. Et la, pas de soucis, j'arrive à gader le format texte du début à la fin avec ce code trouvé sur le net:

    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
      'Boucle sur tous les fichiers d'un répertoire
        Private Sub TransformerTousLesFichiers(ByVal repertoire As String)
            Dim fso As New FileSystemObject
            Dim fichier As File
     
            For Each fichier In fso.GetFolder(repertoire).Files 'pour chaque fichier du repertoire
                If Right(fichier.Name, 4) = ".txt" Then 'si c'est un fichier texte
                    TransformerFichierTexteEnExcel fichier 'il effectue la transformation ci-dessous
     
                End If
     
                If Right(fichier.Name, 4) = ".csv" Then 'si c'est un fichier csv
     
                    'ConvertiCvsXls fichier
                    TransformerFichierCsvEnExcel fichier 'il effectue la transformation ci-dessous
     
                End If
     
     
            Next fichier
          MsgBox ("Files converted")
        End Sub

    Pourquoi tout cela est-il possible avec un .txt et non un .csv?

    Merci bcp
    Marion

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Parce que un fichier plat .txt ne contient que du texte. Pour contenir d'autres types, il lui faut avoir été structuré de manière très différente.
    Le revers de la médaille ? --->> des surprises en cas de transfert de dates.

    Comme souvent, la maladresse est en amont (à l'écriture du fichier à EXPORTER). Et le mieux (lorsqu'on en a le "contrôle") est de faire faire proprement en amont.
    Corriger en aval est toujours pénible, voire hasardeux dans certains cas.

  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
    Bonjour !

    Citation Envoyé par marion05 Voir le message
    J'ai bien essayé de mettre un format en texte, mais cela ne fonctionne pas.
    Aucun souci en paramétrant bien l'assistant d'importation à l'ouverture directe du fichier
    ou encore via l'importation à partir d'un fichier du menu Données (voir code généré par l'Enregistreur de macro) …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour a tous
    @marc je suis curieux j'ai testé avec query pas moyen seule la premiere cellule du tableau garde le zero (office 2007)
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    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


    Patrick, j'ai eu des codes 2003 fonctionnant sous 2007 et plus …

    Marion, joindre un fichier source (s'il ne passe pas en .csv le joindre alors en .csv.txt) pour tests …

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    @marc j'ai essayé deja csv/.text pas de changement des que c'est ouvert les zero disparaissent

    j'y arrive seulement en ouvrant le fichier avec open for output et en splitant et cpour chaque split
    cells(x,y).numberformat="@"
    cells(x,y).text= l'element du split
    ce qui pour un csv de x milles ligne est inconcevable !!
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    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


    .Text
    déclenchant forcément une erreur en affectation ‼

    Et ne pas oublier la méthode OpenText

Discussions similaires

  1. Convertir csv en xls
    Par Anthos59 dans le forum VB.NET
    Réponses: 15
    Dernier message: 24/01/2011, 20h03
  2. Convertir CSV en XLS
    Par zakou76 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/05/2010, 01h28
  3. [VBA-E] Conversion CSV en XLS
    Par crac_finance dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/03/2007, 10h18
  4. Convertir un fichier XLS en CSV
    Par n@n¤u dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/07/2006, 12h57
  5. [Excel] Convertir un fichier xls en csv sous UNIX
    Par Tsuful dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 14/04/2006, 11h12

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