Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macro enregistrement csv

  • Initiateur de la discussion Initiateur de la discussion Tinet
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

T

Tinet

Guest
Bonjour à tous ceux qui liront.
Quel serait le code pour réaliser une macro associée à un bouton de barre d’outil suivants les éléments ci-après :
Origine le fichier est un .TXT avec des séparateurs ouvert sous Excel en convertissant celui-ci pour formater les colonnes.
Après avoir traiter le fichier (toujours sous sa forme TXT), macro pour : enregistrer sous format CSV avec le même nom de fichier (il faut récupérer ce nom) dans un dossier C:\Temp et en validant les boites de dialogues qui s’ouvrent (existence fichier : remplacement : oui), (information non compatible en csv : conserver ce format : oui), et fermer ce fichier par «fermer » en répondant Non à enregistrer les modifs de a.csv.
J’ai réalisé cette macro, mais elle s’arrête aux boites de dialogues. J'ai déjà visité le forum, mais il me semble pas avoir la réponse totale.
Merci d'avance.
 
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
 
Merci pour aide si rapide.

Par contre, j'ai un problème de syntaxe et donc de compilation dans cette écriture:

TheFullPath = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name,
Len(ActiveWorkbook.Name) - 3) & "csv"

Vois-tu pourquoi ?
@ +
 
Bonsoir Tinet, le Forum

Ne t'inquiète pas je n'ai pas cherché je viens de lire tes deux posts en même temps !

Oui il faut faire attention en copiant les code depuis le client mail, il vaut mieux les copier dans le Forum, là il n'y a pas de Vbcrlf intempestif !

BOn alors super si tout est OK !

Bonne Nuit
@+Thierry
 
Salut Thierry.

J'ai encore un petit problème sur l'enregistrement en csv, je me retrouve qu'à chaque fin de ligne j'ai mon séparateur qui se rajoute. (le nombre de colonne étant inférieur au nombre de boucle).
Ne connaissant pas à l'ouverture de mon fichier .txt le nombre de colonne qui s'afficheront, il faudrait que la macro test la première ligne pour connaitre le nombre de colonne et faire ainsi arréter la boucle avant la dernière colonne.
J'ai regardé les différents moyens de tester une cellule vide, mais étant vraiment novice, je n'y arrive pas.
Peut-tu me dépanner sur ce point en ajoutant ce qu'il faut à mon code actuel (ci-joint).
@+
 

Pièces jointes

Salut Tinet, le Forum

Je n'ai pas le droit de télécharger quoique ce soit depuis la Station où je me trouve en ce moment...

Cependant pour trouver la dernière colonne remplie on pourrait faire un truc dans ce genre (à integrer en début de Macro) :

Dim TheCol As Byte
TheCol = ActiveSheet.Range("IV1").End(xlToLeft).Column

Puis dans mon code si dessus changer :
For C = 1 To 8
If C < 8 Then

Par :
For C = 1 To TheCol
If C < TheCol Then

Ce devrait passer, pour autant que la Ligne 1 soit représentative de la forme globale du tableau et du nombre de Colonnes, puisque c'est elle qui va générer "TheCol" ...

Bon Après Midi
@+Thierry
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
20
Affichages
3 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…