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 :

Requête SQL fichier CSV


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Par défaut Requête SQL fichier CSV
    Bonjour à tous,

    Je rencontre un problème lorsque je veux effectuer ma requête SQL sur un fichier csv (je passe par une connexion ADODB).

    Voici mon 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
    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
     
    Sub Methode4()
     
        Dim Cn As ADODB.Connection
        Dim Fichier As String
        Dim NomFeuille As String, texte_SQL As String
        Dim Rst As ADODB.Recordset
        Dim n As Long
        Dim dat As String
     
        n = 2
        Dossier = "C:\TEMP\PROD_COMPAR\"
        FichierCSV = Dir(Dossier)
     
    Do While FichierCSV <> ""
     
        'Connexion classeur fermé
        Set Cn = New ADODB.Connection
        Cn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Dossier & ";Extended Properties=""text;HDR=Yes;FMT=Delimited(;)"";Persist Security Info=False"
        Cn.Open
     
        'Requête Nb Valeurs
        texte_SQL = "SELECT COUNT(*) FROM " & FichierCSV
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
        Workbooks("Ecarts MDC_SDC - Copie").Sheets(1).Range("B" & n).CopyFromRecordset Rst
     
        'Requête Ecarts TypeG
        texte_SQL = "SELECT COUNT(*) FROM " & FichierCSV & " WHERE CH0FO2-AV = 'FC'"
        Set Rst = Cn.Execute(texte_SQL)
        Workbooks("Ecarts MDC_SDC - Copie").Sheets(1).Range("C" & n).CopyFromRecordset Rst
     
        'Passer au fichier suivant
        n = n + 1
        FichierCSV = Dir()
     
        'Déconnexion classeur fermé
        Rst.Close
        Set Rst = Nothing
        Cn.Close
        Set Cn = Nothing
     
    Loop
     
    End Sub
    La première requête fonctionne mais la deuxième où je rajoute une condition dans le WHERE j'obtiens l'erreur suivante :
    Erreur d'exécution '-2147217904 (80040e10)':
    Aucune valeur donnée pour un ou plusieurs des paramètres requis.

    Apparement cette erreur est censée apparaitre lorsque le nom de colonne n'existe pas.
    Mais le champ CH0FO2-AV existe bien dans la première ligne de mon fichier CSV.

    Merci d'avance si vous pourrez m'aider.

    Mathilde

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    comme indiqué dans la documentation ou dans les tutoriels un nom de champ doit être entre crochets, non ?

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Par défaut
    J'ai déjà essayé avec le nom du champ entre crochets mais j'ai la même erreur..

  4. #4
    Invité
    Invité(e)
    Par défaut
    bonjour Marc,

    oui (pas toujours obligé si pas de cratères blizzard ou espace) mais c'est plus sur de les mettre systématiquement! [Champs]

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    l'apostrophe ne doit pas être échappé également par un \ ??

    j'avais vu ça dans la FAQ ACCESS, peut-être que pour Excel ce n'est pas nécessaire ?

    par exemple ici : https://access.developpez.com/faq/?page=SQL#ExecSQLvba

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    J'utilise les crochets dès la présence d'un caractère différent d'un chiffre ou d'une lettre.

    Pour l'apostrophe là ce n'est pas utile car c'est comme un guillemet délimitant une chaine de caractères, non ?
    Jusqu'à présent je n'ai pas rencontré ce souci …

  7. #7
    Invité
    Invité(e)
    Par défaut
    teste ça!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    texte_SQL = "SELECT * FROM " & FichierCSV
    Set Rst = cn.Execute(texte_SQL)
    For I = 0 To Rst.fields.Count - 1
        Debug.Print Rst(I).Name
    Next

  8. #8
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Par défaut
    Je ne comprend pas bien ce que ce code fait, surtout la ligne Debug.Print Rst(I).Name
    En tout cas j'ai testé et ça ne me donne pas du tout ce que je veux

  9. #9
    Invité
    Invité(e)
    Par défaut
    tu ouvres la fenêtre de d’exécution raccourci clavier [Ctrl] + [G] et tu me diras si ça ne correspond pas à ce que tu cherche!

  10. #10
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Par défaut
    Non ça me 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
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    F3
    F4
    F5
    F6
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    F3
    F4
    F5
    F6
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    F3
    F4
    F5
    F6
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    F3
    F4
    F5
    F6
    Ce qui correspond aux premiers noms de colonnes et les Fx je ne sais pas.

  11. #11
    Invité
    Invité(e)
    Par défaut
    bien sur que si! voilà le nom de ton seule et unique champ [CH0FO2 ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF ;CH3JL]
    Code schema.ini : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Txt = "[F.CSV]" & vbCrLf & _
    "Format=Delimited(;)"

    et là e nom de ta feuille!
    il y avait tous pour ton problème il fallait changer rep = "C:\MyRepertoire\Nouveau dossier" par le chemin de ton dossier ou ce trouve tes csv!

    https://www.developpez.net/forums/d1...r/#post9291988
    Dernière modification par Invité ; 19/05/2017 à 15h29.

  12. #12
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Par défaut
    Je ne comprend pas, pourtant dans mes csv la première ligne est toujours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JLG   ;CH0FO1-AV;CH0FO1-AP;CH0FO2-AV;CH0FO2-AP;CH0G8D-AV;CH0G8D-AP;CH0Y9S-AV;CH0Y9S-AP;CH391K-AV;CH391K-AP;CH18BD-AV;CH18BD-AP;CH18BC-AV;CH18BC-AP;CH0FV1-AV;CH0FV1-AP;CH17Z2-AV;CH17Z2-AP;CH17Z3-AV;CH17Z3-AP;CH17Z1-AV;CH17Z1-AP;POOL-AV  ;POOL-AP ;
    Pourquoi ne considère-t-il pas chaque valeur comme un champ unique ?


    Et mon rep (ici Dossier) est bien un chemin vers le dossier où se trouvent mes csv.

  13. #13
    Invité
    Invité(e)
    Par défaut
    oui mais par défaut le séparateur de champ est la virgule (Amérique!) pour ne pas à aller bricoler dans la base de registre de Windows je place dans le répertoire un fichier schema.ini.

    c'est lui qui informe ADO que le ; est le séparateur de champ!

    dans la fenêtre d'exécution chaque champs devraient être le uns en dessous de autres!

    Code comme ça! : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CH0FO2CH0FUZ-AV
    CH0FUZ-AP
    CH0FVL-AV
    CH0FVK-AP
    CH3JLF 
    CH3JL

  14. #14
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Par défaut
    Aah d'accord !
    Serait-il possible de m'expliquer un peu plus en détail comment et où créer mon fichier schema.ini ?

  15. #15
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub NewFichierTxt(Fichier, txt)
    Dim fso, NewFichier
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set NewFichier = fso.OpenTextFile(Fichier, 2, True)
    NewFichier.Write txt
    NewFichier.Close
    Set NewFichier = Nothing
    Set fso = Nothing
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Txt = "[NomFichier.CSV]" & vbCrLf & _
    "Format=Delimited(;)"
    NewFichierTxt rep & "\schema.ini",txt

  16. #16
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Par défaut
    Super merci beaucoup !!

  17. #17
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Par défaut
    Bon en fait faux espoir ça ne fonctionne pas.
    Le fichier schema.ini se créé bien dans le dossier des csv, mais j'ai toujours ceci :

    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
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    F3
    F4
    F5
    F6
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    F3
    F4
    F5
    F6
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    F3
    F4
    F5
    F6
    CH0FO2  ;CH0FUZ-AV;CH0FUZ-AP;CH0FVL-AV;CH0FVK-AP;CH3JLF   ;CH3JL
    F2
    F3
    F4
    F5
    F6

    Une idée de pourquoi ?


    PS : Mon fichier schema.ini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [PROD_COMPAR_20170515_050151]
    Format=Delimited(;)

  18. #18
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [PROD_COMPAR_20170515_050151.csv]
    Format=Delimited(;)

  19. #19
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Par défaut
    Super tout fonctionne !
    Merci encore

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

Discussions similaires

  1. [Fichier csv] Requête SQL
    Par smutmutant2003 dans le forum Outils
    Réponses: 6
    Dernier message: 08/07/2013, 15h26
  2. Extraction requête SQL to CSV
    Par developpeur_débutant dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/03/2012, 10h59
  3. Résultat d'une requête vers fichier CSV
    Par blivatz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/12/2011, 12h10
  4. Requête sur fichier CSV via OLEDB
    Par Monkey_D.Luffy dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/10/2010, 10h04
  5. requête sql pour fichier csv qui foire
    Par frboyer dans le forum Langage
    Réponses: 2
    Dernier message: 19/05/2009, 16h05

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