Habitu=E9 du MPFE (le Newsgroup Excel), je connais bien Excel et VBA, mai=
s tr=E8s mal Access.
J'ai besoin d'alimenter une base Access =E0 partir de documents Excel et =
je rame ;-((
En l'occurrence mon probl=E8me est le suivant : chaque document Excel con=
tient, entre autres choses, une localit=E9 et un=20
d=E9partement (sous forme de texte, =E0 cause des 01, 02, ... pour avoir =
toujours 2 caract=E8res).
La base Access contient une table avec le code INSEE des 36000 communes f=
ran=E7aises. Les 2 premiers caract=E8res du code=20
INSEE correspondent au d=E9partement, comme un code postal. Je dois alime=
nter une autre table avec une douzaine de champs=20
dont la localit=E9 et le code INSEE.
J'ai construit une requ=EAte, "ReqCommune" qui me liste toutes les commun=
es ayant pour nom la valeur d'une cellule nomm=E9e=20
"Localit=E91" dans le document Excel. Par exemple, il y a 4 "Montr=E9al",=
situ=E9s dans 4 d=E9partements diff=E9rents. La voici :
SELECT LOCALITE.insee_comm, LOCALITE.NCC
FROM LOCALITE, Param
WHERE (((LOCALITE.NCC)=3D[Param].[Localit=E9]));
"Param" est une table qui ne contient qu'un enregistrement, avec la local=
it=E9 et le d=E9partement, tels qu'ils apparaissent=20
dans le document Excel.
"Param" est aliment=E9e par la Sub "MAJParam", appel=E9e par la Sub "Test=
1".
Une seconde requ=EAte, "ReqCommuneDepConnu", exploite le r=E9sultat de la=
premi=E8re ("ReqCommune") et fait appel =E0 une=20
fonction, "Test" dont le code est reproduit plus bas. Il s'agit d'=E9limi=
ner les communes ayant le bon nom, mais situ=E9es=20
dans un autre d=E9partement :
SELECT ReqCommune.insee_comm, ReqCommune.NCC
FROM ReqCommune, Param
WHERE (((Test([ReqCommune]![insee_comm],[Param]![D=E9p]))=3DTrue));
A partir de la Sub "Test2", j'arrive =E0 lancer la requ=EAte "ReqCommune"=
, sans difficult=E9 particuli=E8re.
Par contre je suis incapable (Sub "Test3") de faire pareil avec "ReqCommu=
neDepConnu" : j'obtiens le message (pas tr=E8s=20
surprenant d'ailleurs) "Erreur 3085 Fonction 'Test' non d=E9finie dans l'=
Expression".
J'ai voulu faire des essais avec
Q.Execute
ou
DB.Execute Q.Sql, dbFailOnError
sans succ=E8s ;-((((
Quelqu'un aurait-il une piste ?
Merci d'avance.
Extrait du code VBA Access (fonction utilis=E9e par "ReqCommuneDepConnu" =
:
Function Test(Code$, Dep$)
Test =3D (Left(Code, 2) =3D Dep)
End Function
Extrait du code VBA Excel destin=E9 =E0 alimenter la base :
Option Explicit
Private DB As Database, RS As Recordset
Private Sub OuvreBase()
ChDir ThisWorkbook.Path
Set DB =3D OpenDatabase(ThisWorkbook.Sheets(1).Evaluate("Base"))
End Sub
Private Sub Test1()
MAJParam ActiveWorkbook.Sheets(1).Range("Localit=E91")
' Suite du code, =E0 venir
End Sub
Private Sub MAJParam(Loc As Range)
OuvreBase
Set RS =3D DB.OpenRecordset("Param")
RS.Edit
RS!Localit=E9 =3D Loc
RS!D=E9p =3D Loc.Offset(2)
RS.Update
RS.Close
DB.Close
End Sub
Private Sub Test2()
Dim Q As QueryDef, RS As Recordset
OuvreBase
Set Q =3D DB.QueryDefs("ReqCommune")
Set RS =3D DB.OpenRecordset(Q.Sql)
MsgBox RS!insee_comm
End Sub
Private Sub Test3()
Dim Q As QueryDef, RS As Recordset
OuvreBase
Set Q =3D DB.QueryDefs("ReqCommuneDepConnu")
Set RS =3D DB.OpenRecordset(Q.Sql)
MsgBox RS!insee_comm
End Sub
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gilbert
Bonjour,
Question idiote, mais je la pose quand même: As-tu testé cette requête directement dans Access?
-- Gilbert
"Michel Gaboly" a écrit dans le message de news: uuH$ Bonjour,
Habitué du MPFE (le Newsgroup Excel), je connais bien Excel et VBA, mais très mal Access.
J'ai besoin d'alimenter une base Access à partir de documents Excel et je rame ;-((
En l'occurrence mon problème est le suivant : chaque document Excel contient, entre autres choses, une localité et un département (sous forme de texte, à cause des 01, 02, ... pour avoir toujours 2 caractères).
La base Access contient une table avec le code INSEE des 36000 communes françaises. Les 2 premiers caractères du code INSEE correspondent au département, comme un code postal. Je dois alimenter une autre table avec une douzaine de champs dont la localité et le code INSEE.
J'ai construit une requête, "ReqCommune" qui me liste toutes les communes ayant pour nom la valeur d'une cellule nommée "Localité1" dans le document Excel. Par exemple, il y a 4 "Montréal", situés dans 4 départements différents. La voici :
SELECT LOCALITE.insee_comm, LOCALITE.NCC FROM LOCALITE, Param WHERE (((LOCALITE.NCC)=[Param].[Localité]));
"Param" est une table qui ne contient qu'un enregistrement, avec la localité et le département, tels qu'ils apparaissent dans le document Excel.
"Param" est alimentée par la Sub "MAJParam", appelée par la Sub "Test1".
Une seconde requête, "ReqCommuneDepConnu", exploite le résultat de la première ("ReqCommune") et fait appel à une fonction, "Test" dont le code est reproduit plus bas. Il s'agit d'éliminer les communes ayant le bon nom, mais situées dans un autre département :
SELECT ReqCommune.insee_comm, ReqCommune.NCC FROM ReqCommune, Param WHERE (((Test([ReqCommune]![insee_comm],[Param]![Dép]))=True));
A partir de la Sub "Test2", j'arrive à lancer la requête "ReqCommune", sans difficulté particulière.
Par contre je suis incapable (Sub "Test3") de faire pareil avec "ReqCommuneDepConnu" : j'obtiens le message (pas très surprenant d'ailleurs) "Erreur 3085 Fonction 'Test' non définie dans l'Expression".
J'ai voulu faire des essais avec
Q.Execute
ou
DB.Execute Q.Sql, dbFailOnError
sans succès ;-((((
Quelqu'un aurait-il une piste ?
Merci d'avance.
Extrait du code VBA Access (fonction utilisée par "ReqCommuneDepConnu" :
Function Test(Code$, Dep$) Test = (Left(Code, 2) = Dep) End Function
Extrait du code VBA Excel destiné à alimenter la base :
Option Explicit Private DB As Database, RS As Recordset
Private Sub OuvreBase() ChDir ThisWorkbook.Path Set DB = OpenDatabase(ThisWorkbook.Sheets(1).Evaluate("Base")) End Sub
Private Sub Test1() MAJParam ActiveWorkbook.Sheets(1).Range("Localité1") ' Suite du code, à venir End Sub
Private Sub MAJParam(Loc As Range) OuvreBase Set RS = DB.OpenRecordset("Param") RS.Edit RS!Localité = Loc RS!Dép = Loc.Offset(2) RS.Update RS.Close DB.Close End Sub
Private Sub Test2() Dim Q As QueryDef, RS As Recordset OuvreBase Set Q = DB.QueryDefs("ReqCommune") Set RS = DB.OpenRecordset(Q.Sql) MsgBox RS!insee_comm End Sub
Private Sub Test3() Dim Q As QueryDef, RS As Recordset OuvreBase Set Q = DB.QueryDefs("ReqCommuneDepConnu") Set RS = DB.OpenRecordset(Q.Sql) MsgBox RS!insee_comm End Sub
-- Cordialement,
Michel Gaboly www.gaboly.com
Bonjour,
Question idiote, mais je la pose quand même:
As-tu testé cette requête directement dans Access?
--
Gilbert
"Michel Gaboly" <michelgaboly@bluewin.ch> a écrit dans le message de news:
uuH$thpcHHA.2316@TK2MSFTNGP04.phx.gbl...
Bonjour,
Habitué du MPFE (le Newsgroup Excel), je connais bien Excel et VBA, mais
très mal Access.
J'ai besoin d'alimenter une base Access à partir de documents Excel et je
rame ;-((
En l'occurrence mon problème est le suivant : chaque document Excel
contient, entre autres choses, une localité et un
département (sous forme de texte, à cause des 01, 02, ... pour avoir
toujours 2 caractères).
La base Access contient une table avec le code INSEE des 36000 communes
françaises. Les 2 premiers caractères du code
INSEE correspondent au département, comme un code postal. Je dois alimenter
une autre table avec une douzaine de champs
dont la localité et le code INSEE.
J'ai construit une requête, "ReqCommune" qui me liste toutes les communes
ayant pour nom la valeur d'une cellule nommée
"Localité1" dans le document Excel. Par exemple, il y a 4 "Montréal", situés
dans 4 départements différents. La voici :
SELECT LOCALITE.insee_comm, LOCALITE.NCC
FROM LOCALITE, Param
WHERE (((LOCALITE.NCC)=[Param].[Localité]));
"Param" est une table qui ne contient qu'un enregistrement, avec la localité
et le département, tels qu'ils apparaissent
dans le document Excel.
"Param" est alimentée par la Sub "MAJParam", appelée par la Sub "Test1".
Une seconde requête, "ReqCommuneDepConnu", exploite le résultat de la
première ("ReqCommune") et fait appel à une
fonction, "Test" dont le code est reproduit plus bas. Il s'agit d'éliminer
les communes ayant le bon nom, mais situées
dans un autre département :
SELECT ReqCommune.insee_comm, ReqCommune.NCC
FROM ReqCommune, Param
WHERE (((Test([ReqCommune]![insee_comm],[Param]![Dép]))=True));
A partir de la Sub "Test2", j'arrive à lancer la requête "ReqCommune", sans
difficulté particulière.
Par contre je suis incapable (Sub "Test3") de faire pareil avec
"ReqCommuneDepConnu" : j'obtiens le message (pas très
surprenant d'ailleurs) "Erreur 3085 Fonction 'Test' non définie dans
l'Expression".
J'ai voulu faire des essais avec
Q.Execute
ou
DB.Execute Q.Sql, dbFailOnError
sans succès ;-((((
Quelqu'un aurait-il une piste ?
Merci d'avance.
Extrait du code VBA Access (fonction utilisée par "ReqCommuneDepConnu" :
Function Test(Code$, Dep$)
Test = (Left(Code, 2) = Dep)
End Function
Extrait du code VBA Excel destiné à alimenter la base :
Option Explicit
Private DB As Database, RS As Recordset
Private Sub OuvreBase()
ChDir ThisWorkbook.Path
Set DB = OpenDatabase(ThisWorkbook.Sheets(1).Evaluate("Base"))
End Sub
Private Sub Test1()
MAJParam ActiveWorkbook.Sheets(1).Range("Localité1")
' Suite du code, à venir
End Sub
Private Sub MAJParam(Loc As Range)
OuvreBase
Set RS = DB.OpenRecordset("Param")
RS.Edit
RS!Localité = Loc
RS!Dép = Loc.Offset(2)
RS.Update
RS.Close
DB.Close
End Sub
Private Sub Test2()
Dim Q As QueryDef, RS As Recordset
OuvreBase
Set Q = DB.QueryDefs("ReqCommune")
Set RS = DB.OpenRecordset(Q.Sql)
MsgBox RS!insee_comm
End Sub
Private Sub Test3()
Dim Q As QueryDef, RS As Recordset
OuvreBase
Set Q = DB.QueryDefs("ReqCommuneDepConnu")
Set RS = DB.OpenRecordset(Q.Sql)
MsgBox RS!insee_comm
End Sub
Question idiote, mais je la pose quand même: As-tu testé cette requête directement dans Access?
-- Gilbert
"Michel Gaboly" a écrit dans le message de news: uuH$ Bonjour,
Habitué du MPFE (le Newsgroup Excel), je connais bien Excel et VBA, mais très mal Access.
J'ai besoin d'alimenter une base Access à partir de documents Excel et je rame ;-((
En l'occurrence mon problème est le suivant : chaque document Excel contient, entre autres choses, une localité et un département (sous forme de texte, à cause des 01, 02, ... pour avoir toujours 2 caractères).
La base Access contient une table avec le code INSEE des 36000 communes françaises. Les 2 premiers caractères du code INSEE correspondent au département, comme un code postal. Je dois alimenter une autre table avec une douzaine de champs dont la localité et le code INSEE.
J'ai construit une requête, "ReqCommune" qui me liste toutes les communes ayant pour nom la valeur d'une cellule nommée "Localité1" dans le document Excel. Par exemple, il y a 4 "Montréal", situés dans 4 départements différents. La voici :
SELECT LOCALITE.insee_comm, LOCALITE.NCC FROM LOCALITE, Param WHERE (((LOCALITE.NCC)=[Param].[Localité]));
"Param" est une table qui ne contient qu'un enregistrement, avec la localité et le département, tels qu'ils apparaissent dans le document Excel.
"Param" est alimentée par la Sub "MAJParam", appelée par la Sub "Test1".
Une seconde requête, "ReqCommuneDepConnu", exploite le résultat de la première ("ReqCommune") et fait appel à une fonction, "Test" dont le code est reproduit plus bas. Il s'agit d'éliminer les communes ayant le bon nom, mais situées dans un autre département :
SELECT ReqCommune.insee_comm, ReqCommune.NCC FROM ReqCommune, Param WHERE (((Test([ReqCommune]![insee_comm],[Param]![Dép]))=True));
A partir de la Sub "Test2", j'arrive à lancer la requête "ReqCommune", sans difficulté particulière.
Par contre je suis incapable (Sub "Test3") de faire pareil avec "ReqCommuneDepConnu" : j'obtiens le message (pas très surprenant d'ailleurs) "Erreur 3085 Fonction 'Test' non définie dans l'Expression".
J'ai voulu faire des essais avec
Q.Execute
ou
DB.Execute Q.Sql, dbFailOnError
sans succès ;-((((
Quelqu'un aurait-il une piste ?
Merci d'avance.
Extrait du code VBA Access (fonction utilisée par "ReqCommuneDepConnu" :
Function Test(Code$, Dep$) Test = (Left(Code, 2) = Dep) End Function
Extrait du code VBA Excel destiné à alimenter la base :
Option Explicit Private DB As Database, RS As Recordset
Private Sub OuvreBase() ChDir ThisWorkbook.Path Set DB = OpenDatabase(ThisWorkbook.Sheets(1).Evaluate("Base")) End Sub
Private Sub Test1() MAJParam ActiveWorkbook.Sheets(1).Range("Localité1") ' Suite du code, à venir End Sub
Private Sub MAJParam(Loc As Range) OuvreBase Set RS = DB.OpenRecordset("Param") RS.Edit RS!Localité = Loc RS!Dép = Loc.Offset(2) RS.Update RS.Close DB.Close End Sub
Private Sub Test2() Dim Q As QueryDef, RS As Recordset OuvreBase Set Q = DB.QueryDefs("ReqCommune") Set RS = DB.OpenRecordset(Q.Sql) MsgBox RS!insee_comm End Sub
Private Sub Test3() Dim Q As QueryDef, RS As Recordset OuvreBase Set Q = DB.QueryDefs("ReqCommuneDepConnu") Set RS = DB.OpenRecordset(Q.Sql) MsgBox RS!insee_comm End Sub
-- Cordialement,
Michel Gaboly www.gaboly.com
Michel Gaboly
Bonjour,
La question n'a rien d'idiot ; il vaut toujours mieux vérifier les base s ;-))
Oui, j'ai testé, et cela marche !
Merci
Bonjour,
Question idiote, mais je la pose quand même: As-tu testé cette requête directement dans Access?
-- Cordialement,
Michel Gaboly www.gaboly.com
Bonjour,
La question n'a rien d'idiot ; il vaut toujours mieux vérifier les base s ;-))
Oui, j'ai testé, et cela marche !
Merci
Bonjour,
Question idiote, mais je la pose quand même:
As-tu testé cette requête directement dans Access?