Extraire que certaines données d'un fichier csv - VB/VBA/VBS - Programmation
Marsh Posté le 24-04-2009 à 11:31:41
Dans le programme, la variable, qui s'appelle iCol, contient le numéro de la colonne en cours de traitement. Pour ne prendre que les quatre premières colonnes, il suffit de tester si cette variable devient supérieure à quatre. Voici la nouvelle version du programme qui ne contient qu'une seule ligne de plus que l'ancienne :
Option Explicit |
Marsh Posté le 24-04-2009 à 11:37:33
Le problème est que je ne veux pas extraire uniquement les 4 premières colonnes mais quelques colonnes du genre A,B,C, AG,AL,AR.
Et je voudrais appliquer ce code à un autre fichier ou les colonnes ne seraient encore pas les mêmes.
Ce que je n'arrive pas à faire est justement de pouvoir piocher chercher certaine colonne.
Marsh Posté le 24-04-2009 à 12:41:42
Tout d'abord, il faudrait faire une petite conversion manuelle de la lettre de la colonne en un numéro de colonne.
A = 1, B = 2, C = 3, AG = 26 + 7 = 33, AL = 26 + 12 = 38, AR = 26 + 18 = 44.
Puis, il faut changer la partie centrale du code comme ceci :
For i = LBound(Ar) To UBound(Ar) |
(Le trait de soulignement après "= 3" sert à indiquer que la ligne se prolonge sur la ligne d'en dessous)
Marsh Posté le 24-04-2009 à 14:44:16
Super grand merci ça marche presque, j'ai plus qu'à comprendre pourquoi il me récupère pas exactement les colonnes que je lui demande mais je doit plus être très loin
Voila, solution trouvée il fallait commencer à compter de 0, un peu de bidouillage et j'ai trouvé ma solution.
J'aurais bien avancé aujourd'hui merci de l'aide j'ai plus qu'à l'appliquer sur un autre fichier.
Du coup faut que j'adapte le code pour qu'en fonction du nom du fichier choisi ou de l'intitulé de la première colonne il n'extrait pas les mêmes cellules, sa devrait pas être de tout repos mais on va fouiner ça.
Marsh Posté le 05-05-2009 à 11:16:34
Bonjour,
le code à un peu changé depuis le temps mais je n'arrive pas à "coller" les données receuillies à partir du fichier csv sur ma feuille "reception_donnees" située dans un autre fichier (nommé gestion de stock) et pourtant ma fonction s'exécute sans problème.
Si quelqu'un peut me dire comment puis-je récupérer les données que je parcours sa serais bien sympas.
Code :
|
Marsh Posté le 07-05-2009 à 23:04:18
Salut,
le code donné ,à priori , ne lira jamais la 1ere colonne
il faut remplacer i par i+1
sinon si le classeur s'appelle Stocks.xls et est ouvert
|
Marsh Posté le 08-05-2009 à 07:16:06
Bonjour,
n'y aurait-il pas un lien avec:
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
??
j'y précise que "line input" ne peut lire ton csv parce qu'à la génération du fichier, il n'y a que des chr(10) comme délimiteurs au lieu de chr(13)+chr(10) attendu. Par contre la séquence que j'ai placée fonctionne. Si tu veux des précisions pour l'intégrer, n'hésite pas à demander.
Cordialement
Marsh Posté le 11-05-2009 à 09:17:56
J'ai réussi à résoudre mon problème à l'aide des 2 forums merci bien
Marsh Posté le 24-04-2009 à 10:07:38
Bonjour je Forum,
J'ai pu grâce au forum trouver comment extraire des infos d'un fichier csv, ça marche nikel mais sa reste pour moi un vrai charabiat du coup je n'arrive pas à adapter le code afin de n'extraire que certaine colonne.
Mon fichier csv contient en effet une trentaine de colonnes mais j'ai besoin de récupérer que 4 colonnes donc je trouve dommage de perdre du temps a tout récupérer pour ensuite supprimer ou inutiliser les 3/4 des données récupérées surtout que el nombre de ligne peut êtr important.
Je vous montre en effet le code que j'utilise pour être mais données si quelqu'un peut me dire ou et comment l'adapter pour choisir mes colonnes à extraire.
[quote]
kiki29 Posté le 16-07-2007 à 15:22:40
Option Explicit
Sub Csv()
Dim Fichier As Variant
ChDir ThisWorkbook.Path
Fichier = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv" )
If Fichier <> False Then
LireCSV Fichier
End If
End Sub
Private Sub LireCSV(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
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
Merci d'avance ;p