Conversion depuis .csv en prenant compte des textes - VB/VBA/VBS - Programmation
Marsh Posté le 05-10-2010 à 17:42:59
Salut, passe par l'enregistreur de macro et
Fichier Ouvrir etc .....
ce qui te donnera qqch comme
|
La macro que tu utilises est utile quand on veut par exemple modifier des données à la volée lors d'un import
Voire même tout bêtement
|
Marsh Posté le 06-10-2010 à 11:31:56
Pourquoi toujours vouloir faire du code quand Excel le permet en meme pas 1mn...?
Sous excel 2007 il y a la fonction "Convertir" de l'onglet Données (Sous 2003 Menu Données, Convertir)
Tu sélectionnes ta cellule où tu as :
toto1;toto2;"toto;3";toto4
Onglet ou menu Données ; Convertir ; Délimité-Suivant ; Séparateur : point virgule - identificateur de texte : " - Suivant ; Destination : tu selectionnes ou tu veux le resultat - Terminer
On se retrouve bien avec :
toto1 toto2 toto;3 toto4
Et si vraiment tu veux coder :
Code :
|
Marsh Posté le 06-10-2010 à 11:48:43
@ Kiki29: J'ai du louper un truc, mais quand on ouvre de cette manière, ça ouvre un nouveau fichier excel non ?
Le but de la manoeuvre est de lire le fichier csv, sans le modifier d'aucune manière
@dje69r : Je dois intégrer la sub de lecture du fichier dans une macro auto_open
crois-moi, si je pouvais, j'utiliserai l'enregistreur de macro tout le temps
Marsh Posté le 07-10-2010 à 10:14:04
Non mais c'est pareil. Tu ouvres ton fichier, ok, et tu n'as qu'une ligne de code pour transposer tes chaines.
J'avais pas vu la réponse de Kiki29 en fait, mais c'est exactement la meme chose.
En fait ca ouvre ton fichier CSV et ca te le traite pour avoir le résultat que tu demandes.
Ensuite soit tu l'enregistres, et a ce moment tu perds l'original, soit tu l'enregistres sous un autre nom et tu as un nouveau fichier Excel formaté selon ta demande.
Marsh Posté le 07-10-2010 à 11:29:48
Justement, j'ai besoin de faire l'opération de lecture et de traitement sur un fichier qui existe déjà, donc il n'est pas question d'en rouvrir un autre puis de le sauvegarder quelque part ...
Je me suis sans doute pas exprimé correctement dans le premier post, je corrige !
Marsh Posté le 19-10-2010 à 20:06:29
tingslayer
il me semble que j'ai du traiter un fichier csv aussi (j'ai pas le script ici).
Ma démarche en VBA était :
- ouvrir un fichier toto.csv dans excel en lecture seul => chaque cellule de la feuille A du classeur toto.csv contient donc les bonnes élémentq (toto1/toto2/toto;3/toto4 )
- récuperer les info cellules qui m'intéressent de la feuille A
- fermer le classeur toto.csv => le contenu toto.csv ne sera jamais changé
Marsh Posté le 05-10-2010 à 15:44:52
Bonjour à tous,
J'ai un petit soucis de VBA avec lequel je me prend la tête depuis tout à l'heure, alors que la solution pourrait être évidente .. (comme d'hab )
le voilà le problème :
Dans un fichier excel existant, je dois récupérer des données depuis un fichier .csv placé ailleurs dont le séparateur utilisé est le ;
sauf qu'il existe des données textes qui contiennent également un ;
une ligne complète pourrait par exemple être :
toto1;toto2;"toto;3";toto4
il faudrait que le résultat donne :
toto1 toto2 toto;3 toto4
Sauf que je ne trouve aucun moyen de faire comprendre au VBA que le ; de "toto;3" fait parti d'un String.
ce que j'obtiens c'est :
toto1 toto2 "toto 3" toto4
On peut sans doute utiliser les guillements comme identificateur de texte, mais je ne vois pas où l'ajouter, voici mon code de lecture du fichier (l'ouverture se passe sans pb):
Sub test(ByVal NomFichier As String)
Dim Chaine As String
Dim Ar() As String
Dim i As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Separateur As String * 1
' Séparateur Point Virgule
Separateur = ";"
Cells.Clear
Application.ScreenUpdating = False
NumFichier = FreeFile
iRow = 1
Open NomFichier For Input As #NumFichier
Do While Not EOF(NumFichier)
iCol = 1
Line Input #NumFichier, Chaine
Ar = Split(Chaine, Separateur)
For i = LBound(Ar) To UBound(Ar)
Cells(iRow, iCol) = Ar(i)
iCol = iCol + 1
Next
iRow = iRow + 1
Loop
Close #NumFichier
Application.ScreenUpdating = True
End Sub
Merci d'avance
Message édité par tingslayer le 07-10-2010 à 11:59:18