Salut Tinet, Le Forum
En cherchant un peu pour toi et en repartant d'une démo existante dans ce Forum (voir Lien supprimé, je me rends compte que certains CSV Français ont un Point Virgule comme séparateur alors que CSV signifie : Comma-separated values format (Comma signifie Virgule)
Enfin ce n'est qu'une question de settings...
Cette macro placée dans un module standard d'un classeur "Interface" récupérera les colonnes "A" à "D" d'un fichier TXT ouvert et étant le classeur actif, Elle en fera une copie avec le même nom mais avec l'extension CSV, ceci dans le même répertoire que le fichier TXT.
Il ne devrait y avoir aucune alerte.
Option Explicit
Sub BuildCSV()
Dim Range As Object, Line As Object
Dim TheText As String, TheSep As String, TheFullPath As String
Dim L As Integer
Dim C As Byte
TheSep = Chr(44) 'Séparator Comma ","
'TheSep = Chr(59) 'Séparator Semi-Colon ";" '(Mettre Actif si nécessaire)
TheFullPath = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 3) & "csv"
Set Range = ActiveSheet.Range("A1😀" & ActiveSheet.Range("A65536").End(xlUp).Row)
Open TheFullPath For Output As #1
For Each Line In Range.Rows
L = L + 1
TheText = ""
For C = 1 To 4
If C < 4 Then
TheText = TheText & CStr(Cells(L, C).Text) & TheSep
Else
TheText = TheText & CStr(Cells(L, C).Text)
End If
Next
Print #1, TheText
Next
Close
ActiveWorkbook.Close
End Sub
NB pour augenter le nombre de colonne à traiter (exemple de A à H) faut intervenir comme ceci :
Option Explicit
Sub BuildCSV()
Dim Range As Object, Line As Object
Dim TheText As String, TheSep As String, TheFullPath As String
Dim TheFile As Variant
Dim L As Integer
Dim C As Byte
TheSep = Chr(44) 'Séparator Comma ","
'TheSep = Chr(59) 'Séparator Semi-Colon ";"
TheFullPath = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 3) & "csv"
Set Range = ActiveSheet.Range("A1:H" & ActiveSheet.Range("A65536").End(xlUp).Row)
Open TheFullPath For Output As #1
For Each Line In Range.Rows
L = L + 1
TheText = ""
For C = 1 To 8
If C < 8 Then
TheText = TheText & CStr(Cells(L, C).Text) & TheSep
Else
TheText = TheText & CStr(Cells(L, C).Text)
End If
Next
Print #1, TheText
Next
Close
ActiveWorkbook.Close 0
End Sub
Voilà je pense que ce sera une base de départ, à noter que je ne m'occupe pas du TXT d'orgine et qu'il est fermé sans être sauvé.
Bonne Fin de Journée
@+Thierry