Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Récupération des infos d'un fichier csv

7 réponses
Avatar
jeanluc.laurent
Bonjour le groupe,

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

7 réponses

Avatar
jeanluc.laurent
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"
Avatar
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


MichD
--------------------------------------------------------------
Avatar
MichD
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

'Modifier Séparateur d'éléments du fichier
AncSep = "."
NouSep = ";"

'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"
Avatar
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 m’inté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
Avatar
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.

MichD
--------------------------------------------------------------
Avatar
jeanluc.laurent
Le vendredi 28 décembre 2012 15:41:51 UTC+1, MichD a écrit :
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.



MichD

--------------------------------------------------------------



Salut Denis et tous les autres,
Pour être plus clair, voir : http://fr.pastebin.ca/2297415
Avatar
jeanluc.laurent
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