Export en VBA d'onglet en CSV

spout

XLDnaute Nouveau
Bonjour à tous et à toutes,

Ceci est mon premier post sur le site donc pardonnez moi si je ne suis pas assez clair.
J'ai actuellement une macro qui me permet d'exporter dans un fichier csv les cellules remplies (non vide ou possédant une formule renvoyant la valeur "") d'un onglet excel.
Voici ma macro (inspirée d'un post sur ce site pardon de ne pas nommer la source!)
Sub CREATION_CSV()

Dim Plage As Object, Ligne As Object, Cellule As Object, Temp As String, Separateur As String
Dim fic As Integer
fic = FreeFile()

'csv SharedUser export
Open ThisWorkbook.Path & "\SharedUser.csv" For Output As #fic
Separateur = ","
Worksheets("SharedUser").Activate
Set Plage = ActiveSheet.Range("a:l")
For Each Ligne In Plage.Rows
Temp = ""
For Each Cellule In Ligne.Cells
Temp = Temp & CStr(Cellule.Text) & Separateur
Next
Print #1, Temp
Next
Close

Close #fic

End Sub

J'ai 2 problèmes concernant ce code:
1: le fait de mettre '& separateur' me rajoute une virgule en trop à la fin de chaque ligne dans mon csv --> comment puis-je enlever cette virgule? (j'ai essayé d'ajouter une condition sans succès, peut être qu'il est possible de supprimer la dernière valeur de chaque ligne...)
2: Mon export fonctionne tellement bien qu'il prend en compte également les cellules avec formules renvoyant rien (""). Du coup j'ai des virgules sur 2000 lignes dans mon csv = complétement inutile! (j'ai une solution en faisant un copier/coller en valeur automatique mais je préférerais trouver une solution plus 'pratique')

Je fais donc appel à votre savoir faire pour m'aider,
Merci d'avance,
spout
 

tototiti2008

XLDnaute Barbatruc
Re : Export en VBA d'onglet en CSV

Bonjour Spout,

Bienvenue sur XLD,

pour le 1)

essaye de remplacer

Code:
For Each Cellule In Ligne.Cells
Temp = Temp & CStr(Cellule.Text) & Separateur
Next

par

Code:
For Each Cellule In Ligne.Cells
Temp = Temp & CStr(Cellule.Text) & Separateur
Next
if len(temp)>len(separateur) then temp = left(temp, len(temp)-len(separateur))

Pour le 2) il faudrait savoir à partir d'où il n'y a plus aucune valeur dans ta feuille, car on ne peut pas exclure les lignes entièrement vides si elles sont entre 2 lignes remplies... si j'ai bien compris, ou alors les lignes complètement vides entre 2 lignes remplies doivent être ignorées ?
 

spout

XLDnaute Nouveau
Re : Export en VBA d'onglet en CSV

Bonjour tototiti2008,

Merci déjà pour ta rapidité et également pour ta solution qui fonctionne parfaitement en ce qui concerne le problème 1.

Pour ce qui est du 2 (et ça tu ne pouvais pas le savoir) j'ai fait en sorte qu'il n'y ai pas de lignes vides entre différentes lignes remplies.
Dans mon fichier j'aurais toujours X lignes remplies à exporter et ensuite pleins de lignes avec comme valeurs "" dans les cellules.
Mais comme je l'avais mentionné j'ai une solution un peu barbare à ce second problème (le copier/coller en valeur).

Sinon j'avais pensé à faire une recherche sur la dernière ligne non vide avec ma macro puis de travailler à partir de cette ligne, hors excel considère "" comme une valeur...

Autrement tu connais peut être le moyen de faire en sorte de ne pas traiter les cellule renvoyant la valeur "" lors de l'export?

Merci pour ton aide précieuse,
Spout
 

spout

XLDnaute Nouveau
Re : Export en VBA d'onglet en CSV

MERCI!

C'est exactement ce qu'il me fallait!
Pour mon info personnelle
If Application.WorksheetFunction.CountBlank(ligne) = ligne.Columns.Count then Exit For
veut dire:
si la fonction renvoi rien alors sortir de la condition (condition = prendre en compte toutes les lignes de la plage de cellule)

C'est bien ça?
En tout cas merci encore pour ton aide et ta disponibilité,

Spout

"La seule ressource qui augmente en la partageant est la connaissance"
 

tototiti2008

XLDnaute Barbatruc
Re : Export en VBA d'onglet en CSV

Re,

Application.WorksheetFunction.CountBlank(ligne)
Compte le nombre de cellules vides de la ligne, c'est la fonction de feuille de calcul NB.VIDE

ligne.Columns.Count
est le nombre de cellule en largeur de la ligne

si NB.VIDE est égal au nombre de cellules en largeur de la ligne, c'est que toutes les cellules de la ligne sont vides (ou égales à "")
Donc on sort de la boucle (Exit For), on considère qu'il n'y a plus de lignes à traiter
 

Discussions similaires

Réponses
2
Affichages
153
Réponses
2
Affichages
118

Statistiques des forums

Discussions
312 239
Messages
2 086 497
Membres
103 236
dernier inscrit
Menni