Conversion CSV avec code VBA
Bonjour à tous,
je possède une macro Excel qui me permet de convertir des données au format .csv en commençant par A10. Le code prend en compte la neuvième colonne de mon tableau comme référence. C'est a dire imaginons que la neuvième colonne soit N alors lors de la conversion on va vérifier la cellule N10. Si la cellule est vide ou possède une formule du genre =somme ou autres, la ligne 10 entière est entièrement ignorée. En revanche si il y a une valeur en N10 toute la ligne 10 est convertie dans le fichier final. et on fait pareil avec les lignes 11, 12,13,...,
Le problème que j'ai c'est que si la cellule N10 est vide ( donc la première cellule à vérifier pour la conversion ) et bien même les autres lignes 11 ,12 ,13,... ne seront pas convertie et je ne comprends pas pourquoi ?
c'est seulement lorsque qu'une valeur manque a la première cellule que ca fait beuguer le code et j'aimerais résoudre ce problème afin que même si la première cellule qu'on vérifie de la neuvième colonne visible soit vides et bien on passe à la ligne suivante indépendamment.
voici le code que j'ai déjà
bonjour,
une proposition de correction (non testée)
Sub ExportToCSV()
Dim ws As Worksheet
Dim LastRow As Long
Dim LastCol As Long
Dim StartCell As Range
Dim rng As Range
Dim csvData As String
Dim fileName As String
Dim sPathFile As String
Dim rw As Range
Dim cell As Range
Dim cellValue As Variant
Dim cellFormula As String
Dim visibleCol As Long
' Spécifiez le nom de la feuille de calcul ici
Set ws = ThisWorkbook.Sheets("BU BIO-001 (2)")
' Spécifiez la cellule de départ pour la plage de données
Set StartCell = ws.Range("A10")
' Trouver la dernière ligne et la dernière colonne avec des données dans la feuille
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
LastCol = ws.Cells(StartCell.Row, ws.Columns.Count).End(xlToLeft).Column
' Trouver la 9ème colonne visible
For visibleCol = 9 To ws.Columns.Count
If Not ws.Columns(visibleCol).Hidden Then
Exit For
End If
Next visibleCol
' Définir la plage de données en se déplaçant vers le bas à partir de la cellule de départ
Set rng = ws.Range(StartCell, ws.Cells(LastRow, LastCol))
' Loop through each row in the range
For Each rw In rng.Rows
' Vérifier si la colonne 9 (I dans la feuille Excel) de la ligne actuelle a une valeur
Set cell = rw.Cells(1, visibleCol)
cellValue = cell.Value
' If the first cell in the ninth column is not empty, convert the whole row
If Not IsEmpty(cell) And Not cell.HasFormula Then
' Si la colonne 9 a une valeur et n'a pas de formule, ajoutez les données de la ligne à la chaîne CSV
For Each cell In rw.Cells
' Vérifiez si la cellule est visible avant de l'ajouter à la chaîne CSV
If Not cell.EntireColumn.Hidden Then
csvData = csvData & cell.Value & ";"
End If
Next cell
csvData = csvData & vbCrLf
End If
Next rw
' Utilisez la valeur de la cellule U1 comme nom de fichier
fileName = ws.Range("U1").Value
' Si la valeur de U1 est vide, affichez un message d'erreur et quittez la macro
If fileName = "" Then
MsgBox "Le nom de fichier est vide. Veuillez entrer un nom valide dans la cellule U1.", vbExclamation
Exit Sub
End If
' Ajoutez l'extension ".csv" au nom du fichier
fileName = fileName & ".csv"
' Définir le chemin complet du fichier sur le bureau
sPathFile = Environ("USERPROFILE") & "\Desktop\" & fileName
' Enregistrez les données CSV dans un fichier sur le bureau
Open sPathFile For Output As #1
Print #1, csvData
Close #1
' Afficher un message de confirmation
MsgBox "Le fichier " & fileName & " a été créé avec succès.", vbInformation
End SubBonjour,
Tout d'abord, merci de votre réponse,
Le code que vous m'avez fournis ne fonctionne pas non plus, j'ai toujours ce probleme de valeur non prise en compte
pour vous aider voici le fichier final que j'obtient lorsque la première cellule possède une valeur :
et maintenant voici ce que j'obtient lorsque la première cellule est vide :
vous voyez il manque une information en fin de ligne
je ne comprends pas pourquoi le code ne passe pas a la suite au lieu de faire une fixette sur cette cellule et de me bloquer
Voici un tableau type pouvant aider a la compréhension
il faut commencer par exécuter New_Macro puis ExportToCSV
vous aller obtenir un fichier texte avec la conversion et comme vous pourrez le voir si la cellule 10 de la colonne 9 visible est vide les valeurs ne seront pas prises en compte
par contre si y'a des valeurs alors les valeurs seront présentes dans la conversion.
bonsoir,
tu te bases sur la première ligne de tes données pour déterminer le nombre de colonnes, alors qu'il semblerait qu'il faille se baser sur la ligne des entêtes 2 lignes plus haut.
modifie cette instruction ainsi
LastCol = ws.Cells(StartCell.Row - 2, ws.Columns.Count).End(xlToLeft).ColumnBonjour h2so4,
Incroyable !!!!! Merci beaucoup, tout fonctionne comme je le souhaite !
Merci beaucoup pour le temps que vous m'avez consacré.