A ta place je commencerais par le plus simple : Tu ouvres le csv avec la ligne citée. Dès lors, tu as une feuille de calculs Excel avec tes données.
1 - Sont-elles correctement affichées (une donnée par cellule) ?
2 - Que veux-tu en faire ?
A+
Version imprimable
A ta place je commencerais par le plus simple : Tu ouvres le csv avec la ligne citée. Dès lors, tu as une feuille de calculs Excel avec tes données.
1 - Sont-elles correctement affichées (une donnée par cellule) ?
2 - Que veux-tu en faire ?
A+
bahh tu ne te souviens pas de ce dont on a discuté? 8O
Bon ben non pour l'instant ca n'ouvre pas correctement le .csv
et ce que je veux en faire? : prendre les donnees du csv et les copier dans le .xls dans lequel j'ai ma macro...
Donc c'est pour ca que l'ouvrir me semble inutile..
Ya ptetre moyen d'extraire des donnees d'un .txt depuis excel sans l'ouvrir non? :?
Jour bon
Il serait intéressant d'avoir un échantillon de ton fichier CSV
Sinon peut-être en adaptant le code çi-dessous pour extraire les données intéressantes ( enregistrer le classeur une 1ere fois avant de lancer Tst )
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 Option Explicit Sub Tst() Dim Fichier As Variant ChDir ThisWorkbook.Path Fichier = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv") If Fichier <> False Then Lire Fichier End Sub Private Sub Lire(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 Separateur = ";" Cells.Clear Application.ScreenUpdating = False Close NumFichier = FreeFile iRow = 0 Open NomFichier For Input As #NumFichier Do While Not EOF(NumFichier) iCol = 1: iRow = iRow + 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 i Loop Close #NumFichier Application.ScreenUpdating = True End Sub
+1Citation:
Envoyé par kiki
Seul le nombre de Lignes peu varier, le nombre et l'emplacement des colonnes reste le meme... enfin je sais bein que dans mon csv il n'y a pas de colonne, mais vous comprendrez ;)
j'ai rajouté .txt a la fin du nom de fichier sinon il ne passait pas ici ;)
Tes séparateurs sont des points-virgules, c'est bien un csv.
Et pour ouvrir un csv, tu as ça ici, le troisième exemple
J'ai simplement ajouté le séparateur décimal.Code:
1
2
3 Name "D:\xls\Fichier.csv" As "D:\xls\Fichier.txt" 'renomme le csv en txt Workbooks.OpenText Filename:="D:\xls\Fichier.txt", Origin:=xlWindows, _ StartRow:=1, DataType:=xlDelimited, Semicolon:=True, DecimalSeparator:="."
Mais pour faire ça, parts du csv original, pas du txt. Tu n'auras pas à le renommer, le code fais ça pour toi (tu adaptes simplement le chemin et le nom des fichiers)
Ben oui ca tu m'as deja montré... tu te souviens pas? 8O c'est dans la premiere partie du post non? et pourquoi convertir en .txt?
Parmi ces données qu'elles sont celles à récupérer ?
Ben toutes.. en deux fois.. vu qu'il y a deux parties ( double ";" a un moment ou triple peut etre meme...)
Que ce soit ma méthode ou celle de Ouskel'n'or je pense que le résultat sera le même, une réponse basique à ton problème via Lecture.xls
Pourquoi ? Parce que ça fonctionne. J'ai ajouté le séparateur décimal afin que tes nombres soit reconnus pour ce qu'ils sont.
As-tu au moins essayé le dernier code que je t'ai passé ?
Si ça ne fonctionne pas, alors on passera au code de kiki qui lui aussi devrait fonctionner. Mais si ça fonctionne avec mes deux lignes de code, c'est tout de même plus simple et surtout plus rapide.
En désespoir de cause, et si le code de kiki ne te va toujours pas, alors je te propose le même, la fonction en moins.
Ces différentes versions existent toutes sur le forum VBA-Excel, il en existe encore une autre mais là, je te laisserai chercher sur le forum.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Sub FichierTxtCopieSurFeuilleDeCalculs() Dim Ligne As String, NoLigne As Long, NoCol As Integer Dim Tableau, Chemin, nomFich Chemin = "C:\" nomFich = "MonFichierAmoi.csv" 'ou .txt i = 0 Open Chemin & nomFich For Input As #1 While Not EOF(1) Input #1, Ligne Tableau = Split(Ligne, ";") ' si le séparateur est un ";", sinon tu changes NoLigne = NoLigne + 1 For NoCol = 0 To UBound(Tableau) Cells(NoLigne, NoCol + 1).Value = Tableau(NoCol) Next Wend Close #1 End Sub
ok merci a vous deux je vous tiens au courant... effectivement j'avais testé ton code mais sand doute avec une erreur ou je ne sais quoi... du coup ben ca marchait pas... ca ne convertissait pas...
J'avais aussi testé le code que tu m'avais passé mais je t'ai dit que l'adapter était un peu compliqué pour moi et je t'ai expliqué pourquoi..
Pourquoi veux tu convertir le csv en .txt?
Pour l'instant j'ai essayé le code de Kiki qui fonctionne bien sauf les 4 dernieres lignes qui bug mais c'es pas genant ca marche quand meme...
Je vous tiens au courant....
Parce qu'ouvert en tant que csv ça ne fonctionne pas (tu l'as testé) et que le même fichier ouvert en txt ne pose pas de problème.Citation:
Envoyé par nanettemontp
Rien ne t'empêche de le renommer .csv une fois refermé. Et c'est plus simple que de lire ton fichier donnée par donnée. Imagine un csv de 60000 lignes.
Je t'ai déjà expliqué qu'un csv est un fichier texte. Il n'y a pas de différence de structure.
Le problème est que VBA ne reconnait pas les points-virgules (semicolon) qui n'existe pas en Anglais, sauf si tu lui précises le séparateur. Les csv ne le permettent pas dans le code mais les txt, si ! Ceci tout au moins jusqu'à la version 2003. Après, je n'en sais rien.
Voilà pour l'explication ;)
Une amélioration de Lecture2, à adapter
Hello kiki, ton code est parfait, j'en ai d'ailleurs utilisé un semblable avant de m'acharner à trouver une solution plus simple, mais avoue que mes deux lignes de code sont tout de même plus simples. Pour la peine je vais ajouter quelques lignes.
Si tu penses que l'exécution prend plus de temps, alors j'irai me mettre la tête dans le sable ;)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 Dim NomFichPrincipal as string NomFichPrincipal = ThisWorkbook.name 'Le fichier contenant la macro 'renomme le csv en txt Name "D:\xls\Fichier.csv" As "D:\xls\Fichier.txt" Workbooks.OpenText Filename:="D:\xls\Fichier.txt", Origin:=xlWindows, _ StartRow:=1, DataType:=xlDelimited, Semicolon:=True, DecimalSeparator:="." DoEvents 'le classeur actif est ton txt/csv 'copie la feuille du txt dans le fichier principal en dernière position Sheets(1).Copy After:=Workbooks(NomFichPrincipal).Sheets(Workbooks(NomFichPrincipal).sheets.count) DoEvents Workbooks("Fichier.txt").close false 'ferme le fichier texte DoEvents Name "D:\xls\Fichier.txt" As "D:\xls\Fichier.csv" 'renomme le txt en csv
Affirmataf pour la rapidité tu as raison ( je n'ai pas fait de benchmark ) mais dans lecture3.zip j'avais plutôt amélioré la partie de gestion des graphes, après c'est Nanette qui choisira.
ey vous battez pas... je suis une femme, je sais que les hommes doivent se battre pour nous mais bon :lol: :lol: :lol:
bon blague a part, merci pour tout ... c'est lundi matin alors je vais regarder ca.
merci beaucoup messieurs!!
Bon ben je m'y met aujourd'hui, je vous tiens au courant, je vais essayer de comprendre... :?
Bon ben j'essaye de jongler avec ce que vous m'avez donné... ya un peu de ce que je veux dans chacun de vos codes... mais a mettre ensemble j'y arrive pas....
:cry:
Je crois bien que je ne comprend rien... :oops:
Ah oui pke ce que tu fais ouskeln'or ne me convient pas tout a fait car tu copie la feuille dans le .xls, et ca je ne veux pas, pke je vais traiter des centaines de fichier sans doute....
Et ce que fait kiki? ca m'enerve parceque je ne comprend pas ce qu'il fait :? donc... pour mixer le tout c'est un peu compliqué...
Et pour le code passé en pv ouskeln'or mon soucis c'est qu'il faut a chaque fois un chemin de fichier, alors que mois en ouverture automatique je n'ai qu'un nom de fichier...
bref.... je suis en train de m'énerver sur tout ca...
:cry:
Comment veux-tu ouvrir le fichier si tu n'as pas le chemin ?
Explique mieux ce que tu veux. Si tes fichiers sont ouvert en "automatique", comment-sont-il ouverts ... en automatique ?Citation:
alors que mois en ouverture automatique je n'ai qu'un nom de fichier...
A mon tour de ne plus comprendre à ton problème.
Peux-tu être précise sur ce que tu as et sur ce tu veux obtenir.
A+ (sans garantie)