Problème de récupération de valeur dans un fichier csv
fitzjames
Messages postés55Date d'inscriptionmardi 8 juin 2004StatutMembreDernière intervention27 février 2009
-
25 févr. 2009 à 17:58
cnt
Messages postés219Date d'inscriptionlundi 21 novembre 2005StatutMembreDernière intervention20 décembre 2010
-
27 févr. 2009 à 19:42
Bonjour,
J'ai le souci suivant, je souhaiterai récupérer dans mon fichier 1 ligne particulière ex: ligne2.
Je sais pas trop comment m' y prendre ?
Les variables Navigateur, country, Networks et Network sont de type variant.
'=============================================================
'Ouverture fichier
'=============================================================
Public Sub Reseaux(Navigateur, Country, Networks, Network)
'Lecture du fichier
Dim Fichier As String, Chemin As String
Navigateur = ""
Country = ""
Networks = ""
Network = ""
Chemin = "C:\jeux"
Fichier = "Reseau.csv"
' on verifie que le chemin et/ou le fichier specicifie sont bon
If Not Dir(Chemin & Fichier) = "" Then
Fichier = Chemin & Fichier
LireCSV Fichier, Navigateur, Country, Networks, Network
Else
MsgBox "aucun fichier trouvé !", vbExclamation
Exit Sub
End If
End Sub
'===============================================================
' Lecture du fichier
'===============================================================
Private Sub LireCSV(ByVal NomFichier As String, Navigateur, Country, Networks, Network)
Dim Navigator()
Dim Pays()
Dim Reseaux()
Dim Reseau()
Dim Chaine As String
Dim Ar() As String
Dim i As Long
Dim NumFichier As Integer
Dim Separateur As String * 1
cs_loulou69
Messages postés672Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention 2 juin 20161 25 févr. 2009 à 18:22
Bonjour
Si au lieu de passer les parametres sans types (variant) tu les déclaraient au niveaux du module en String cela serait moins lourd pas de recopie à la sortie de LireCSV
"LireCSV" n'aurait qu'un paramétre et "Reseaux" aucun
fitzjames
Messages postés55Date d'inscriptionmardi 8 juin 2004StatutMembreDernière intervention27 février 20091 26 févr. 2009 à 16:48
Jack : Bien sûr, ta deuxième ligne se retrouvera dans
a(1)
puisque les tableaux commencent à l'index 0 par défaut
Mais pour a(1), je ne comprend pas trop bien comment ça marche ?
je veux juste récupérer la ligne 2
Mon tableau se présente comme cela :
IE; ES; II; IO
IE; ES; II; PO
FF;PT;YY;IO
cnt
Messages postés219Date d'inscriptionlundi 21 novembre 2005StatutMembreDernière intervention20 décembre 20101 26 févr. 2009 à 17:16
Salut
Et pourquoi pas ça seulement:
Open NomFichier For Input As #NumFichier
Line Input #NumFichier, Chaine ' 1iere ligne
Line Input #NumFichier, Chaine ' 2ieme ligne
Close #NumFichier
Ar = Split(Chaine, Separateur)
Navigateur = Ar(0)
Country = Ar(1)
Networks = Ar(2)
Network = Ar(2)
cnt
Messages postés219Date d'inscriptionlundi 21 novembre 2005StatutMembreDernière intervention20 décembre 20101 27 févr. 2009 à 12:16
Bonjour
S'il s'agit de récupérer une ligne particulière du fichier "CSV", il faut lire séquentiellement jusqu'à cette ligne et ça en bouclant sur le nombre de lignes représentant le numéro de la ligne voulue.
Private Sub LireCSV(ByVal NomFichier As String, Navigateur, Country, Networks, Network)
Dim i As Long
Open NomFichier For Input As #NumFichier
For i = 1 To NumLigne
Line Input #NumFichier, Chaine
Next i
Close #NumFichier
Ar = Split(Chaine, Separateur)
Navigateur = Ar(0)
Country = Ar(1)
Networks = Ar(2)
Network = Ar(2)
End Sub
fitzjames
Messages postés55Date d'inscriptionmardi 8 juin 2004StatutMembreDernière intervention27 février 20091 27 févr. 2009 à 14:39
bonjour,
J'ai le message d'erreur suivant :
[javascript:hhobj_3.Click() tableau] doit être affectée individuellement. Causes et solutions de cette erreur :
<li class= "LB1">Vous avez essayé par inadvertance d'affecter une valeur à une [javascript:hhobj_4.Click() variable] de tableau sans spécifier l'élément auquel la valeur devait être affectée.
Pour affecter une valeur à un élément de tableau, vous devez spécifier l'élément dans un indice. Par exemple, si
MyArray
est un tableau d'entiers, l'[javascript:hhobj_5.Click() expression]
MyArray = 5
est incorrecte, alors que l'expression qui suit est valide :
MyArray(UBound(MyArray)) = 5
</li><li class="LB1">Vous avez essayé d'affecter la totalité d'un tableau à un autre tableau. Si, par exemple,
Arr1
et
Arr2
sont deux tableaux différents, les deux affectations suivantes sont toutes deux incorrectes :
Pour affecter un tableau à un autre, assurez-vous que le tableau à gauche de l'affectation est redimensionnable et que les types de tableaux sont compatibles.
Note Vous pouvez placer la totalité d'un tableau dans un Variant et obtenir ainsi une variable de type variant contenant l'ensemble du tableau :
Dim MyArr As Variant
MyVar = Arr2()
Vous pouvez ensuite référencer les éléments du tableau dans la variable de type variant avec une notation d'indice identique à celle d'un tableau ordinaire, par exemple :
MyVar(3) = MyVar(1) + MyVar(5)
</li>Pour plus d'informations, sélectionnez l'élément en question et appuyez sur F1 (sous Windows) ou sur AIDE (sur Macintosh).
il me faudrai une fonctionalité comme la fonction cells,
Do While Not EOF(NumFichier)
iCol = 1
iRow = 2
Line Input #NumFichier, Chaine
Ar = Split(Chaine, Separateur)
For i = LBound(Ar) To UBound(Ar)
Cells(iRow, iCol) = Ar(i)
iCol = iCol + 1
Next i
Loop
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 27 févr. 2009 à 19:02
Re
Dans ton code initial, tu fais une boucle de lecture, ligne par ligne, de ton fichier.
Chaque ligne est découpée et stockée dans des variables tableau dont l'index s'incrémente à chaque ligne.
Les éléments correspondant à la ligne 2 se trouvent donc dans chacune des variables dont l'index est 1.
Dans ma première réponse, je t'ai donné un exemple de passage de tableau en paramètre de Sub.
Inspire t-en pour corriger ton code, le type Variant ne règle pas toujours tout, soyons précis, cela évite les surprises :
Par exemple, tu fais un
Navigateur = ""
VB pense donc que ta variable est une chaine.
Et plus loin, tu lui colles un tableau
Il n'est pas trop mal luné, il fera la conversion, mais attends toi un jour à ce que cela ne marche pas.
Si tu dois recevoir un tableau, définis tes variables en tableau
Apprends à les manipuler avec les instructions Dim, ReDim [Preserve] ...
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cnt
Messages postés219Date d'inscriptionlundi 21 novembre 2005StatutMembreDernière intervention20 décembre 20101 27 févr. 2009 à 19:42
Bonsoir
Pourrais tu préciser ton attente. Tu parles de 2ième ligne de quoi?
S'agit-il du fichier "xxxx.CSV" ou du classeur dans lequel les données du dit fichier ont été copiées?
Dans ton dernier Post, il est question de d'écriture dans une feuille Excel, alors je te propose cette solution:
Open NomFichier For Input As #NumFichier
iRow = 2 ' référence ligne de début
Do Until EOF(NumFichier)
Line Input #NumFichier, Chaine
Ar = Split(Chaine, Separateur)
ReDim Preserve Navigator(i)
Navigator(i) = Ar(0)
ReDim Preserve Pays(i)
Pays(i) = Ar(1)
ReDim Preserve Reseaux(i)
Reseaux(i) = Ar(2)
ReDim Preserve Reseau(i)
Reseau(i) = Ar(2)
i = i + 1
iCol = 1 ' référence colonne de début
For i = LBound(Ar) To UBound(Ar)
' Ecriture dans la feuille active du classeur
ActiveSheet.Cells(iRow, iCol).Value = Ar(i)
iCol = iCol + 1 ' incrément sur les colonnes
Next i
iRow = iRow + 1 ' incrément sur les lignes
Loop
Close #NumFichier