ADO - import CSV

Bonjour,

Je m'en remet à vos compétences après moultes recherches infructueuses.

Je dispose d'un fichier me permettant (dans le meilleur des mondes) d'importer le contenu d'un fichier csv délimité par des ; selon plusieurs critères.

Le fichier import_csv.xlsm pour récupérer les données

Le fichier ventes.csv avec les données brutes

Un macro pour lire et importer le contenu :

Sub import()

    Dim Conn As ADODB.Connection
    Dim Rst As ADODB.Recordset
    Dim Fichier As String
    Dim Chemin As String
    Dim rSQL As String

    Chemin = "C:\recap\"
    Fichier = "ventes"

    'Mise en place de la connexion avec le fichier
    Set Conn = New ADODB.Connection
    Conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Chemin & ";Extended Properties=""text;HDR=NO;FMT=Delimited(;)"""
    Conn.Open

rSQL = "SELECT LIEU FROM [" & Fichier & ".csv] WHERE LIEU = DIJON "
Set Rst = New ADODB.Recordset

Set Rst = New ADODB.Recordset
        With Rst
            .ActiveConnection = Conn
            .Open rSQL
        End With

'Récupération des enregistrements
Worksheets("Import").Range("A1").CopyFromRecordset Rst

Rst.Close
    Conn.Close

End Sub

Impossible de faire fonctionner la requête rSQL

En effet, je souhaite uniquement récupérer les données lorsque le lieu est Dijon et le volume supérieur à 0

Pouvez-vous m'aider svp ?

Par avance, merci !!!

39ventes.zip (17.63 Ko)
32import-csv.xlsm (17.91 Ko)

Hello !

Essaie plutôt ceci, après avoir enregistré ventes sur ton dd :

Option Explicit
Sub lecture()

Dim Fichiercsv, icsv, jcsv, Contenucsv, Tablecsv, Ncsv

    Fichiercsv = Application.GetOpenFilename("Fichiers csv, *.csv")
    If Fichiercsv = False Then Exit Sub

    Ncsv = FreeFile
    Open Fichiercsv For Input As #Ncsv

    icsv = 0
    Do While Not EOF(1)
        Line Input #Ncsv, Contenucsv

        If icsv = 0 Or (Contenucsv Like "*DIJON*" And Not (Contenucsv Like "*;0")) Then

            icsv = icsv + 1
            Tablecsv = Split(Contenucsv, ";")
            For jcsv = 0 To UBound(Tablecsv)
                Cells(icsv, jcsv + 1).Value = Replace(Tablecsv(jcsv), ",", ".")
            Next jcsv

        End If

    Loop

    Close #Ncsv

End Sub

Bonjour Liver le forum

ta demande en retour traiter pas tout a fait comme toi mais qui est opérationnelle

tu décompresses le dossier sur ton bureau tu ouvres "import_csv.xlsm" et tu cliques le bouton et tu me redis si c'est ce que tu attendais

a+

Papou

134liver-et-las-v1.zip (38.86 Ko)

Steelson et Paritec, merci à vous deux !

J'ai donc testé les deux méthodes qui fonctionne parfaitement.

L'ajout d'un timer est fun

Je vais tenter une mise en pratique avec vos deux codes respectifs en tentant de garder seulement certaines colonnes.

Merci encore

Re Bonjour liver et las le forum

bah oui si tu nous avais dit ce que tu voulais on aurait fait, mais tu parlais de récupérer les lignes avec dijon donc on a fait les lignes avec Dijon !!!! si maintenant il faut que certaines colonnes si tu le dis on fera

a+

Papou

Re et merci encore pour ton aide

Pour ne garder que certaines colonnes, j'ai opté pour un

ThisWorkbook.Sheets("Import").Range("a:b,d:g,i:j").Delete

Le résultat est plutot concluant, à voir sur des fichiers très volumineux ce que cela donne.

Toutefois, je me permet (sans vouloir abuser de ta générosité) de te demander une explication sur le code utilisé

  aa = wbks.ActiveSheet.Range("A1:A" & wbks.ActiveSheet.Range("A" & Rows.Count).End(3).Row)

Je ne comprends pas pour il y a (3) après .End ?

ReDim bb(1 To 6, 1 To y)

6 correspond au nombre de colonne ?

Et enfin, je n'arrive pas à faire apparaitre la première ligne (les titres) malgré de nombreuses tentatives

Merci encore pour ton aide (et votre aide à tous) que j'apprécie vivement !!

Re bonjour Liver et Las le forum

Je ne comprends pas pour il y a (3) après .End ?

c'est trés simple le 3 signifie le sens de la recherche et le 3 c'est xlup

donc 3 ou xlup c'est pareil

pour ReDim bb(1 To 6, 1 To y)

le 6 c'est le nombre de ligne du tableau qui me sert à récupérer les données, Pourquoi? car à chaque condition exacte je redimensionne mon tableau de récupération de 1 colonne.

le pourquoi est très simple un tableau tu ne peux pas le redimensionner en nombre de ligne mais en nombre de colonnes, et à la fin je transpose le tableau pour le coller dans la feuille

voilà tu sais tout

a+

Papou

Rechercher des sujets similaires à "ado import csv"