IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] SQL - ADODB avec fichier CSV


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Points : 156
    Points
    156
    Par défaut [VBA-E] SQL - ADODB avec fichier CSV
    Bonjour à tous,

    J'ai écrit ce code (qui fonctionne) qui permet d'utiliser un fichier Excel comme base de données --> base.xls contenant 1 feuille nommée liste avec 3 colonnes : Reference, Designation, Prix

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Sub test1()
     
        Dim Conn As ADODB.Connection
        Dim rsT As ADODB.Recordset
        Dim Fichier As String, Direction As String, rSQL As String
     
        Direction = ThisWorkbook.Path
        Fichier = "base.xls"
     
     
        'Mise en place de la connexion avec le fichier
        Set Conn = New ADODB.Connection
            With Conn
                .Provider = "Microsoft.Jet.OLEDB.4.0"
                .ConnectionString = "Data Source=" & Direction & "\" & Fichier & _
                ";Extended Properties=Excel 8.0;"
                .Open
            End With
     
     
     
        Réf_Recherchée = InputBox("Saisissez une réf.")
     
        'Déclaration de la Recherche au format SQL
        rSQL = "SELECT * FROM [Liste$] WHERE [Reference] LIKE '" & Réf_Recherchée & "'"
     
     
        'Exécution de la Recherche SQL
        Set rsT = New ADODB.Recordset
            With rsT
                .ActiveConnection = Conn
                .Open rSQL, , adOpenKeyset, adLockOptimistic, adCmdTableDirect
            End With
     
        Nb_résultats = rsT.RecordCount
     
        'Récupération des enregistrements
        For i = 0 To rsT.RecordCount - 1
            MsgBox rsT.Fields(0).Value & " : " & vbCrLf & rsT.Fields(1).Value & vbCrLf & "Prix : " & rsT.Fields(2).Value & " €"
     
             rsT.MoveNext
        Next i
     
     
     
        'Fermeture de la connexion avec la table
        rsT.Close
        Conn.Close
     
    End sub

    Comment adapté ce code pour une base de données qui serait au format csv avec comme séparateur le point virgule ?

    Ou alors existe une autre solution ?

    Merci

    A+

    Dams'

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Points : 156
    Points
    156
    Par défaut
    en fouillant, j'ai trouvé une réponse, mais qui ne fonctionne pas !!

    A l'aide svp !


    Qu'est ce qui cloche dans ce code ?

    Voici le début du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        Dim Conn As ADODB.Connection
        Dim rsT As ADODB.Recordset
        Dim Fichier As String, Direction As String, rSQL As String
     
        Direction = ThisWorkbook.Path
        Fichier = "base.txt"
        Lien = Direction & "\" & Fichier
     
     
        'Mise en place de la connexion avec le fichier
        Set Conn = New ADODB.Connection
            With Conn
                .Provider = "Microsoft.Jet.OLEDB.4.0"
                .ConnectionString = "Data Source=" & Lien & ";Extended Properties='text;FMT=Delimited'"
                .Open
            End With

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Points : 156
    Points
    156
    Par défaut
    Non, ce n'est pas cela...

    mais je viens de trouver

    En fait, contrairement avec un fichier excel ou access utilisés comme base, dans "ConnectionString=" il faut uniquement spécifier le chemin du dossier, et pas le nom du fichier.

    Cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Sub test_sql()
     
        Dim Conn As ADODB.Connection
        Dim rsT As ADODB.Recordset
        Dim Fichier As String, Direction As String, rSQL As String
     
        Direction = ThisWorkbook.Path
        Fichier = "base.txt"
     
     
        'Mise en place de la connexion avec le fichier
        Set Conn = New ADODB.Connection
            With Conn
                .Provider = "Microsoft.Jet.OLEDB.4.0"
                .ConnectionString = "Data Source=" & Direction & ";Extended Properties='text;HDR=YES;FMT=Delimited'"
                .Open
            End With
     
     
     
        Réf_Recherchée = InputBox("Saisissez une réf :")
     
        'Déclaration de la Recherche au format SQL (% remplace * dans la recherche)
        rSQL = "SELECT * FROM [" & Fichier & "] WHERE [Ref] LIKE '" & Réf_Recherchée & "'"
     
     
        'Exécution de la Recherche SQL
        Set rsT = New ADODB.Recordset
            With rsT
                .ActiveConnection = Conn
                .Open rSQL, , adOpenKeyset, adLockOptimistic, adCmdTableDirect
            End With
     
     
        Nb_résultats = rsT.RecordCount
     
     
        'Récupération des enregistrements
        For i = 0 To rsT.RecordCount - 1
     
            '...dans une msgbox
            MsgBox rsT.Fields(0).Value & " : " & vbCrLf & rsT.Fields(1).Value & vbCrLf & "Prix : " & rsT.Fields(2).Value & " €"
     
     
             'ou ...dans un userform
             'UserForm4.ListBox1.AddItem (rsT.Fields(0).Value & " : " & rsT.Fields(2).Value)
     
     
             rsT.MoveNext
        Next i
     
     
     
     
        'Fermeture de la connexion avec la table
        rsT.Close
        Conn.Close
     
     
    End Sub
    et voilà...
    mais bon j'ai galèré pour trouver !
    merci
    A+
    Dams'

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Points : 156
    Points
    156
    Par défaut
    Bonjour,

    Encore une question svp.

    J'ai des fichiers textes qui sont générés automatiquement, mais qui ne portent pas forcément l'extension .txt

    Du coup cela ne fonctionne plus si je fais : Fichier = "base"


    Comment faire ?

    Merci

    à +

    Dams'

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Points : 1 116
    Points
    1 116
    Par défaut
    Bonjour,

    essaies cette autre syntaxe de connection (en adaptant le chemin):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\txtFilesFolder\;Extensions=asc,csv,tab,txt;
    d'après cette source bien utiles pour se connecter un peu partout:
    http://www.connectionstrings.com/

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Points : 156
    Points
    156
    Par défaut
    En fait j'ai trouvé.

    Il faut faire une modification dans la base de registre :
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text
    --> et rajouter l'extension voulue dans la clé "DisabledExtensions"


    Il faut également le faire pour ta méthode !


    Merci. En tout cas cela fontionne.



    PS : Quelle est la différence entre les 2 façons d'établir une connection ? Avantages / Inconvénients ????


    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. exporter données sql dans un fichier csv en java
    Par pinkemma dans le forum JDBC
    Réponses: 2
    Dernier message: 07/03/2007, 09h23
  2. [SQL] Problème exécution sql pour insertion fichier csv
    Par Kyvin dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/08/2006, 17h47
  3. [VBA] Requête SQL sur un fichier excel ?
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/01/2006, 23h06
  4. [VBA][Excel]Exécution macro avec fichiers source
    Par ouezon dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/12/2005, 00h00
  5. Mettre a jour BD avec fichier csv
    Par Looping94510 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 07/02/2005, 18h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo