Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/09/2011, 16h17   #1
Invité de passage
 
Inscription : août 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 25
Points : 3
Points : 3
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 :
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
daimadoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 16h41   #2
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
Peut-être que l'erreur vient du moteur de bdd que tu utilises...

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

Code :
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.
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 16h55   #3
Invité de passage
 
Inscription : août 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 25
Points : 3
Points : 3
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é)
daimadoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 17h29   #4
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
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 :
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
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 17h53   #5
Invité de passage
 
Inscription : août 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 25
Points : 3
Points : 3
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
daimadoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 19h22   #6
Invité de passage
 
Inscription : août 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 25
Points : 3
Points : 3
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 :
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
daimadoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 12h31   #7
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 675
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 675
Points : 7 668
Points : 7 668
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!
AlainTech est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 10h13   #8
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
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).
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 15h15   #9
Invité de passage
 
Inscription : août 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 25
Points : 3
Points : 3
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 !
daimadoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h48.


 
 
 
 
Partenaires

Hébergement Web