Projet Export CSV Structuré via Maco
Salut à tous (et toutes),
Permettez moi de présenter en premier lieu tous mes meilleurs voeux à ceux qui me liront.
Cette année est placé sous le signe du défi. En effet pour ceux qui n'aurait pas froid aux yeux, j'ai un petit projet à vous soumettre pour lequel j'aurais besoins des compétences des plus acharnés d'entre vous. Etant un bille en excel (je commence à apprendre le vb) mais ayant des idées pleins la tête, je me heurte à quelques petit problèmes de competences.
Je souhaite pouvoir exporter un fichier CSV via une macro qui aurait cette tronche la, afin de pouvoir derriere le traiter avec un vbs à bibi.
Alors j'ai bien une petite idée dans le cahier des charges, et cela ressemble à :
- Je prend une cellule de reference (ex: C4)
- Je lis les données qui sont a gauche, la premiere colone c'est le nom, la 2eme le prenom.
- Moi meme etant la cellule concernant les droits
- La case au dessus de moi est un dossier de niveau 3
- La case encore au dessus est un dossier de niveau 2. Cette case peut etre vide (car fusion de cellule) alors je parcours les case sur la gauche jusqu'a tomber sur une valeur, ce sera alors la valeur de mon dossier N2
- La Case la plus haute est le dossier N1. Meme principe,Cette case peut etre vide (car fusion de cellule) alors je parcours les case sur la gauche jusqu'a tomber sur une valeur, ce sera alors la valeur de mon dossier N1.
- Je repete la meme operation mais cette fois ci en me deplacant sur la case sur ma droite, etc, jusqu'à tomber sur une case vide.
- Une fois sur la case vide je refait le tout mais sur la ligne du dessous
Vous l'aurez compris, il s'agit la d'un projet assez complexe...
En premier lieu je souhaiterai avoir votre avis sur la faisabilite de la chose, si je suis parti dans la bonne direction (s'il n'y a pas plus simple) et je preciserai que je souhaiterai garder la forme qu'à le tableau (niveau visuel).
Je solicite donc vos conseils et prouesses avec grand interet vous remercie de l'attention que vous portez à ma demande
PS : Je vous ai egalement joint un exemple de fichier avec 2 feuilles vous montrant un peu ce à quoi je souhaite arriver si jamais je n'avais pas ete assez clair
Bonjour
Un essai
Mais j'obtiens un fichier Csv avec séparateur , (virgule) pourquoi ?
Salut Banzai64,
Tout d'aord un enorme merci !!!!!
Ton code est super, il répond à mes attentes, grâce à toi ainsi que d'autre conseils de personnes aussi altruiste que toi, voici le code final pour aboutir au saint graal :
Sub ExportCSV_txt()
Dim noLig As Integer
Dim noCol As Integer
Dim noColDeb As Integer
Dim noColMax As Integer
Dim noLigTitreMax As Integer
Dim noLigTitre As Integer
Dim noColTitre As Integer
Dim ficCSV As String
noLig = 4 ' Première ligne de données
noLigTitreMax = 3 ' Dernière ligne de titre
noColDeb = 3 ' Première colonne de données
noColMax = 6 ' Dernière colonne de données
'
' Pour toutes les lignes à traiter
ficCSV = ""
While Not IsEmpty(Cells(noLig, 1))
'
' Pour toutes les colonnes de connées
noCol = noColDeb
While noCol <= noColMax
ficCSV = ficCSV & Cells(noLig, 1) & ";" & Cells(noLig, 2)
ficCSV = ficCSV & ";" & Cells(noLig, noCol)
'
' Pour toutes les lignes de titre
noLigTitre = noLigTitreMax
While noLigTitre <> 0
'
' Recherche du titre
noColTitre = noCol
Do
'
' Jusqu'à la colonne contenant le titre
If Not IsEmpty(Cells(noLigTitre, noColTitre)) Then
ficCSV = ficCSV & ";" & Cells(noLigTitre, noColTitre)
Exit Do
Else
noColTitre = noColTitre - 1
End If
Loop
noLigTitre = noLigTitre - 1
Wend
ficCSV = ficCSV & vbCrLf
noCol = noCol + 1
Wend
'
noLig = noLig + 1
Wend
'
'-- Construction du nom du fichier CSV
'--------------------------------------
DossierFichierExcel = ActiveWorkbook.Path
DateSystème = Date
DateSSAAMMJJ = Mid(DateSystème, 7, 4) & Mid(DateSystème, 4, 2) & Mid(DateSystème, 1, 2)
NomFichierCSV = "Import_Droits_Dossiers_" & Range("C2").Value
NomFichierCSV = NomFichierCSV & "_" & DateSSAAMMJJ & ".CSV"
'-- Création du fichier CSV
'---------------------------
Separateur = ";"
ThePath = ThisWorkbook.Path & "\" & NomFichierCSV
TheFile = Application.GetSaveAsFilename(ThePath, "CSV ,*.csv")
If TheFile = False Then Exit Sub
Open TheFile For Output As #1
'Open DossierFichierExcel & "\" & NomFichierCSV For Output As #1
Print #1, ficCSV '= " "
Close
End SubUn énorme merci pour avoir pris du temps à m'aider et me répondre, c'est grâce à des gens comme vous qu'il fait bon vivre sur la toile.
A bientot (et encore merci merci merci) 8)