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 :

Problème connexion Excel csv via ADODB


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Problème connexion Excel csv via ADODB
    Bonjour,

    J'ai un petit souci dans mon code de connexion, je remercie d'avance toute personne suceptible de m'avancer.

    Objectif: Je cherche à réccupérer des données enregistré dans un fichier csv avec mon fichier Excel

    Avancement: J'ai monté le code de connexion et réussi à récupérer la plupart des données



    Ce que je voudrais savoir c'est: es ce qu'il y a un moyen de demander au pilote ADODB de ne pas prendre en compte un caractère (une sorte de méthode d'échapement comme le "\").

    N'ayant pas la main pour modifier le nom du champ cible je n'ai pour l'instant aucune autre idée.

    PS: Je suis nouveau et je m'escuse donc d'avance si ma façon de présenter les choses n'est pas conventionnelle

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    que dirais tu de "*"

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Tout d'abord merci de ta réponse rapide, c'est simpas .

    Malheureusement pour moi après test le caractère "*" ne semble pas évité le problèmes


  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    [Num* ...]

  5. #5
    Invité
    Invité(e)
    Par défaut Bonjour, sans garantie
    ici on est en nom de champ pas en string "like(.[Num* de commande])".

    [Num* de commande] ne peut pas marcher malheureusement il faut noter les champs par leurs nom réel. les [] sont censé permettre l'utilisation d'instruction spécifique exp. select date as dates ici la fonction date, select [date] as dates ici le champ date de la table!



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ASCOM_commandes.csv].[Num. de commande]

  6. #6
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Et si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from ASCOM_commandes.csv .....
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    f.Cells(i, 1) = Record(0)
    f.Cells(i, 2) = Record(1)
    .....

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    J'ai réessayer le [Num* ...] comme précisé par EngueEngue et en effet cela ne semble pas fonctionner.

    J'ai également essayer comme proposer par rdurupt de précéder du nom du fichier entre crochet, et également de le faire avec un alias au nom de fichier:

    [ASCOM_commandes.csv].[Num. de commande]
    commandes.[Num. de commande]

    Aucun de ces deux tests n'ont fonctionnés

    La proposition de pc75 me parait très intéressante pour réccupérer les données néanmoins je ne peu pas la tester directement

    En effet ma situation se compose de plusieurs fischiers sources en csv qui contienne certaines données semblable mais pas sous les mêmes nom, je les réccupères et je fais une union par la suite.
    Si je réccupère tout les éléments d'un coup je vais d'abord devoir les traiters pour reprendre uniquement les champs qui m'intéresse, cela va rendre le code plus lourd néanmoins c'est une solution qui me parait jouable.

    Merci pour vos proposition je vais pour l'intant partir sur l'idée de pc75 mais je laisse encore la discution active si jamais il y a d'autres idée

  8. #8
    Invité
    Invité(e)
    Par défaut
    tu fais un Union all

    ou tu renomme ton champ par une méthode traditionnel voir réponse de Marc-L : http://www.developpez.net/forums/d13...a/#post7488694

  9. #9
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Re,

    Tu sais qu'à partir d'un recordset, tu peux récupérer le nom et la valeur d'un champ ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Record(0).name
    Record(0).value

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par pc75 Voir le message
    Re,

    Tu sais qu'à partir d'un recordset, tu peux récupérer le nom et la valeur d'un champ ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Record(0).name
    Record(0).value
    il a raison, fait une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sql="select * from.."
    set rs= openRs
    for i=0 to rs.filds.count-1
    debug.print rs(i).name
    ainsi tu verras comme sql gère le problème
    si tu dispose d'Access importe ton fichier et fait ta requête dans Access puis pas en mode Sql et copie le code SQL!
    Dernière modification par Invité ; 25/09/2013 à 14h10.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    L'union all ne me semble pas possible touts les champs des divers fichier ne corresponde pas et le nom des champ correspondant ne sont pas les même en plus de ça.

    Je suis parti sur l'utilisation du "select * ..." sachant que je connais le numéros des champs à selectionner:




    J'ai rajouter ce code a la suite de l'autre cela se résume en une union à la main.
    Malheureusement c'est assez peu portable. J'ai également pensé selectionner le champ qui posais problème ([Num. de commande]) en utilisant sont numéros de colonne mais je n'ai pas trouvé comment faire ça en sql.

    Pour l'instant je vais continuer avec ma solution actuelle pour mes test car au moins elle est fonctionnelle.

    Merci tout le monde de m'avoir aidé pour ce problème je le marque en résolue

  12. #12
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    (t'aurai pas du mettre une image c'est pas pratique pour le copier/coller )

    je vais peut-être dire une chose idiote, mais si tu met ton nom de colonne dans une variable texte, que tu utilises par la suite dans tarequête ça marche pas ? genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim libelle_colonne as string
    libelle_colonne = "Num. de commande"
    ...
    sel4 = "SELECT [libellé mode de depot] as mode, [" & libelle_colonne & "] as Numero, ......

  13. #13
    Invité
    Invité(e)
    Par défaut
    tu n'as pas regardé avec Access?

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Non malheureusement j'avais déja essayé le problème est le même.

    Et pour les images tu as raison, que veux tu les erreurs de débutant.

    Cado:

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Sub test()
        Dim Connex As ADODB.Connection
        Dim Record As ADODB.Recordset
        Set Connex = New ADODB.Connection
        Set Record = New ADODB.Recordset
     
        Dim requete As String
        Dim Repertnom As String
     
        Repertnom = "E:\TacheAnnexe\outilASCOM\Prototype\base"
     
        Connex.ConnectionString = "ODBC;DBQ=" & Repertnom & ";DefaultDir=E:\; " & "Driver={Microsoft Text Driver (*.txt; *.csv)}; " & "DriverId=27;Extensions=txt,csv,tab,asc;FIL=text;MaxBufferS"
        Connex.Open
     
        sel1 = " SELECT [Lib mode de dépot SOLL] as mode, [Identifiant SOLL] as Numero, [Nom Acteur Traitant SOLL] &' '& [Prenom Acteur Traitant SOLL] as Nom, [Nom Resp Acteur Traitant SOLL] as RDV,[Date de création SOLL] as dateCrea, [Nom Resp Acteur Traitant SOLL] as marche, 'soll traitées' as requete"
        fro1 = " FROM SOLL_traites.csv as traite"
     
        sel2 = " SELECT [Lib mode de dépot SOLL] as mode, [Identifiant SOLL] as Numero, [Nom et prénom Act Créa SOLL] as Nom, [Nom Resp Act Créa SOLL] as RDV,[Date de création SOLL] as dateCrea, [Nom Resp Act Créa SOLL] as marche, 'soll créée' as requete"
        fro2 = " FROM SOLL_créées.csv as cree"
     
        sel3 = " SELECT [Lib mode de dépot RECLA] as mode, [Identifiant RECLA] as Numero, [Nom et prénom Act Créa RECLA] as Nom, [Nom Resp Act Créa RECLA] as RDV,[Date de création RECLA] as dateCrea, [Nom Resp Act Créa RECLA] as marche, 'ASCOM reclamation' as requete"
        fro3 = " FROM ASCOM_reclamations.csv as traite"
     
        'sel4 = " SELECT [Libellé mode de depot] as mode, [Num] as Numero, [Nom Act Creat] &' '& [Prenom Act Creat] as Nom, [Nom Resp Act Creat] as RDV,[Date de création] as dateCrea, [Nom Resp Act Creat] as marche, 'ASCOM commande' as requete"
        'fro4 = " FROM ASCOM_commandes.csv as traite"
     
        'sel4 = " SELECT [Libellé mode de depot] as mode, [Num. de commande] as Numero, [Nom Act Creat] &' '& [Prenom Act Creat] as Nom, [Nom Resp Act Creat] as RDV,[Date de création] as dateCrea, [Nom Resp Act Creat] as marche, 'ASCOM commande' as requete"
        'fro4 = " FROM ASCOM_commandes.csv as commandes"
     
     
        requete = sel1 & fro1 & " UNION " & sel2 & fro2 & " UNION " & sel3 & fro3
        Record.Open requete, Connex
     
        Set f = Sheets("Données")
        Record.MoveFirst
        i = 2
     
        Do While Not Record.EOF
            f.Cells(i, 1) = Record("mode")
            f.Cells(i, 2) = Record("Numero")
            f.Cells(i, 3) = Record("Nom")
            f.Cells(i, 4) = Record("RDV")
            f.Cells(i, 5) = Record("marche")
            f.Cells(i, 6) = Record("dateCrea")
            f.Cells(i, 7) = Record("requete")
            i = i + 1
            Record.MoveNext
        Loop
     
        Record.Close
     
        requete = "SELECT * FROM ASCOM_commandes.csv as commandes"
        Record.Open requete, Connex
     
        Do While Not Record.EOF
            f.Cells(i, 1) = Record(2).Value
            f.Cells(i, 2) = Record(0).Value
            f.Cells(i, 3) = Record(7).Value & " " & Record(8).Value
            f.Cells(i, 4) = Record(14).Value
            f.Cells(i, 5) = Record(14).Value
            f.Cells(i, 6) = Record(4).Value
            f.Cells(i, 7) = "ASCOM commande"
            i = i + 1
            Record.MoveNext
        Loop
     
        Connex.Close
     
    End Sub
    Et j'avou qu'en générale pour coder je préfere largement utiliser Access que Excel, mais en locurrence cela fait partie des exigences de bases.

  15. #15
    Invité
    Invité(e)
    Par défaut
    les aléas du directe!

  16. #16
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Re,

    Citation Envoyé par rdurupt Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sql="select * from.."
    set rs= openRs
    for i=0 to rs.fields.count-1
    debug.print rs(i).name
    ainsi tu verras comme sql gère le problème
    si tu dispose d'Access importe ton fichier et fait ta requête dans Access puis pas en mode Sql et copie le code SQL!
    Tu as essayé ça pour voir comment il interprète le nom de la colonne qui met la grouille ?

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Ouaaa Bingo merci pc75 en fait il interpret le point comme un "#" donc en utilisant le code suivant ça fonctionnne :

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    Sub test()
        Dim Connex As ADODB.Connection
        Dim Record As ADODB.Recordset
        Set Connex = New ADODB.Connection
        Set Record = New ADODB.Recordset
     
        Dim requete As String
        Dim Repertnom As String
        Dim t As String
        Repertnom = "E:\TacheAnnexe\outilASCOM\Prototype\base"
     
        Connex.ConnectionString = "ODBC;DBQ=" & Repertnom & ";DefaultDir=E:\; " & "Driver={Microsoft Text Driver (*.txt; *.csv)}; " & "DriverId=27;Extensions=txt,csv,tab,asc;FIL=text;MaxBufferS"
        Connex.Open
     
        sel1 = " SELECT [Lib mode de dépot SOLL] as mode, [Identifiant SOLL] as Numero, [Nom Acteur Traitant SOLL] &' '& [Prenom Acteur Traitant SOLL] as Nom, [Nom Resp Acteur Traitant SOLL] as RDV,[Date de création SOLL] as dateCrea, [Nom Resp Acteur Traitant SOLL] as marche, 'soll traitées' as requete"
        fro1 = " FROM SOLL_traites.csv as traite"
     
        sel2 = " SELECT [Lib mode de dépot SOLL] as mode, [Identifiant SOLL] as Numero, [Nom et prénom Act Créa SOLL] as Nom, [Nom Resp Act Créa SOLL] as RDV,[Date de création SOLL] as dateCrea, [Nom Resp Act Créa SOLL] as marche, 'soll créée' as requete"
        fro2 = " FROM SOLL_créées.csv as cree"
     
        sel3 = " SELECT [Lib mode de dépot RECLA] as mode, [Identifiant RECLA] as Numero, [Nom et prénom Act Créa RECLA] as Nom, [Nom Resp Act Créa RECLA] as RDV,[Date de création RECLA] as dateCrea, [Nom Resp Act Créa RECLA] as marche, 'ASCOM reclamation' as requete"
        fro3 = " FROM ASCOM_reclamations.csv as traite"
     
     
        sel4 = " SELECT [Libellé mode de depot] as mode, [Num# de commande] as Numero, [Nom Act Creat] &' '& [Prenom Act Creat] as Nom, [Nom Resp Act Creat] as RDV,[Date de création] as dateCrea, [Nom Resp Act Creat] as marche, 'ASCOM commande' as requete"
        fro4 = " FROM ASCOM_commandes.csv as commandes"
     
     
        requete = sel1 & fro1 & " UNION " & sel2 & fro2 & " UNION " & sel3 & fro3 & " UNION " & sel4 & fro4
        Record.Open requete, Connex
     
        Set f = Sheets("Données")
        Record.MoveFirst
        i = 2
     
        Do While Not Record.EOF
            f.Cells(i, 1) = Record("mode")
            f.Cells(i, 2) = Record("Numero")
            f.Cells(i, 3) = Record("Nom")
            f.Cells(i, 4) = Record("RDV")
            f.Cells(i, 5) = Record("marche")
            f.Cells(i, 6) = Record("dateCrea")
            f.Cells(i, 7) = Record("requete")
            i = i + 1
            Record.MoveNext
        Loop
     
        Record.Close
     
      '  requete = "SELECT * FROM ASCOM_commandes.csv as commandes"
        'Record.Open requete, Connex
     
       ' Do While Not Record.EOF
       '     f.Cells(i, 1) = Record(2).Value
       '     t = Record(0).Name
       '     f.Cells(i, 2) = Record(0).Value
       '     f.Cells(i, 3) = Record(7).Value & " " & Record(8).Value
       '     f.Cells(i, 4) = Record(14).Value
       '     f.Cells(i, 5) = Record(14).Value
       '     f.Cells(i, 6) = Record(4).Value
       '     f.Cells(i, 7) = "ASCOM commande"
       '     i = i + 1
       '     Record.MoveNext
       ' Loop
     
        Connex.Close
     
    End Sub

  18. #18
    Invité
    Invité(e)
    Par défaut
    N'oublis pas le Groom Service
    Dernière modification par AlainTech ; 05/10/2013 à 13h35. Motif: Suppression de la citation inutile

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    lol Evidement l'idée vient de toi d'abord rendons à césar ce qui apartient à césar merci rdurupt

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

Discussions similaires

  1. [2000] Problème connexion Excel 2010 --> SSAS 2000
    Par Bernardos dans le forum SSAS
    Réponses: 2
    Dernier message: 08/08/2012, 09h46
  2. [XL-2007] Problème connexion Excel-Access
    Par Sonilight dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/02/2012, 19h59
  3. Réponses: 8
    Dernier message: 20/07/2010, 12h25
  4. Probléme de connexion avec ATT via une freebox
    Par ybertrand dans le forum Hardware
    Réponses: 3
    Dernier message: 17/10/2005, 16h06
  5. Connexion base SQL via Excel
    Par dp_favresa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/01/2005, 14h32

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