Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 MACRO VBA - export CSV décalé

schyzo

XLDnaute Nouveau
Bonjour,

J'ai un fichier de données au format Excel que j'aimerais exporter en CSV à l'aide d'une macro.
Mon export fonctionne, mais je ne comprend pas pourquoi Excel saute des lignes à l'export...

Description du fichier de données :
un seul onglet
les intitulés des colonnes sont en ligne 9
Mes données à exporter sont donc sur la plage A9:AM3000

La macro crée bien le CSV mais il comporte les intitulés de colonnes en ligne 1
puis il saute 9 lignes blanches, et les données commencent à la ligne 10 (comme dans le fichier de données d'origine).

Voici le code de la macro que j'utilise :

Sub Export_DATA()
' Import des données de production
'Box de validation
Rep = MsgBox("Voulez-vous continuer ?", vbYesNo + vbQuestion, "création du CSV ?")
If Rep = vbYes Then
GoTo SUITE
Else
GoTo FIN
End If


SUITE:
' Selection et enregistrement CSV
ActiveSheet.Range("A9:AM3000").Select
Selection.Copy

'EnregistrerClasseur()

Dim strFichier As String

strFichier = ActiveWorkbook.Name & "-import_prod" & ".csv"

Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
Application.DisplayAlerts = False

ActiveWorkbook.SaveAs Filename:=strFichier, FileFormat:=xlCSV, CreateBackup:=False, Local:=True

FIN:
ActiveWindow.Close
End Sub


Pouvez-vous me dire comment me débarrasser des lignes blanches dans le fichier CSV exporté ?
Merci )
 

schyzo

XLDnaute Nouveau
Bonjour Job75 et merci pour ta participation.
Malheureusement, j'avais déjà vérifié en ouvrant le CSV généré dans Notepad, et la valeur 9988776655884930 est exporté sous la forme : 9,98877665588493E+15.

Dans le tableau Excel, la colonne est au format "nombre" avec zéro décimales.
 

schyzo

XLDnaute Nouveau
Le format Texte ne convient pas pour traiter des numéros de série. Voici ce qu'Excel affiche selon le format :


Moi, je veux bien le dernier format, avec le numéro entier : aussi bien dans le fichier Excel dans lequel les techniciens saisissent le numéro de série, que dans l'export CSV qui va ensuite être injecté dans une base de données...
Je pense qu'il faut convertir la valeur au moment de l'export CSV et que le format dans lequel Excel affiche la donnée importe peu
 

job75

XLDnaute Barbatruc
Re,

Je ne sais pas ce que vous faites avec vos formats, c'est pourtant élémentaire même sans macro.

Ouvrez le fichier Excel joint et enregistrez-le manuellement en CSV.

Puis ouvrez le fichier CSV avec le Bloc-notes, la 2ème colonne est intégralement conservée.

A+
 

Pièces jointes

  • Classeur(1).xlsx
    14.3 KB · Affichages: 34

schyzo

XLDnaute Nouveau
Pour expliquer le contexte : ce fichier Excel sur lequel je travail sert à faire du suivi de production.
Les techniciens produisent / assemblent du matériel et, à l'aide d'une douchette USB, vont scanner les numéros de série pour remplir un fichier Excel. Ce fichier doit ensuite être converti en CSV pour être importé dans une base de donnée SQL.
Le fichier Excel dans lequel ils travaillent est donc pré-formaté avec notamment tout un tas de formules qui leur indique quelles cellules renseigner.
Les numéros de série ne sont donc pas tapés à la main, mais arrivent par le scan de la douchette.

Dans Excel, si on se met sur une cellule qui n'a jamais été mise en forme (format standard par défaut) et qu'on saisi la valeur : 123456789123456789, dès qu'on appuie sur Entrée, Excel change l'affichage : ça reste au format standard, mais il affiche 1,23457E+17.
C'est ce qui se passe quand on scan avec la douchette et que le numéro s'inscrit dans la cellule.
Par ailleurs, si on prends une cellule au format standard qui contient 1,23457E+17 et qu'on la passe au format texte, ça ne change rien : la valeur reste 1,23457E+17.
J'ai donc essayé en mettant la colonne au format texte d'abord, puis je scan un numéro de série : ça marche, le numéro s'affiche en entier et reste au format texte. Je pourrais donc me contenter de cette solution...sauf que je ne peux pas verrouiller le fichier, ce qui fait que n'importe quel technicien qui va s'en servir pourra changer les formats (même si il ne fait pas exprès !).
J'aurais donc voulu, par précaution, que ma macro prenne soin de remettre tous les numéros de série au bon format lors de la génération du CSV.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, schyzo, Lone-Wolf, job75

@schyzo
Merci @Staple1600 , ma macro fonctionne très bien.
J'en déduis (avec en plus la lecture de la suite du fil) que tu n'as pas essayé la macro que je te proposais dans le message#6 ?
Car en natif, comme tu avais essayé de le faire, Excel sait exporter en CSV.
Le seule contrainte pour bien avoir comme séparateur le point-virgule
(et qu'à la réouverture du CSV dans Excel, les données soient bien séparées colonne par colonne)
C'est simplement d"ajouter ce petit bout de code...
VB:
With fCSV
'ci-dessous ligne de commande prévu en natif par Excel pour un export en CSV
    .SaveAs Filename:=strFichier, FileFormat:=xlCSV, CreateBackup:=False, Local:=True
    .Close False ' le petit bout de code qui change la donne
End With
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…