XL 2016 Création fichier CSV

ZZ59264

XLDnaute Occasionnel
Bonjour au forum,

Je joins un fichier à ma demande de création d'un fichier CSV à partir d'un tableau,

Merci d'avance pour votre aide,

Cordialement,
 

Pièces jointes

  • Classeur1.xlsx
    11.1 KB · Affichages: 18
Solution
Cette macro est la plus rapide :
VB:
Sub ExportCSV()
    Dim t, chemin$, NomFichier$
    t = Timer
    'chemin = "P:\AP\5 B\5 CSV IMPORT\" ' Ne pas oublier "\" à la fin
    chemin = ThisWorkbook.Path & "\"
    NomFichier = "Export_" & Sheets("EN TETE").[AK2] & Format(Date, "_yyyy_mm_dd")
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    With Sheets("CSV").ListObjects(1).DataBodyRange
        Workbooks.Add 'nouveau document
        [A1].Resize(.Rows.Count, .Columns.Count) = .Value 'copie les valeurs
    End With
    With ActiveWorkbook
        .SaveAs Filename:=chemin & NomFichier, FileFormat:=xlCSV, local:=True
        .Close savechanges:=False
    End With
    MsgBox Timer - t
End Sub
Toujours sur 900 000...

patricktoulon

XLDnaute Barbatruc
re

@cp4 oui tu a raison je n'ai pas déclaré une variable j'ai écris ça en 2sec de mémoire

@Efgé c'est bien pour ça que j'ai dis le chemin a adapter a votre cas

@ZZ59264
j'explique
quand on copie quelque chose que ce soit en VBA ou autre ,ce qui est copié va dans le clibboard
il y a plusieurs moyen de récupérer ce qu'il y a dans le clipboard sans devoir le coller ailleurs
je viens d'en donner un exemple
ici pour accéder au clipboard j'utilise le dataobject en late binding(déclaration tardive) avec le clisd(le numerode 3 kilometre)
avec sa fonction getfromclipboard et et sa property gettext(1) je récupère dans la variable texte le tableau entier sous forme de texte
les valeurs dans le texte sont alors séparées par un caractère TAB que je remplace par le ";"
et voilà j'ai mon code CSV prêt a être écrit dans un fichier
la méthode open for output fait très bien cela
je relâche enfin les cellules copié avec application.cutcopymode=false
terminé ;)
voilà comment je copie une plage précise en csv ou en html ou en xml ou en mime etc...etc....
simplement en remplaçant les vbtab par les caractères de structure
 

cp4

XLDnaute Barbatruc
re

@cp4 oui tu a raison je n'ai pas déclaré une variable j'ai écris ça en 2sec de mémoire

@Efgé c'est bien pour ça que j'ai dis le chemin a adapter a votre cas

@ZZ59264
j'explique
quand on copie quelque chose que ce soit en VBA ou autre ,ce qui est copié va dans le clibboard
il y a plusieurs moyen de récupérer ce qu'il y a dans le clipboard sans devoir le coller ailleurs
je viens d'en donner un exemple
ici pour accéder au clipboard j'utilise le dataobject en late binding(déclaration tardive) avec le clisd(le numerode 3 kilometre)
avec sa fonction getfromclipboard et et sa property gettext(1) je récupère dans la variable texte le tableau entier sous forme de texte
les valeurs dans le texte sont alors séparées par un caractère TAB que je remplace par le ";"
et voilà j'ai mon code CSV prêt a être écrit dans un fichier
la méthode open for output fait très bien cela
je relâche enfin les cellules copié avec application.cutcopymode=false
terminé ;)
voilà comment je copie une plage précise en csv ou en html ou en xml ou en mime etc...etc....
simplement en remplaçant les vbtab par les caractères de structure
Merci pour ton partage et tes explications. Est-ce que ce code ne risque pas de planter dans différentes versions de windows et office?
 

ZZ59264

XLDnaute Occasionnel
re

@cp4 oui tu a raison je n'ai pas déclaré une variable j'ai écris ça en 2sec de mémoire

@Efgé c'est bien pour ça que j'ai dis le chemin a adapter a votre cas

@ZZ59264
j'explique
quand on copie quelque chose que ce soit en VBA ou autre ,ce qui est copié va dans le clibboard
il y a plusieurs moyen de récupérer ce qu'il y a dans le clipboard sans devoir le coller ailleurs
je viens d'en donner un exemple
ici pour accéder au clipboard j'utilise le dataobject en late binding(déclaration tardive) avec le clisd(le numerode 3 kilometre)
avec sa fonction getfromclipboard et et sa property gettext(1) je récupère dans la variable texte le tableau entier sous forme de texte
les valeurs dans le texte sont alors séparées par un caractère TAB que je remplace par le ";"
et voilà j'ai mon code CSV prêt a être écrit dans un fichier
la méthode open for output fait très bien cela
je relâche enfin les cellules copié avec application.cutcopymode=false
terminé ;)
voilà comment je copie une plage précise en csv ou en html ou en xml ou en mime etc...etc....
simplement en remplaçant les vbtab par les caractères de structure
Comment adapter le chemin pour que je puisse tester ?

chemin = Environ("userprofile") & "\DeskTop\" & Sheets("EN TETE").[AK2] & Format(Date, "_yyyy-mm-dd") & ".csv"

Userprofile est a changer?

Petite précision car dans votre explication, vous dites que vous récupérer le tableau en entier, or je ne veux que le tableau à partir de la deuxieme ligne (sans les en tête),

Ne pouvant tester votre solution à cause du chemin, je ne sais pas si cela donne le résultat escompté,

Merci pour vos explications, je vais devoir lire plusieurs fois quand même et je vais bien essayer de comprendre chaque étape,
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc

patricktoulon

XLDnaute Barbatruc
re
non userprofile n'est pas a changer si tu desire ateindre le chemin de ton compte sur le disque sytem
chez moi ca donne c:\users\patrick\ chez toi ça donnera le nom de ton compte a la place de "patrick"
tu rajoute "\desktop\" et blablabla & ".csv" pour lereste

après si c'est un chemin particulier dans un autre disque c'est a toi d'encoder le chemin en dur pour la base et le reste en dynamique comme un peu tout le monde te l'a proposé avec une valeur de cellule et une date formatée comme je l'ai fait aussi d'ailleurs
 

patricktoulon

XLDnaute Barbatruc
Comment adapter le chemin pour que je puisse tester ?

chemin = Environ("userprofile") & "\DeskTop\" & Sheets("EN TETE").[AK2] & Format(Date, "_yyyy-mm-dd") & ".csv"

Userprofile est a changer?

Petite précision car dans votre explication, vous dites que vous récupérer le tableau en entier, or je ne veux que le tableau à partir de la deuxieme ligne (sans les en tête),

Ne pouvant tester votre solution à cause du chemin, je ne sais pas si cela donne le résultat escompté,

Merci pour vos explications, je vais devoir lire plusieurs fois quand même et je vais bien essayer de comprendre chaque étape,
je repete
je t'ai donné le choix avec entetes ou pas
ici la copie avec ententes est bloquée
j'ai pourtant pris la peine de mettre des commentaires
VB:
 'Range("CSV[#all]").Copy    ' on copie le tableau structuré  entete compris
  Range("CSV").Copy           ' on copie le tableau structuré sans les entetes
et pour environ tu n'a Absolument rien a changer ça va aller direct sur ton bureau
en gros pour tout les Windows et office c'est universel
 

ZZ59264

XLDnaute Occasionnel
Merci pour votre retour,

Ce n'est pas sur mon bureau mais un chemin particulier et le voici :

"P:\AP\5 B\5 CSV IMPORT\"

J'ai testé ce chemin mais il me dit qu'il est introuvable :

Chemin = "P:\AP\5 B\5 CSV IMPORT\"& "\DeskTop\" & Sheets("EN TETE").[AK2] & Format(Date, "_yyyy-mm-dd") & ".csv"
 

ZZ59264

XLDnaute Occasionnel
J'ai modifier le chemin et cela fonctionne,

Chemin : "P:\AP\5 B\5 CSV IMPORT\"& Sheets("EN TETE").[AK2] & Format(Date, "_yyyy-mm-dd") & ".csv"

il me reste à vraiment bien comprendre vos étapes,

Merci pour tout et a tous ceux qui ont participé au sujet,

Cordialement,
 

patricktoulon

XLDnaute Barbatruc
re

teste moi ça dans un module
VB:
sub testdossier()
dim chemin$,fichier$
Chemin = "P:\AP\5 B\5 CSV IMPORT\"
'fichier= Sheets("EN TETE").[AK2] & Format(Date, "_yyyy-mm-dd") & ".csv"
 if dir (chemin,vbdirectory)<>"" then
msgbox "le dossier de destination existe"
else
 msgbox "le dossier de destination n'existe pas "
end if
end sub
je regarde pour cette colonne vide
 

Discussions similaires

Réponses
2
Affichages
244
Réponses
13
Affichages
344

Statistiques des forums

Discussions
312 040
Messages
2 084 827
Membres
102 684
dernier inscrit
flint125