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 :

Mise à jour table access depuis Excel [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 29
    Points : 15
    Points
    15
    Par défaut Mise à jour table access depuis Excel
    Bonjour à tous,

    Je vous écrit car je ne parviens pas, malgré mes multiple tentative, a utiliser convenablement les recordset ADODB permettant de mettre à jour une table access via les données contenu dans mon fichier excel. Je parviens bien à me connecter à la base access (aucun message d'erreur) mais lors de l'ouverture du recordset j'obtient un message d'erreur "Erreur de syntaxe dans la clause From"

    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
    Sub Nouvel_utilisateur_clic()
    
        Dim chemin As String
        
        chemin = "T:\Informatique\Projets\Gestion du Parc\GesParc.accdb"
       
        Set cnx = New ADODB.Connection
           
        ' Connexion à la base
        'ConnectDB cnx, chemin
        
        'Définition du recordset
    
        Dim rec As ADODB.Recordset
        'Définition du pilote de connexion
        cnx.Provider = "Microsoft.ACE.OLEDB.12.0"
        'Définition de la chaîne de connexion
        cnx.ConnectionString = chemin
        'Ouverture de la base de données
        cnx.Open
    
        Set rec = New ADODB.Recordset
        rec.ActiveConnection = cnx
    
        'Ouverture de la table
        rec.Open "Select * from User;", cnx ', adOpenKeyset, adLockOptimistic --> Le message d'erreur apparait a ce niveau (Pourtant c'est une simple requete SQL de selection, donc pourquoi ai je l'erreur ??)
    
        rec.AddNew
            'Insertion des champs
            rec.Fields("Nom") = Excel.Cells(2, 3).Value
            rec.Fields("Prenom") = Excel.Cells(2, 4).Value
            rec.Fields("Tel") = Excel.Cells(2, 11).Value
            rec.Fields("Mail") = Left(Excel.Cells(2, 4).Value, 1) & "." & Excel.Cells(2, 3).Value & "@portalp.fr"
            rec.Fields("Agence") = Excel.Cells(2, 6).Value
            rec.Fields("Test Valide") = True
            
        'Mise à jour de la table access avec les nouvelles informations
        rec.Update
        
    'Fermeture du recordset
    rec.Close
    Set rec = Nothing
    
    End Sub
    Merci d'avance pour votre aide

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut
    Peut-être que l'erreur vient du moteur de bdd que tu utilises...

    Avec Access 2003 et le moteur Jet, ça donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Microsoft.Jet.OLEDB.4.0
    Mais peut-être as-tu toi-même une version plus récente de Jet suivant ta version d'Office.

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Hello,

    Déjà merci de tenter de m'aider

    J'avais tenter d'utiliser le moteur jet "Microsoft.Jet.OLEDB.4.0" mais cela ne fonctionne pas pour se connecter sur une base access 2007.

    Je ne sais pas si le problème vient de la, quelqu'un connait il le moteur a utiliser avec ACCESS 2007 ?

    Merci

    Edit : Je ne tiens pas spécialement a garder mon code tel quel. Si vous connaissez une autre methode pour mettre à jour une base access 2007 depuis un fichier excel 2007, cela ne me gene absolument pas (bien que je pense que la methode ADODB soit la plus adapté)

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut
    Après une rapide recherche tu avais en fait raison d'utiliser ACE 12.0 puisque c'est la version du moteur Jet pour Office 2007 (cf. http://en.wikipedia.org/wiki/Microso...atabase_Engine).

    Question bdd Access, je ne sais pas pourquoi tout le monde utilise ADO alors que DAO est plus indiqué (mais uniquement pour du Access). En effet, DAO est la bibliothèque pour Access et ADO pour tout fichier contenant des données en général.
    De ce que j'ai pu lire sur Internet par contre il n'y a pas de différence notoire en termes de performance (par contre je pense que pour bosser sur du Access, c'est de fait souvent plus direct avec DAO).

    Pour ce que tu veux faire, voilà ce que ça peut donner avec DAO (ne pas obliger de linker la bibliothèque correspondante):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim myDBAs DAO.Database, strSQL As String, rstQuery As DAO.Recordset
        Set myDB = DBEngine.OpenDatabase(chemin)
     
    strSQL = "Select * from User;"
    Set rstQuery = myDB.OpenRecordset(strSQL, type_de_rst, options, dbOptimistic)
    Je ne sais pas à quoi correspond le mode d'ouverture 'adOpenKeyset' en ADO mais il ne doit pas être compliqué de trouver l'équivalent en DAO.


    [EDIT] Je viens de lire pourquoi il est préférable d'utiliser ADO à DAO. D'ailleurs pour 2007 ce n'est plus DAO mais ACEDAO. Ceci dit, les avantages de DAO sont surtout au niveau de la gestion des modifications concurrentes ou des structures de tables un peu raffinées. Donc si tu n'es pas dans ce cas, la différence ne sera pas flagrante.
    Si l'anglais ne te pose pas de problèmes, plus de détails: http://stackoverflow.com/questions/1...in-access-2007

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Merci pour ta reponse.

    Tu va rire, mais j'utilisais enormement les recordset DAO dans mon ancienne société, mais je ne l'avais j'amais utilisé pour me connecter sur une autre base access (J'utilisais les recordset en dao directement dans ma base access pour parcourir mes table).
    C'est vrai que si la syntaxe DAO fonctionne, cela m'arrangerai d'autant plus, (j'etais parti sur l'ADO en me disant que ca serait surement mieux adapté à mon objectif)

    Bref, Je vais essayer cela en rentrant ce soir et je te tiens au courant demain au maximum.

    Encore merci pour ton aide.

    Daimadoshi

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Bon j'ai tenté d'utiliser DAO pour acceder a access mais ca ne marche pas.

    En effet, il ne reconnais pas le type de BDD accdb. Je pourrais bien convertir ma base en ancienne version mais je trouve cela dommage.

    Voici mon code au cas ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim myDB As DAO.Database, strSQL As String, Rs0 As DAO.Recordset
    Dim chemin As String
     
    chemin = "T:\Informatique\Projets\Gestion du Parc\GesParc.accdb"
    
    Set myDB = DBEngine.OpenDatabase(chemin)
     
    strSQL = "Select * from User;"
    Set Rs0 = myDB.OpenRecordset(strSQL)
    Rs0.MoveFirst
        MsgBox Rs0.Fields("Nom")
    Je vais continuer a regarder de mon coté mais si quelqu'un peux m'aider ca serait sympa.

    Merci

    Edit : Je ne peux meme pas revenir en version précédente car j'utilse quelque nouvelle fonctionnalité du nouveau format access et le logiciel n'accepte pas les conversion dans ce cas.
    Je suis dessus depuis hier et j'avou commencer a vraiment galerer sur ce soucis...

    Merci d'avance pour votre aide

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Et en supprimant le point-virgule de ton premier code, ça donne quoi?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut
    Citation Envoyé par daimadoshi Voir le message
    Bon j'ai tenté d'utiliser DAO pour acceder a access mais ca ne marche pas.

    En effet, il ne reconnais pas le type de BDD accdb. Je pourrais bien convertir ma base en ancienne version mais je trouve cela dommage.
    Et c'est normal parce que la bibliothèque DAO n'est plus utlisée depuis Office 2007. L'équivalent est ACEDAO (normalement tu devrais pouvoir la linker, moi je ne peux pas vérifier parce que je suis sous 2003).

  9. #9
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Bonjour tous le monde,

    Je viens pour vous tenir au courant, car j'ai trouvé l'origine du soucis (bien caché lol).

    En fait, tout mon code etait bon (celui utilisant l'ADO) mais j'avais une erreur sur ma requete SQL car ma table utilisait des nouveaux format accessible uniquement depuis ACCESS 2007 (je ne sais plus lequel exactement, une liste de valeur je crois). Bref j'ai reussi a corriger mon problème en créant une table identique hormis le type de champ non supporté, et cela a fonctionné parfaitement.

    En tout cas merci a vous d'avoir tenté de m'aider.

    Bonne journée à tous !

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

Discussions similaires

  1. [AC-2007] Mise à jour d'access depuis Excel
    Par Blado_sap dans le forum Access
    Réponses: 0
    Dernier message: 24/02/2015, 17h11
  2. Mise à jour Table Access
    Par 30avril1989 dans le forum VBA Access
    Réponses: 7
    Dernier message: 29/04/2010, 11h01
  3. Mise à jour Tables access via Datagridview
    Par Apocalyptico dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/02/2010, 14h17
  4. Mise à jour table Access en SQL
    Par KrSt94 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/06/2007, 09h47
  5. Ouverture d'une table Access depuis Excel
    Par SlySylvain dans le forum Access
    Réponses: 3
    Dernier message: 28/07/2006, 18h36

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