J'ai un petit soucis de r=E9cup=E9ration des infos d'un fichier csv que je =
voudrais mettre dans un tableau =E0 deux dimensions en faisant des remplace=
ments
La r=E9cup=E9ration se passe bien, mais je n'arrive pas =E0 cr=E9er le tabl=
eau.
Si vous pouviez m'apporter un peu d'aide, se serait sympa.
Ce que j'ai fait pour l'instant :
Set fs =3D CreateObject("Scripting.FileSystemObject")
Set f =3D fs.OpenTextFile("D:\Documents\faro\My Exports\Exporter SPC 1 =
0.csv", 1)
NbCote =3D 0
Dim ContenuCsv() As Variant
index_table =3D 1
While Not f.AtEndOfStream
ReDim Preserve ContenuCsv(index_table)
Lignelue =3D Split(Replace(Replace(f.readline, ",", "."), "=C3=A9",=
"=E9"), ";")
ContenuCsv(index_table) =3D Lignelue
index_table =3D index_table + 1
NbCote =3D NbCote + 1
Wend
f.Close
MsgBox (UBound(ContenuCsv, 1))
MsgBox (Lignelue(UBound(Lignelue)))
Je pr=E9f=E8re cette solution du replace =E0 celle que Denis m'avais donn=
=E9e sur un post pr=E9c=E9dent : un peu complexe pour ce que j'ai =E0 faire=
alors que je vais supprimer tous les csv en fin de traitement. Mais merci =
=E0 lui quand m=EAme.
Ainsi, je remplace les caract=E8res bidon par les bons et les virgules par =
des points d=E9cimaux
Petit point supplémentaire, lorsque je veux afficher le contenu de Conten uCsv(6), j'ai une erreur "Erreur d'exécution '13': Incompatibilité de t ype"
MichD
Bonjour,
| Je préfère cette solution du replace à celle que Denis *** Tant mieux si tu as trouvé une solution à ton problème! Encore faut-il expliquer clairement son problème et ses attentes...
Dans ton code, essaie cette ligne de code :
ContenuCsv(index_table) = Join(Lignelue, ";")
en lieu et place de : ContenuCsv(index_table) = Lignelue
| Je préfère cette solution du replace à celle que Denis
*** Tant mieux si tu as trouvé une solution à ton problème!
Encore faut-il expliquer clairement son problème et ses
attentes...
Dans ton code, essaie cette ligne de code :
ContenuCsv(index_table) = Join(Lignelue, ";")
en lieu et place de : ContenuCsv(index_table) = Lignelue
| Je préfère cette solution du replace à celle que Denis *** Tant mieux si tu as trouvé une solution à ton problème! Encore faut-il expliquer clairement son problème et ses attentes...
Dans ton code, essaie cette ligne de code :
ContenuCsv(index_table) = Join(Lignelue, ";")
en lieu et place de : ContenuCsv(index_table) = Lignelue
Je te suggère ce type de procédure qui peut traiter rapidement tous les fichiers texte d'un même répertoire et modifier le séparateur d'éléments du fichier texte du point vers le point-virgule.
Dans la procédure suivante, tu dois adapter le type de fichier à traiter Fichier = Dir(Chemin & "*.txt") 'ou .CSV
Selon ce que tu veux modifier dans le fichier texte, tu adaptes cette ligne de code : Temp = Replace(Temp, AncSep, NouSep)
Cette procédure traite le fichier dans son entier plutôt que d'effectuer la lecture ligne par ligne!
'-------------------------------------------- Sub Modifier_Fichiers_Texte_Répertoire_Entier()
Dim Temp As String Dim Chemin As String Dim Fichier As String Dim X As Long Dim AncSep As String, NouSep As String Dim AncEle As String, NouEle As String
'Endroit où sont regroupés les fichiers texte à modifier Chemin = "c:UsersMichDDocuments"
X = FreeFile Fichier = Dir(Chemin & "*.txt") 'ou .CSV
Do While Fichier <> "" Open Fichier For Binary Access Read As #X Temp = String(LOF(X), Chr(0)) Get #X, , Temp Close #X 'Dans cette ordre 'remplace séparateur décimale Temp = Replace(Temp, AncSep, NouSep) Open Fichier For Output As #X Print #X, Temp Close #X Fichier = Dir() Loop End Sub '--------------------------------------------
MichD -------------------------------------------------------------- a écrit dans le message de groupe de discussion :
Petit point supplémentaire, lorsque je veux afficher le contenu de ContenuCsv(6), j'ai une erreur "Erreur d'exécution '13': Incompatibilité de type"
Je te suggère ce type de procédure qui peut traiter rapidement
tous les fichiers texte d'un même répertoire et modifier le
séparateur d'éléments du fichier texte du point vers le point-virgule.
Dans la procédure suivante, tu dois adapter le type de fichier à traiter
Fichier = Dir(Chemin & "*.txt") 'ou .CSV
Selon ce que tu veux modifier dans le fichier texte, tu adaptes cette ligne de code :
Temp = Replace(Temp, AncSep, NouSep)
Cette procédure traite le fichier dans son entier plutôt que d'effectuer
la lecture ligne par ligne!
'--------------------------------------------
Sub Modifier_Fichiers_Texte_Répertoire_Entier()
Dim Temp As String
Dim Chemin As String
Dim Fichier As String
Dim X As Long
Dim AncSep As String, NouSep As String
Dim AncEle As String, NouEle As String
'Endroit où sont regroupés les fichiers texte à modifier
Chemin = "c:UsersMichDDocuments"
X = FreeFile
Fichier = Dir(Chemin & "*.txt") 'ou .CSV
Do While Fichier <> ""
Open Fichier For Binary Access Read As #X
Temp = String(LOF(X), Chr(0))
Get #X, , Temp
Close #X
'Dans cette ordre
'remplace séparateur décimale
Temp = Replace(Temp, AncSep, NouSep)
Open Fichier For Output As #X
Print #X, Temp
Close #X
Fichier = Dir()
Loop
End Sub
'--------------------------------------------
MichD
--------------------------------------------------------------
a écrit dans le message de groupe de discussion : 05016d3b-f41d-4a20-936d-02cfa9227a48@googlegroups.com...
Petit point supplémentaire, lorsque je veux afficher le contenu de ContenuCsv(6), j'ai une erreur "Erreur
d'exécution '13': Incompatibilité de type"
Je te suggère ce type de procédure qui peut traiter rapidement tous les fichiers texte d'un même répertoire et modifier le séparateur d'éléments du fichier texte du point vers le point-virgule.
Dans la procédure suivante, tu dois adapter le type de fichier à traiter Fichier = Dir(Chemin & "*.txt") 'ou .CSV
Selon ce que tu veux modifier dans le fichier texte, tu adaptes cette ligne de code : Temp = Replace(Temp, AncSep, NouSep)
Cette procédure traite le fichier dans son entier plutôt que d'effectuer la lecture ligne par ligne!
'-------------------------------------------- Sub Modifier_Fichiers_Texte_Répertoire_Entier()
Dim Temp As String Dim Chemin As String Dim Fichier As String Dim X As Long Dim AncSep As String, NouSep As String Dim AncEle As String, NouEle As String
'Endroit où sont regroupés les fichiers texte à modifier Chemin = "c:UsersMichDDocuments"
X = FreeFile Fichier = Dir(Chemin & "*.txt") 'ou .CSV
Do While Fichier <> "" Open Fichier For Binary Access Read As #X Temp = String(LOF(X), Chr(0)) Get #X, , Temp Close #X 'Dans cette ordre 'remplace séparateur décimale Temp = Replace(Temp, AncSep, NouSep) Open Fichier For Output As #X Print #X, Temp Close #X Fichier = Dir() Loop End Sub '--------------------------------------------
MichD -------------------------------------------------------------- a écrit dans le message de groupe de discussion :
Petit point supplémentaire, lorsque je veux afficher le contenu de ContenuCsv(6), j'ai une erreur "Erreur d'exécution '13': Incompatibilité de type"
jeanluc.laurent
Le vendredi 28 décembre 2012 14:17:52 UTC+1, MichD a écrit :
Bonjour,
| Je préfère cette solution du replace à celle que Denis
*** Tant mieux si tu as trouvé une solution à ton problème!
Encore faut-il expliquer clairement son problème et ses
attentes...
Tu as raison, ce n'est pas évident de faire une demande avec tous les ten ants et aboutissants :p
Dans ton code, essaie cette ligne de code :
ContenuCsv(index_table) = Join(Lignelue, ";")
en lieu et place de : ContenuCsv(index_table) = Lignelue
Cette solution là ne me convient pas, je voudrais un tableau à deux dim ensions dont la première dimension serait chaque ligne et la deuxième c haque infos de la ligne qui sont séparées par le ';' Voila un des fichiers csv que je veux traiter :
Units: mm;;;;;; Decimal Separator: ,;;;;;;
Feature Name;Property Name;Actual;Nominal;Deviation;Lower Tolerance;Upper T olerance Longueur;LX;410,710;;;-0,050;0,050 Largeur;LY;220,637;;;-0,050;0,050 Position D32 55;LX;53,082;;;-0,050;0,050 Position D32 55;LY;38,245;;;-0,050;0,050 Entraxe;LX;304,189;;;-0,050;0,050 Entraxe;LY;144,050;;;-0,050;0,050 125 gauche;LY;124,973;;;-0,050;0,050 18 gauche;LX;14,856;;;-0,050;0,050 125 droite;LY;121,838;;;-0,050;0,050 18 droite;LX;17,755;;;-0,050;0,050
C'est un export d'un logiciel de contrôle. Je vais laisser de coté les 4 premières lignes qui ne mintéressent pas, et derrière, j'ai besoin d'un tableau de toutes les infos des ligne s suivantes. Par la suite, ces infos seront replacées dans un fichier xls qui est, lui , le rapport final. Lors du contrôle, un fichier csv est créé par pièce contrôlée e t comme j'aurais plusieurs pièces, je vais finir par autant de fichier cs v J'espère que je suis pas trop brouillon dans mon explication :p
Merci encore
Le vendredi 28 décembre 2012 14:17:52 UTC+1, MichD a écrit :
Bonjour,
| Je préfère cette solution du replace à celle que Denis
*** Tant mieux si tu as trouvé une solution à ton problème!
Encore faut-il expliquer clairement son problème et ses
attentes...
Tu as raison, ce n'est pas évident de faire une demande avec tous les ten ants et aboutissants :p
Dans ton code, essaie cette ligne de code :
ContenuCsv(index_table) = Join(Lignelue, ";")
en lieu et place de : ContenuCsv(index_table) = Lignelue
Cette solution là ne me convient pas, je voudrais un tableau à deux dim ensions dont la première dimension serait chaque ligne et la deuxième c haque infos de la ligne qui sont séparées par le ';'
Voila un des fichiers csv que je veux traiter :
Units: mm;;;;;;
Decimal Separator: ,;;;;;;
Feature Name;Property Name;Actual;Nominal;Deviation;Lower Tolerance;Upper T olerance
Longueur;LX;410,710;;;-0,050;0,050
Largeur;LY;220,637;;;-0,050;0,050
Position D32 55;LX;53,082;;;-0,050;0,050
Position D32 55;LY;38,245;;;-0,050;0,050
Entraxe;LX;304,189;;;-0,050;0,050
Entraxe;LY;144,050;;;-0,050;0,050
125 gauche;LY;124,973;;;-0,050;0,050
18 gauche;LX;14,856;;;-0,050;0,050
125 droite;LY;121,838;;;-0,050;0,050
18 droite;LX;17,755;;;-0,050;0,050
C'est un export d'un logiciel de contrôle.
Je vais laisser de coté les 4 premières lignes qui ne mintéressent pas, et derrière, j'ai besoin d'un tableau de toutes les infos des ligne s suivantes.
Par la suite, ces infos seront replacées dans un fichier xls qui est, lui , le rapport final.
Lors du contrôle, un fichier csv est créé par pièce contrôlée e t comme j'aurais plusieurs pièces, je vais finir par autant de fichier cs v
J'espère que je suis pas trop brouillon dans mon explication :p
Le vendredi 28 décembre 2012 14:17:52 UTC+1, MichD a écrit :
Bonjour,
| Je préfère cette solution du replace à celle que Denis
*** Tant mieux si tu as trouvé une solution à ton problème!
Encore faut-il expliquer clairement son problème et ses
attentes...
Tu as raison, ce n'est pas évident de faire une demande avec tous les ten ants et aboutissants :p
Dans ton code, essaie cette ligne de code :
ContenuCsv(index_table) = Join(Lignelue, ";")
en lieu et place de : ContenuCsv(index_table) = Lignelue
Cette solution là ne me convient pas, je voudrais un tableau à deux dim ensions dont la première dimension serait chaque ligne et la deuxième c haque infos de la ligne qui sont séparées par le ';' Voila un des fichiers csv que je veux traiter :
Units: mm;;;;;; Decimal Separator: ,;;;;;;
Feature Name;Property Name;Actual;Nominal;Deviation;Lower Tolerance;Upper T olerance Longueur;LX;410,710;;;-0,050;0,050 Largeur;LY;220,637;;;-0,050;0,050 Position D32 55;LX;53,082;;;-0,050;0,050 Position D32 55;LY;38,245;;;-0,050;0,050 Entraxe;LX;304,189;;;-0,050;0,050 Entraxe;LY;144,050;;;-0,050;0,050 125 gauche;LY;124,973;;;-0,050;0,050 18 gauche;LX;14,856;;;-0,050;0,050 125 droite;LY;121,838;;;-0,050;0,050 18 droite;LX;17,755;;;-0,050;0,050
C'est un export d'un logiciel de contrôle. Je vais laisser de coté les 4 premières lignes qui ne mintéressent pas, et derrière, j'ai besoin d'un tableau de toutes les infos des ligne s suivantes. Par la suite, ces infos seront replacées dans un fichier xls qui est, lui , le rapport final. Lors du contrôle, un fichier csv est créé par pièce contrôlée e t comme j'aurais plusieurs pièces, je vais finir par autant de fichier cs v J'espère que je suis pas trop brouillon dans mon explication :p
Merci encore
MichD
Au lieu de décliner ton besoin à chacune de tes interventions, pourquoi ne pas publier seulement un extrait du fichier à traiter et le résultat que tu veux obtenir!
Tu peux utiliser cette adresse Cjoint.com pour publier ton fichier et tu nous retournes l'adresse obtenue ici.
Au lieu de décliner ton besoin à chacune de tes interventions,
pourquoi ne pas publier seulement un extrait du fichier à traiter
et le résultat que tu veux obtenir!
Tu peux utiliser cette adresse Cjoint.com pour publier ton fichier
et tu nous retournes l'adresse obtenue ici.
Au lieu de décliner ton besoin à chacune de tes interventions, pourquoi ne pas publier seulement un extrait du fichier à traiter et le résultat que tu veux obtenir!
Tu peux utiliser cette adresse Cjoint.com pour publier ton fichier et tu nous retournes l'adresse obtenue ici.
Bon, finalement, j'ai ce que je voulais :D J'ai mis un espion sur la variable ContenuCsv et je me suis aperçu que, e n fait, elle n'était pas un tableau comme je l'attendais ContenuCsv(1, 2) mais un tableau différent ContenuCsv(1)(2). Au final je peux gérer ce tableau comme je veux.
Merci à tous ceux qui se sont creusé la tête pour moi
Bon, finalement, j'ai ce que je voulais :D
J'ai mis un espion sur la variable ContenuCsv et je me suis aperçu que, e n fait, elle n'était pas un tableau comme je l'attendais ContenuCsv(1, 2) mais un tableau différent ContenuCsv(1)(2).
Au final je peux gérer ce tableau comme je veux.
Merci à tous ceux qui se sont creusé la tête pour moi
Bon, finalement, j'ai ce que je voulais :D J'ai mis un espion sur la variable ContenuCsv et je me suis aperçu que, e n fait, elle n'était pas un tableau comme je l'attendais ContenuCsv(1, 2) mais un tableau différent ContenuCsv(1)(2). Au final je peux gérer ce tableau comme je veux.
Merci à tous ceux qui se sont creusé la tête pour moi