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à

21forum-excel.txt (2.84 Ko)

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 Sub

Bonjour,

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 :

image

et maintenant voici ce que j'obtient lorsque la première cellule est vide :

image

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.

17test-tableau.xlsm (63.71 Ko)

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).Column

Bonjour h2so4,

Incroyable !!!!! Merci beaucoup, tout fonctionne comme je le souhaite !

Merci beaucoup pour le temps que vous m'avez consacré.

Rechercher des sujets similaires à "conversion csv code vba"