Exporter des données en CSV_VBA [Résolu/Fermé]

Signaler
Messages postés
324
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
10 mars 2020
-
 Maurice -
Bonjour,

Je suis en train de mettre en place un outil permettant d'exporter une plage de données de mon classeur en CSV avec comme séparateur (^)

L'idée c'est une fois appuyer sur le bouton, il se crée un répertoire. Ce répertoire contiendra des sous répertoire représentant chacun le répertoire d'enregistrement de mon fichier CSV généré.
Jusqu'ici tout va bien.

Mon problème c'est que, ma macro arrive à créer le répertoire et les sous répertoire, mais dans mon répertoire, les données ne sont pas exportées.
S'il vous plaît, je dois rendre ce travail pour demain soir.

Voici un exemple de mon travail avec les macros: https://www.cjoint.com/c/DJwqtCH1nDt


Au secours !

Partager son savoir est la meilleure façon d'apprendre!

20 réponses

Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 073
Bonjour,
Vaux-t-il la peine de chercher la solution ou c'est trop tard ... ?

Messages postés
324
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
10 mars 2020
3
Bonsoir Le Pingou,
Non, je galère toujours je n'arrive pas à trouver la solution.
Si vous pouvez m'aider à résoudre le problème ce sera vraiement gentil!
Merci d'avance,
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 073
Bonjour,
OK je regarde votre fichier et comment fonctionne votre code..... pour cerner le problème... !

Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 073
Bonjour,
A première vue, il manque une valeur pour [cMax] dans la ligne d'instruction :
For Index = 1 To cMax

Avez-vous une précision.... ?

Messages postés
324
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
10 mars 2020
3
Au fait je n'ai pas de précision sur Max, j'ai essayé de d'dapter un code retouvé sur le net.
Mais mon idée, c'est d'arriver à extraire en csv la palge de donnée.
Si vous avez une solution, vous pouvez modifier le code!!
Merci d'avance!
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 073
Bonjour,
Merci pour l'information, la solution pour demain.
Toutefois essayer de supprimer la ligne d'instruction

For Index = 1 To cMax

y compris :
Next Index

Bonne nuit.


Salutations.
Le Pingou
Messages postés
324
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
10 mars 2020
3
Bonsoir Le Pingou,
Avez-vous trouvé la solution?
Merci d'avance!
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 073
Bonjour,
J'attendais de savoir si vous avez essayé selon mon message précédent !

Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 073
Bonjour,
Ou voulez-vous insérer la plage de donnée à exporter (la position dans le classeur CSV.... ?

Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 073
Bonjour,
Pour finaliser la solution j'ai besoin de la réponse aux 2 messages précédents !

Messages postés
324
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
10 mars 2020
3
Bonjour Le Pingou,
Les classeurs exportés doiventent être placés dans des sous repertoires. C'est à dire le même repertoire que l'outil maios cahque classeur exporté sera dans un sous repertoire qui porte le nom du classeur.
Merci id'avance!
Bonjour

le principe des csv le separateure est ";"

Voila une macro avec le test du repertoire

Sub CreatRepertoire()
Chemin = ActiveWorkbook.Path & "\"
MonRep = Chemin & "Export"
If Dir(MonRep, vbDirectory) = "" Then
MkDir (MonRep)
End If
Export MonRep
End Sub

Sub Export(Chemin)
Non = ActiveSheet.Name
Ext = ".csv"
Fichier = Non & Ext
CheminFiche = Chemin & "\" & Fichier
Sep = ";"
Nlig = Cells(Rows.Count, 2).End(xlUp).Row
Set Plage = Range("B6:E6,B8:E" & Nlig)
Open CheminFiche For Output As #1
For Each Lig In Plage.Rows
Tmp = ""
For Each Cel In Lig.Cells
Tmp = Tmp & CStr(Cel.Text) & Sep
Next
Print #1, Tmp
Next
Close
Set Plage = Nothing
MsgBox "Votre fichier CSV a été créé avec succès!"
End Sub

A+
Maurice
Messages postés
324
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
10 mars 2020
3
Maurice!
Merci pour ta proposition qui fonctionne aussi!
J'ai finalement opté pour la méthode de pingou qui correspond plus à ma méthode!
En tout cas c'est vraiment gentil de votre part!
Bonne journée
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 073
Bonjour,
Merci pour l'information.
Concernant la suppression de
For Index = 1 To cMax
y compris :
Next Index

Le fichier [csv] est bien créer mais il est vide.

Entre temps Maurice vous a fournis une solution, ne voulant pas faire les choses à double, est-ce que cela vous suffit pour adapter votre code... ?

Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 073
Bonjour,
Dans l'attente de votre bon vouloir, voici ma proposition basé sur votre fichier : https://www.cjoint.com/?3JAo7MMnNpw

Messages postés
324
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
10 mars 2020
3
Merci beaucoup Le Pingou!
Ce que vous avez fait est super!!
ca me vent vraiement!
J'ai cependant soulevé un autre point sur le même sujet.
Voir message ci-dessous
Messages postés
324
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
10 mars 2020
3
Le Pingou,
Vous ne savez même pas à quel point vous m'avez sauvé!
C'est excellet! c'est exactement ce que je voulais
Merci infiniement.

En parallèle, Je souhaiterais rajouter une module dans mon outil qui permet de masquer certains onglets en fonction de la valeur dans un autre onglet.
J'ai commencé à coder mais je suis bloqué. Voici mon code:


Sub masquer_onglet()

Dim ws As Worksheet
Dim ilinecourante As String
Dim iderligne As String
Dim icolonnecourante As String
Dim idernierecolonne As String

iLigneCourante = 3
ipremierecolonne = 1
idernierecolonne = 2
iDerniereLigne = Sheets("Validation_Onglets").Range("A" & Rows.Count).End(xlUp).Row


With ActiveWorkbook
For iLigneCourante = 3 To iDerniereLigne
If Worksheet.Name = Worksheets("Validation_Onglets").Cells(iLigneCourante, 1).Value
And Worksheets("Validation_Onglets").Cells(iLigneCourante, 2) = "OUI"
Then
Worksheet.Visible = xlSheetVeryHidden
iLigneCourante = iLigneCourante + 1
End If
Next
End With

Je vous remets le fichier: https://www.cjoint.com/?DJApSw3YDti


Si vous m'aidez à résoudre ce dernier point, vous me sauvez vraiment

End Sub


Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 073
Bonjour,
Merci pour l'information.
J'ai donné un oeil à votre fichier et je suis surpris que l'export ne fonctionne pas et dans ce cas je ne vais pas aller plus loin sans une explication.

Messages postés
324
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
10 mars 2020
3
Désolé Le Pingou,
Ayant plusieurs version du fichier, je me suis trompé sur la dernière version.
Voici la bonne version: https://www.cjoint.com/c/DJAsaNK3FFi
Merci d'avance
Messages postés
324
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
10 mars 2020
3
Le Pingou,
Merci c'est OK pour masquer les onglets.
La solution de Maurice fonctionne bien.
Merci en tout cas.
Je clôtue le sujet!
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 073
Merci.
Bonjour

tien voila ta macro modifier

Sub Masquer_Onglet()
Nlig = Cells(Rows.Count, 1).End(xlUp).Row
For L = 4 To Nlig
If Cells(L, 2).Value = "Oui" Then
Sheets(Cells(L, 1).Value).Visible = 2
Else
Sheets(Cells(L, 1).Value).Visible = -1
End If
Next
End Sub

A+
Maurice
Messages postés
324
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
10 mars 2020
3
Bonsoir Maurice,
C'est super!!
ça fonctionne.
Je clôture le sujet!
Messages postés
324
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
10 mars 2020
3
Bonsoir Maurice,
Je me permets de vous solliciter car je souhaiterais modifier une partie de mon outil avec la macro que vous m'avez faite.
En effet, avec mon responsable on souhaiterais que l'extraction du fichier csv soit comme suite.
En effet, on a découpé notre fichier en trois plages
plageentete = ligne 7
plagetitre = 8
plagedonnee = de la ligne 18 jusqu'à la fin de la plage de données
plagetotale = plageentete + plagetitre + plagedonnéee

Et ce que je souhaiterais, c'est d'avoir la plagetotale qui sera exportée en csv (toutes les plages en couleur orange dans mon fichier).

En parallèle je souhaiterais obtenir ceci:
-La concatenation des colonnes B et D dans le fichier csv qui sera généré
-Lorsqu'on a le mot "MAJUSCULE" dans une cellule de la ligne 17 les données dans le fichier csv seront en majuscule

Si vous pouvez m'aider à y arriver ce seraiit top! Car, c'est la dernière étape de mon outil que je dois présenter à mon responsable pour la fin de mon stage.

Je vous joins le fihcier. J'ai déjà fait 89% du travail en s'appuyant sur la macro qui vous m'avez donnée la dernière fois: https://www.cjoint.com/c/DKcwrs9chAY

Merci infimenet Maurice.
re

voila ton modele avec les Boutons

http://cjoint.com/?3JAsZu3PWut

A+

Maurice
Bonjour
je voie que 2 plage

voila une dernier macro

Sub CreatRepCsv()
Chemin = ActiveWorkbook.Path & "\"
MonRep = Chemin & "Dossier"
If Dir(MonRep, vbDirectory) = "" Then
MkDir (MonRep)
End If
ExportCsv MonRep
End Sub

Sub ExportCsv(Chemin)
Non = ActiveSheet.Name
Ext = ".csv"
Fichier = Non & Ext
CheminFiche = Chemin & "\" & Fichier
Sep = ";"
Nlig = Cells(Rows.Count, 2).End(xlUp).Row
Set A = Range(Cells(7, 2), Cells(8, 6))
Set B = Range(Cells(18, 2), Cells(Nlig, 6))
Set plage = Union(A, B)
Open CheminFiche For Output As #1
For Each Lig In plage.Rows
Tmp = ""
For Each Cel In Lig.Cells
Tmp = Tmp & CStr(Cel.Text) & Sep
Next
Print #1, Tmp
Next
Close
Set A = Nothing
Set B = Nothing
Set plage = Nothing
MsgBox "Votre fichier CSV a été créé avec succès!"
End Sub

A+
Maurice
Messages postés
324
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
10 mars 2020
3
Bonsoir Maurice,
Merci beaucoup! c'est super!
Désolé pour le retard, j'étais en vacance!

Avec tes astuces, je me suis bien amélioré en VBA! Je continue à apprendre!
Encore Merci!
Bonjour
Voila une nouvelle version
http://cjoint.com/?0KmncrSatyS

A+
Maurice