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 objet ADO


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 192
    Par défaut Problème objet ADO
    Bonjour tout le monde,

    Ca fait un bout de temps que je n'avais pas à programmer et du coup pas de questions bêtes
    Actuellement, je travaille sur des extractions de base de données. Ca fait toute l'après-midi que je fouille sur le site pour comprendre comment ça marche et d'essayer de trouver un 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
    Public Sub extraction()
     
       Dim Connexion As New ADODB.Connection
        Dim RS As New ADODB.Recordset
        Dim Cellule As Range
     
        Connexion.Open "DSN=MS Access Database;DBQ=C:\Regroupement.mdb;FIL=MS Access;"
        Set RS = Connexion.Execute("select CODE, EOG Fournisseur, EUR, annee from qrySTANDARDOUTPUTQUERY-French")
     
        Do While Not RS.EOF
            Set Cellule = Range("a65536").End(xlUp)(2)
            With RS
                Cellule(3, 1) = !EOG Fournisseur
                Cellule(3, 2) = !EUR
                .MoveNext
            End With
        Loop
     
    End Sub
    Malgré mes recherches j'ai plusieurs questions:
    1.Le nom de champ "EOG Fournisseur" semble poser des problèmes...Peut-on laisser des espaces dans le champ d'un nom? Toutefois lorsque je l'enlève l'erreur demeure...
    2.D'où ma seconde question: peut-on travailler sur des requêtes où il faut prendre les tables d'origine?
    3.Peut-on faire des tris (décroissant, somme, regroupement)?
    4.Dernière question, puis-je utiliser l'explorateur windows pour séléctionner le fichier de base de données? En fait chez nous, chaque année on prend un nouveau fichier pour stocker les données mais qui garde exactement la même structure que l'année précédente.

    Je vous remercie d'avance pour vos réponses! en attendant je continue ma fouille!

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    En espérant répondre a tes questions

    1.Le nom de champ "EOG Fournisseur" semble poser des problèmes...Peut-on laisser des espaces dans le champ d'un nom? Toutefois lorsque je l'enlève l'erreur demeure...
    un champ ne doit pas comporter d'espace. Dans ton cas il faut mettre le nom du champ entre crochets [EOG Fournisseur]

    D'où ma seconde question: peut-on travailler sur des requêtes où il faut prendre les tables d'origine?
    C'est comme tu veux, les 2 fonctionne

    3.Peut-on faire des tris (décroissant, somme, regroupement)?
    oui, il suffit de le faire dans la requete
    Ex : tri sur le code en décroissant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select CODE, EOG Fournisseur, EUR, annee from qrySTANDARDOUTPUTQUERY-French order by Code desc
    4.Dernière question, puis-je utiliser l'explorateur windows pour séléctionner le fichier de base de données? En fait chez nous, chaque année on prend un nouveau fichier pour stocker les données mais qui garde exactement la même structure que l'année précédente.
    dans ce cas le chemin de la base doit être une variable que tu chargeras de la facon que tu souhaites

  3. #3
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Citation Envoyé par sash6
    1.Le nom de champ "EOG Fournisseur" semble poser des problèmes...Peut-on laisser des espaces dans le champ d'un nom? Toutefois lorsque je l'enlève l'erreur demeure...
    Contrairement à mon prédescesseur, je vais te dire : Oui, tu en as le droit.
    Ton souci provient d'une syntaxe incorrecte.
    L'écriture avec les "!" est propre à Access.
    Elle n'est donc pas parfaitement compatible VBA (puisque spécifique Access pour conserver la compatibilité avec les premières versions d'Access)

    Utilises plutôt la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Fields("Nom Du Champs").Value
    Qui est beaucoup plus propre !

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Salut maxence

    Le ! n'est pas propre a access mais a ADO.
    Il fonctionne très bien avec des base de donnée SQL server, AS400, Oracle.

    Bien vu pour fields est une autre syntaxe

  5. #5
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Citation Envoyé par jfontaine
    Le ! n'est pas propre a access mais a ADO.
    Ok, je vais redire autrement cette phrase :
    Citation Envoyé par Maxence Hubiche
    Elle n'est donc pas parfaitement compatible VBA (puisque spécifique Access pour conserver la compatibilité avec les premières versions d'Access)
    Le ! n'est pas fullCompatible VBA.
    En effet, c'est un symbole qui ne permet que de simplifier une écriture qui est :
    .fields(index)
    index peut être le numéro d'ordre du champ ou son nom.

    Maintenant, puisqu'il faut être hyper précis...
    Cette syntaxe n'est pas propre à ADO puiqu'elle fonctionne aussi avec DAO. Elle est implémentée dans les bibliothèques d'Accès aux données afin de ne pas trop perturber les programmeurs Access de la première heure qui utilisaient cette syntaxe dans leurs programmes.
    Elle n'est, bien sûr, plus valable dans les évolution du langage, comme, par exemple, en DotNet.
    D'où l'intérêt de l'abandonner pour programmer comme il faut.

    Enfin, je ne pense pas que ni SQLServeur ni Oracle ni AS400 ne permettent le langage VBA. Ils permettent seulement l'accès à leur données VIA des bibliothèques qui, elles, implémentent une écriture obsolète pour des raisons de compatibiltés ascendantes (ce que j'expliquais ci-dessus) avec ACCESS, car, sauf erreur de ma part, en macrosXL4 pas plus qu'en WordBasic, on ne pouvait associer de références à nos programmes. Pourtant, on faisait déjà de l'accès aux données avec Access à cette époque, en utilisant le "!" pour référencer les champs. D'où la compatibilité Access.

  6. #6
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    merci maxence des ces précisions

    amicalement

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 192
    Par défaut
    Merci beaucoup messieurs pour l'exhaustivité de ces réponses! Malheureusement je ne peux tester aucune des deux 2 syntaxes proposées puisque mon prog bloque à la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set RS = Connexion.Execute("SELECT CODE, [EOG Fournisseur], kEUR, annee FROM qrySTANDARDOUTPUTQUERY-French")
    erreur générée:
    Erreur d'exécution '-21472117900 (80040e14)':
    [Microsoft][ODBC Microsoft Access] Erreur de syntaxe dans la clause FROM

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

Discussions similaires

  1. problème sur ADO/Acesss
    Par rajaomakelly dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 14/02/2006, 10h15
  2. Création d'objet ADO en dynamique
    Par GoodSpeed dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/01/2006, 21h18
  3. [SQL]Problème avec ADO - Order by
    Par Dnx dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 03/11/2005, 10h55
  4. Problème avec Ado, MySQL
    Par sylvain.g dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/06/2005, 10h45
  5. utilisation d'objets ADO pour CMS sur POSTGRESQL7.3.2
    Par turbok dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 10/10/2003, 09h29

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