Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 13/04/2011, 13h43   #1
Futur Membre du Club
 
Homme
Inscription : avril 2011
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 48
Points : 15
Points : 15
Par défaut Fonction VBA et requete SQL

Bonjour,

Dans le cadre de mon travail, je retouche une application Access (série de formulaires) développée par une personne avant moi.
Je suis relativement Novice en Access, mais je maitrise le SQL et autres programmes.

Je rencontre actuellement un problème:
Je cherche à modifier un formulaire afin que certains champs soient concaténés en un seul (plusieurs villes appartenant à une même zone géographique). J'ai trouvé un programme VBA sur internet me permettant cela: http://access.fr.free.fr/articles.php?lng=fr&pg=45

J'ai donc créé cette fonction dans un module de ma base de données.
Cependant, j'interviens sur la requête sql définissant la source du formulaire (donc à priori hors VBA), et quand j'utilise la fonction, le message "Fonction non définie dans l'expression".

Avez-vous la solution à mon problème ou un conseil??

Merci!
Farabon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 14h24   #2
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 737
Points : 10 737
Envoyer un message via MSN à jpcheck
salut,

une solution est disponible via la a ce sujet
http://access.developpez.com/sources...QLLigneColonne
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 16h05   #3
Futur Membre du Club
 
Homme
Inscription : avril 2011
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 48
Points : 15
Points : 15
Merci pour la réponse rapide!

Donc je me suis inspiré du code du lien que vous m'avez envoyé.
J'ai créé un module avec la fonction à l'intérieur, définie en "Public".

Cependant, quand je fais appel à cette fonction dans la requête SQL dont va dépendre mon formulaire, je reçois un message me disant que la fonction n'est pas définie dans l'expression...
Si j'essaie de faire ça directement en VBA, c'est la même problème...

Donc j'imagine que ma fonction créée n'est pas reconnue par Access, elle ne s'est pas insérée dans le panel des fonctions disponibles et n'est donc jamais reconnue...

Comment faire pour que cette fonction soit utilisable?

Merci encore
Farabon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 16h08   #4
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 737
Points : 10 737
Envoyer un message via MSN à jpcheck
OK,
peux-tu jeter un oeil dans les references de ta base, il est probable que certaines librairies/references soient indiquees comme MANQUANT. Decoche celles qui manquent et relance le code.
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 16h32   #5
Futur Membre du Club
 
Homme
Inscription : avril 2011
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 48
Points : 15
Points : 15
A priori rien de manquant dans les modules cochés... A moins que cette info soit masquée...

Mais j'ai déjà tenté de décocher un truc, compiler la base, recocher le truc, recompiler la base et... rien de neuf sous les tropiques...
Farabon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 17h05   #6
Futur Membre du Club
 
Homme
Inscription : avril 2011
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 48
Points : 15
Points : 15
ne idée de comment m'en sortir?

A savoir que la personne ayant construit la Base de données et l'application a déjà utilisé des fonctions qui sont utilisées...
Mais moi ça marche pas
Farabon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 17h08   #7
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 737
Points : 10 737
Envoyer un message via MSN à jpcheck
Peut-on voir le contenu SQL que tu souhaites lancer stp ?
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 17h16   #8
Futur Membre du Club
 
Homme
Inscription : avril 2011
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 48
Points : 15
Points : 15
Ca risque d'être une peu indigeste... Mais allons y!

Donc le code de ma fonction:
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
Option Compare Database
Option Explicit
 
'Permet de dresser la liste des Communes liées à un Milieu Aquatique
'Pour cela, utiliser une requete SQL du type:
'SELECT DISTINCT Ti_com_MA.IdentifiantMA, ListeCommunes(IdentifiantMA) AS Communes FROM Ti_com_MA;
 
Function ListeCommunes(MA As Long) As String
 
    Dim res As DAO.Recordset
    Dim SQL As String
 
    'Selectionne les participant du projet
    SQL = "SELECT Co_nom FROM TL_Commune INNER JOIN Ti_com_MA ON Co_Id = INSEE WHERE IdentifiantMA=" & MA
    Set res = CurrentDb.OpenRecordset(SQL)
 
    'Concatene les différents enregistrement
    While Not res.EOF
    ListeCommunes = ListeCommunes & res.Fields(0).Value & ", "
    res.MoveNext
    Wend
 
    'Enleve le dernier virgule - espace
    ListeCommunes = Left(ListeCommunes, Len(ListeCommunes) - 2)
 
    'libere la mémoire
    Set res = Nothing
 
End Function
Et le SQL que j'essaie de lancer à l'ouverture de mon formulaire:
Code SQL :
1
2
3
4
5
6
7
8
9
SELECT T_MA.IdentifiantMA, T_MA.Nom_MA, Ti_Com_MA.IdentifiantMA, Ti_Com_MA.INSEE, Ti_Com_MA.id_projet, TL_Commune.Co_Id, ListeCommunes(Ti_com_MA.IdentifiantMA) AS Communes, TL_Commune.Co_Dp_Id, TL_Commune.Co_Id1, TL_Departement.DEP_CODE, TL_Departement.DEP_LIB, Ti_MA_projet.ID_MAprojet, Ti_MA_projet.Code_projet

FROM TL_Departement INNER JOIN (TL_Commune INNER JOIN ((T_MA INNER JOIN Ti_Com_MA ON T_MA.IdentifiantMA = Ti_Com_MA.IdentifiantMA) INNER JOIN Ti_MA_projet ON T_MA.IdentifiantMA = Ti_MA_projet.Code_hydro) ON TL_Commune.Co_Id = Ti_Com_MA.INSEE) ON TL_Departement.DEP_CODE = TL_Commune.Co_Dp_Id

GROUP BY T_MA.IdentifiantMA, T_MA.Nom_MA, Ti_Com_MA.IdentifiantMA, Ti_Com_MA.INSEE, Ti_Com_MA.id_projet, TL_Commune.Co_Id, TL_Commune.Co_nom, TL_Commune.Co_Dp_Id, TL_Commune.Co_Id1, TL_Departement.DEP_CODE, TL_Departement.DEP_LIB, Ti_MA_projet.ID_MAprojet, Ti_MA_projet.Code_projet

HAVING (((Ti_Com_MA.id_projet)=[Formulaires]![F_SommaireMilieu_Aquatique_consult]![Texte0]) AND ((Ti_MA_projet.Code_projet)=[Formulaires]![F_SommaireMilieu_Aquatique_consult]![Texte0]))

ORDER BY TL_Departement.DEP_CODE;
Farabon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 17h20   #9
Futur Membre du Club
 
Homme
Inscription : avril 2011
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 48
Points : 15
Points : 15
A savoir qu'une requete simple du type:

Code :
1
2
SELECT IdentifiantMA, ListeCommunes(IdentifiantMA) AS Communes
FROM Ti_com_MA;
Ne marche pas non plus
Farabon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 17h28   #10
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 737
Points : 10 737
Envoyer un message via MSN à jpcheck
OK,

partons du debut :
- ta fonction lancee par VBA donne-t-elle le resultat escompte
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 17h47   #11
Futur Membre du Club
 
Homme
Inscription : avril 2011
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 48
Points : 15
Points : 15
Quand je teste dans le volet exécution de VBA, et que je lance ListeCommunes(M0022)

Cela me dit "Erreur de compilation. Variable ou procédure attendue, et non un module)

Je suis débutant en VBA, je comprend la logique des codes mais je suis peu familier avec ce langage...
Farabon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 18h04   #12
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 737
Points : 10 737
Envoyer un message via MSN à jpcheck
OK,

sais-tu sur quelle ligne de code l'application semble te jeter ?
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 09h29   #13
Futur Membre du Club
 
Homme
Inscription : avril 2011
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 48
Points : 15
Points : 15
Oulala...

Je suis novice, comme je l'ai dit...
Donc je vais doucement réexpliquer ce que j'ai fait, et si possible tu me diras un peu les étapes. Désolé si je prend beaucoup de ton temps.

1 - J'ai créé ma fonction dans un module.
2 - Je vais dans le formulaire qui m'intéresse pour faire appel à ma fonction, et j'attends en sortie un tableau de données (en mode consultation) avec le récapitulatif des différents champs y compris celui concaténé dans le sous formulaire
3 - pour cela, je me met en mode édition sur le sous-formulaire, et je modifie la requête à la base du formulaire à partir d'un clic droit sur le sous-formulaire et modifie le champ "Source" des sous-propriétés, avec la requête que j'avais postée plus haut (qui est certes un peu indigeste).

Donc voilà, ça ne marche pas... L'erreur de fonction non définie est là.

Je ne sais pas comment tester ma fonction, ni comment tester la requête sauf à partir de la fenêtre d'édition de la requête et le petit bouton "exécuter"

Donc si tu peux me guider en mode pas à pas, ça m'aiderai pas mal, je comprend mal le fonctionnement d'access et j'ai du mal à trouver l'info sur les différents forums du net.

Merci encore
Farabon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 10h23   #14
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 737
Points : 10 737
Envoyer un message via MSN à jpcheck
OK,

en allant dans l'editeur VBE, tu crees une Sub bidon qui va appeler ta fonction

Code :
1
2
3
Sub bidon()
Debug.Print ListeCommunes(1)
End Sub
tu choisis bien sur un numero qui doit avoir des resultats.

tu mets ton curseur sur la ligne Debug, et tu cliques sur F8 (on fait ce qu'on appelle du pas a pas), tu vas avoir au moment de rentrer dans la fonction ListeCommunes un erreur, avec en principe une indication de la ligne ou le code "te jette".
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 10h55   #15
Futur Membre du Club
 
Homme
Inscription : avril 2011
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 48
Points : 15
Points : 15
C'est fait.
Il y avait un petit soucis de syntaxe dans ma fonction.
C'est corrigé et le résultat attendu est donné.

Cependant, l'erreur de fonction non définie persiste quand je teste ma requete dans le formulaire...
Farabon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 10h57   #16
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 737
Points : 10 737
Envoyer un message via MSN à jpcheck
peux-tu ajouter la portee de ta fonction en Public ou est-ce deja fait ?
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 11h12   #17
Futur Membre du Club
 
Homme
Inscription : avril 2011
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 48
Points : 15
Points : 15
C'est fait...

Sur la même page que ma fonction, juste à la suite, je lance:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Sub bidon()
Debug.Print ListeCommunes(7)
 
    Dim res2 As DAO.Recordset
    Dim SQL3 As String
 
 
SQL3 = "SELECT DISTINCT IdentifiantMA, ListeCommunes(IdentifiantMA) AS Communes FROM Ti_com_MA"
 
Set res2 = CurrentDb.OpenRecordset(SQL3)
 
End Sub
Tout se passe très bien pour le débogage de ListeCommunes(7), j'ai dans ma fenêtre Exécution le résultat attendu.
Cependant, arrivé à Set res2, l'annonce de fonction non définie...
Pourtant tout est comme dans l'exemple que tu m'avais posté plus haut, juste adapté à ma BdD...

Une idée de ce qu'il se passe?
Farabon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 11h21   #18
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 737
Points : 10 737
Envoyer un message via MSN à jpcheck


est-il possible pour toi de compacter la base, la zipper et de la mettre sur le forum ?
en pensant a enlever les donnees confidentielles et tout element non diffusable
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 11h27   #19
Futur Membre du Club
 
Homme
Inscription : avril 2011
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 48
Points : 15
Points : 15
C'est un peu délicat à vrai dire...
Je viens de débuter et je ne sais pas définir ce qui est diffusable ou non, à savoir que même la structure de la BdD peut l'être...

La solution de simple discussion me conviens mieux, je n'ai pas envie d'avoir des ennuis ou quoi que ce soit.

As-tu une idée de choses à tester?
Farabon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 11h49   #20
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 737
Points : 10 737
Envoyer un message via MSN à jpcheck
ok

si on repart sur l'interface access, la requete
Code SQL :
SELECT DISTINCT IdentifiantMA, ListeCommunes(IdentifiantMA) AS Communes FROM Ti_com_MA
plante bien aussi lorsque tu crees une nouvelle requete ?
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck 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 02h26.


 
 
 
 
Partenaires

Hébergement Web