XL 2021 sauvegarde en csv format ";"

nano33320

XLDnaute Junior
Bonjour

Afin d'exporter une petite base de donnée (actualisation = feuille *.xlsx => *.csv) vers un serveur partagé, je dois sauvegarder la feuille au format *.CSV avec séparateur ";"
=> figure imposée...
J'y arrive "à la main" sans problème, mais avec VBA la sauvegarde est systématiquement avec un séparateur ","...
J'ai essayé plusieurs solutions issues de post sur internet (y.c. via les options Excel)... mais échec systématique... 😵‍💫
De plus je voudrais limiter le nombre de ligne du fichier CSV au nombre de lignes écrites dans la feuille Excel...
Là je n'ai rien trouvé...

Merci de votre aide
Cdlt
Nano
 

dysorthographie

XLDnaute Accro
Bonjour Nano,

Pour sauvegarder votre feuille Excel au format CSV avec un séparateur ";", vous pouvez utiliser le code VBA suivant :
Code:
Sub ExporterCSV()
    Dim chemin As String
    Dim ws As Worksheet
   
    ' Spécifiez le chemin où vous souhaitez sauvegarder le fichier CSV
    chemin = "C:\Votre\Chemin\Vers\Le\Fichier.csv"
   
    ' Spécifiez la feuille de travail que vous souhaitez exporter
    Set ws = ThisWorkbook.Sheets("NomDeVotreFeuille")
   
    ' Exporter en CSV avec séparateur ";"
    ws.SaveAs chemin, xlCSV, Local:=True, CreateBackup:=False
   
    ' Limiter le nombre de lignes au nombre de lignes écrites dans la feuille
    ws.SaveAs chemin, xlCSV, Local:=True, CreateBackup:=False, _
        TableStyle:=xlNone, ReadOnlyRecommended:=False, _
        CreateBackup:=False, ConflictResolution:=xlOtherSessionChanges
End Sub

Assurez-vous de modifier le chemin et le nom de la feuille selon vos besoins. Vous pouvez exécuter ce code en appuyant sur F5 dans l'éditeur VBA. Cela devrait résoudre votre problème.
 

nano33320

XLDnaute Junior
Bonjour [B]dysorthographie[/B]

Merci pour ce retour rapide.
effectivement je me doutais bien qu'il manquait qque chose pour forcer le séparateur ";"
c'était le " ... , Local:=True"
J'ai eu un problème très similaire avec les formats "date" avec VBA...

Pour limiter, dans le *.csv" le nombre de lignes en relation avec la feuille Excel, je n'ai pas réussi à faire fonctionner la proposition.
J'ai réussi via une autre solution (pas très esthétique mais qui fonctionne)
Je ferme le fichier *.csv , puis via vba, je le rouvre et supprime les lignes inutiles...

😣
Ce n'est pas beau mais ça fonctionne...
Merci pour l'aide
(une solution plus élégante pour la suppression des lignes inutiles, pour la beauté du geste, m'intéresse toujours)

Très bonne soirée à vous
Cdlt
Nano
 

Nain porte quoi

XLDnaute Junior
Hello,

si le fichier CSV contient trop de ligne c'est qu'il y a soit un espace (donc invisible) dans une ligne en supplémentaire ou que le formatage va trop loin.
Pour savoir où s'arrête réellement le fichier excel utilisez le raccourci clavier Ctrl+Fin, vous devriez vous trouvez au delà de la dernière ligne "utile"
 

patricktoulon

XLDnaute Barbatruc
Bonjour
sinon on sort des clous et on fait ce que l'on veut et comme on veux
cette méthode copie ta feuille( le usedrange) et si tu met true supprime les lignes vides dans le csv

VB:
Public Property Get presse_papier_Mac_window(Optional DeleteEmptyRow As Boolean = False)
    Dim texte
    With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .GetFromClipboard: texte = Replace(.GetText(1), vbTab, ";")
        If DeleteEmptyRow Then texte = Replace(texte, vbCrLf & vbCrLf, vbCrLf)
    End With
    presse_papier_Mac_window = texte
End Property
Sub ExporterCSV()
    Dim x&, chemin$, ws As Worksheet
    ' Spécifiez le chemin où vous souhaitez sauvegarder le fichier CSV
    chemin = ThisWorkbook.Path & "\moncsv.csv"    'indiquez ici le chemin complet du csv de destination
    Set ws = ThisWorkbook.Sheets(1)    'précisez l'index ou le nom de la feuille dans les parenthèses
    ws.UsedRange.Copy
    x = FreeFile: Open chemin For Output As #x: Print #x, presse_papier_Mac_window(True): Close #x
    Application.CutCopyMode = False
End Sub
 

Statistiques des forums

Discussions
312 207
Messages
2 086 234
Membres
103 162
dernier inscrit
fcfg