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 26/01/2011, 07h29   #1
Invité de passage
 
Guillaume
Inscription : janvier 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Guillaume

Informations forums :
Inscription : janvier 2011
Messages : 16
Points : 2
Points : 2
Par défaut Création BDD - Recherche Multi-critères

Bonjour à tous,

Je travaille à la création d'une 'BDD Universités'.

Chaque Université est définie par un certain nombre de critères comme les matières d'enseignement, la participation à des programmes internationaux etc.

A chaque Université sont associés des contacts et des boursiers.

Le but de la BDD est de créer des mailings à un groupe de boursiers et/ou contacts à partir d'une sélection multi-critères de leur université d'appartenance: ville, région, matière(s), programmes internationaux etc.

EX: Quels sont les contacts dont l'Université est située dans la région X et qui enseigne la Chimie?

J'ai plein de problèmes!

J'ai réussi à créer un formulaire de recherche multi-critères à partir du document mis en ligne par Charles A et qui a fait un peu le tour du web (http://cafeine.developpez.com/access...echerchemulti/).

Tout marchait bien tant que j'utilisais la Table Université et la Table Ville (une ville par université). Je basais ma recherche multi-critères sur une Requête utilisant les deux tables et j'arrivais à extraire les Universités voulues en fonction de leur ville

Mais, j'ai essayé de rajouter le critère Matière dans ma recherche et là ça ne marche plus !

J'ai une Table Matière liée à ma Table Université (plusieurs matières par université). Lorsque j'intègre des critères de cette Table Matière à ma Requête de recherche je n'extrais plus du tout ce que je veux, les Universités pouvant être listées plusieurs fois (si elles enseignent plusieurs matières) ou pas du tout (si l'on a précisé aucune matière, ce que je souhaite être possible).

Je suis ainsi à la recherche de Tuto, Conseils, tout ce qui pourrait m'aider à me sortir du trou! Je peux mettre à disposition les tables et la base si cela est nécessaire. Je suis débutant en ACCESS... J'ai essayé d'être clair, j'espère ne pas avoir été trop long et ennuyeux!

MERCI!
gigite974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 15h31   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour et bienvenue sur forum.

Citation:
Envoyé par gigite974 Voir le message
Lorsque j'intègre des critères de cette Table Matière à ma Requête de recherche je n'extrais plus du tout ce que je veux, les Universités pouvant être listées plusieurs fois (si elles enseignent plusieurs matières)
Ça peut peut-être se résoudre avec un SELECT DISTINCT si la requête ne sélectionne pas les matières.

Citation:
Envoyé par gigite974 Voir le message
... ou pas du tout (si l'on a précisé aucune matière, ce que je souhaite être possible)
Là il doit y avoir un souci dans le code.

Tu peux poster une copie de ta base (format 2000 si possible), ça sera plus simple.
Ne garde que ce qui concerne ton problème (tables avec quelques enregistrements et le formulaire de recherche).
Ensuite compacte la base et compresse la pour la poster.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 07h23   #3
Invité de passage
 
Guillaume
Inscription : janvier 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Guillaume

Informations forums :
Inscription : janvier 2011
Messages : 16
Points : 2
Points : 2
Bonjour et merci pour cette réponse.

1- J'ai ajouté un SELECT DISTINCT dans mon code. La liste de résultats affiche maintenant effectivement bien 'un seul exemplaire' de chaque Université même si elle a plusieurs matières.

Malheureusement, les résultats ne sont pas modifiés dans les 'statistiques' qui continuent d'afficher un nombre de résultats dépendant du nombre de matières.

2- Voilà une copie de la Base, simplifiée à l'essentiel nous concernant ici.

Le formulaire en question s'appelle: F_Multi_Criteres_Univ
Il est basé sur la requête: R_Multi_Criteres

Les Universités sans Matière ne sont toujours pas sélectionnées dans la Liste de résultats (lstResults)

3- Vous constaterez que le critère 'Licence' (qui est un bouton à cocher dans la table Université) ne fonctionne pas. J'ai suivi le même procédé que pour les autres critères. Si jamais vous voyez ou est le problème...

Merci encore mille fois.
Guillaume
gigite974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 19h45   #4
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

J'ai essayé de faire le moins de modification possible, pour rester dans quelque chose de simple.
Mais je dois avouer que le tutoriel s'applique mieux à une table qu'à une requête multi-tables.

Pour éviter la multiplication des enregistrements j'ai enlevé la table T_Matières_Déroulante de la requête R_Multi_Criteres.
Du coup le DISTINCT n'est plus nécessaire.
Cela complique l'écriture du critère sur la matière, mais ça fonctionne.
Code :
1
2
3
4
5
6
7
8
If Not Me.chkMatière Then
    If IsNull(Me.cmbRechMatière) Then
       ' Universités sans matière
       SQL = SQL & "And Exists(SELECT * FROM T_Matières_Déroulante Where (NumUniversité=R_Multi_Criteres.NumUniversité))=False "
    Else
       SQL = SQL & "And Exists(SELECT * FROM T_Matières_Déroulante Where (NumUniversité=R_Multi_Criteres.NumUniversité) And (Matière =" & Me.cmbRechMatière & ")) "
    End If
End If
Dans la table NumMatière_Déroulante j'ai converti le champ Matière de Texte en Numérique,
pour pouvoir le lier au champ NumMatière de la table T_Matières.

J'ai simplifié les instructions SQL sources des listes déroulantes.

J'espère ne pas avoir commis d'erreur. Je te laisse tester.
A+
Fichiers attachés
Type de fichier : zip BDD univ3_2.zip (49,4 Ko, 11 affichages)
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 09h16   #5
Invité de passage
 
Guillaume
Inscription : janvier 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Guillaume

Informations forums :
Inscription : janvier 2011
Messages : 16
Points : 2
Points : 2
Bonjour,
Et merci! C'est exactement ce que je cherchais à faire et ça marche très bien.

J'ai encore une ou deux petites questions concernant ce formulaire.

- La case à cocher 'Licence' ne fonctionne pas. Quand je cherche à sélectionner les enregistrements des Universités qui proposent des Licences, cela provoque un bug et je ne sais pas comment le résoudre. J'ai bêtement utilisé la même méthode que pour les autres...

- La Table Université est liée à une Table Contacts. L'idée est d'utiliser les résultats obtenus dans lstResults sur F_Multi_Criteres_Univ et d'extraire les coordonnées des contacts correspondants à notre choix d'universités. Là encore je bloque... Si tu as des pistes. Mais peut-être dois-je ouvrir une autre discussion dans le forum car c'est un autre sujet je crois.

Bonne journée!
Guillaume
gigite974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 20h24   #6
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Citation:
Envoyé par gigite974 Voir le message
La case à cocher 'Licence' ne fonctionne pas. Quand je cherche à sélectionner les enregistrements des Universités qui proposent des Licences, cela provoque un bug et je ne sais pas comment le résoudre. J'ai bêtement utilisé la même méthode que pour les autres...
C'est parce que le champ de la table auquel on applique le critère est de type Oui/Non (booléen).
En fonction du type de champ, l'écriture du code SQL pour le critère est différent.
Code :
Champ = True | False | -1 | 0
(| signfie OU)
Pour simplifier, j'ai remplacé la liste déroulante par un groupe d'options.
cmbLicense -> grpLicense
Le code du critère devient
Code :
1
2
3
If Not Me.chkLicence Then
    SQL = SQL & "And R_Multi_Criteres!Licence = " & Me.grpLicense & " "
End If
Tu remarqueras la disparition des guillemets simples (').
Le groupe d'option grpLicense a deux valeurs possibles : -1 (Oui) ou 0 (Non).

Le code de la case à cocher License devient
Code :
1
2
3
4
5
6
7
8
9
10
11
Private Sub chkLicence_Click()
 
If Me.chkLicence Then
    Me.grpLicense.Visible = False
Else
    Me.grpLicense.Visible = True
End If
 
RefreshQuery
 
End Sub
Et enfin, comme pour les listes déroulantes, on gère l'événement "Avant changement" du groupe d'options grpLicense
Code :
1
2
3
4
5
Private Sub grpLicense_BeforeUpdate(Cancel As Integer)
 
RefreshQuery
 
End Sub

Citation:
Envoyé par gigite974 Voir le message
La Table Université est liée à une Table Contacts. L'idée est d'utiliser les résultats obtenus dans lstResults sur F_Multi_Criteres_Univ et d'extraire les coordonnées des contacts correspondants à notre choix d'universités. Là encore je bloque... Si tu as des pistes. Mais peut-être dois-je ouvrir une autre discussion dans le forum car c'est un autre sujet je crois.
Comme la zone de liste lstResults renvoie la clé de la table T_Université, on peut exploiter l'événement "Sur Clic" de cette zone de liste.
(C'est ce que j'ai fait pour afficher les matières).
L'idée est que les zones de listes lstMatières et lstContacts sont basées sur des requêtes filtrées sur la valeur de lstResults.
Lorsque l'utilisateur clique sur la liste des résultats lstResults, on commande aux zones de listes lstMatières et lstContacts de réexécuter leurs requêtes respectives.
Code :
1
2
3
4
Private Sub lstResults_Click()
Me.lstMatières.Requery
Me.lstContacts.Requery
End Sub
Si la valeur de lstResults a changé, le contenu de lstMatières et lstContacts s'actualisera.

lstContacts n'affiche pas la totalité des informations.
Principe similaire, la colonne liée (qui donne sa valeur à la liste) de lstContacts est NumContact, la clé de la table T_Contacts.
Sur clic sur la liste lstContacts, on appelle une procédure qui va mettre à jour des zone de textes
Code :
1
2
3
Private Sub lstContacts_Click()
ActualiserInfosContacts
End Sub
Cette procédure utilise la fonction Dlookup
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub ActualiserInfosContacts()
Dim lgNumContact As Long
 
If Me.lstContacts.ListIndex <> -1 Then
   ' Valeur Colonne liée (NumContact)
   lgNumContact = Me.lstContacts
   Me.txContactMail1 = DLookup("Mail1", "T_Contacts", "NumContact=" & lgNumContact)
   Me.txContactMail2 = DLookup("Mail2", "T_Contacts", "NumContact=" & lgNumContact)
   Me.txContactNumTel1 = DLookup("NumTel1", "T_Contacts", "NumContact=" & lgNumContact)
   Me.txContactNumTel2 = DLookup("NumTel2", "T_Contacts", "NumContact=" & lgNumContact)
   Me.txContactCommentaire = DLookup("Commentaire", "T_Contacts", "NumContact=" & lgNumContact)
Else
   ViderInfosContacts
End If
End Sub
ViderInfosContacts est une autre procédure qui sert à effacer les zones de textes.
Code :
1
2
3
4
5
6
7
8
9
Private Sub ViderInfosContacts()
Dim ctl As Control
 
For Each ctl In Me.Controls
    If ctl.Name Like "txContact*" Then
       ctl.Value = Null
    End If
Next ctl
End Sub
On pourrait imaginer d'autres solutions, avec moins de code.
Des sous-formulaires liés à lstResults par exemple.
L'assistant ne sais pas le faire, mais il suffit de mettre en champ père
et en champ fils le champ NumUniversité, qui bien sûr doit être un des champs de la source du sous-formulaire.
C'est simple à mettre en oeuvre mais lent à l'affichage.

A toi de voir si tu privilégie la simplicité (mise en oeuvre et maintenance) ou pas.

A+
Fichiers attachés
Type de fichier : zip BDD univ3_3.zip (58,9 Ko, 6 affichages)
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 09h26   #7
Invité de passage
 
Guillaume
Inscription : janvier 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Guillaume

Informations forums :
Inscription : janvier 2011
Messages : 16
Points : 2
Points : 2
Bonjour,

Je commence à comprendre pas mal de choses et le projet avance Merci !

- J'ai reproduit la zone de liste contacts pour créer une zone de liste boursiers, à partir d'une Table Boursiers que j'ai introduit. Ca fonctionne... presque! Il y a un petit bug à l'affichage des données, et je n'arrive pas à trouver ce qui cloche...

- Deuxième chose: Pour une sélection d'Université (ex: les Universités de la ville d'Astana), j'aimerais pouvoir faire un mailing à tous les contacts de toutes les Universités correspondantes. En gros, extraire toutes les adresses mails correspondants à cette recherche. Puis-je utiliser la lstResults pour cela?

Ca devrait être la dernière chose, après je me débrouille tout seul
Guillaume
gigite974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 23h12   #8
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Citation:
Envoyé par gigite974 Voir le message
J'ai reproduit la zone de liste contacts pour créer une zone de liste boursiers, à partir d'une Table Boursiers que j'ai introduit. Ca fonctionne... presque! Il y a un petit bug à l'affichage des données, et je n'arrive pas à trouver ce qui cloche...
Il n'y avait pas de lien entre l'événement "sur clic" et la procédure événementielle, parce que les noms ne concordaient pas.
Nom de la liste : lstBoursiers
Nom de la procédure : lstBousiers_Click (manquait un r)
A part ça tu a très bien reproduit ce que j'avais fait pour lstContacts. Impeccable .

Citation:
Envoyé par gigite974 Voir le message
Pour une sélection d'Université (ex: les Universités de la ville d'Astana), j'aimerais pouvoir faire un mailing à tous les contacts de toutes les Universités correspondantes. En gros, extraire toutes les adresses mails correspondants à cette recherche. Puis-je utiliser la lstResults pour cela?
Oui, voici un exemple de code qui parcours la colonne liée (NumUniversité) de la liste :
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
Private Sub CreerEmailsContactsTous()
Dim db As DAO.Database, rs As DAO.Recordset
Dim sEmails As String, i As Integer, iStart As Integer
Dim sSql As String, sIn As String
 
If Me.lstResults.ColumnHeads = True Then iStart = 1
For i = iStart To Me.lstResults.ListCount - 1
    sIn = sIn & Me.lstResults.ItemData(i) & ", "
Next
If Len(sIn) > 2 Then
   sIn = Left(sIn, Len(sIn) - 2)
   sSql = "SELECT Mail1 As EMail FROM T_Contacts Where NumUniversité IN (" & sIn & ") And Mail1 Like '*'" & vbCrLf
   sSql = sSql & "UNION" & vbCrLf
   sSql = sSql & "SELECT Mail2 As EMail FROM T_Contacts Where NumUniversité IN (" & sIn & ") And Mail2 Like '*'"
 
   Set db = CurrentDb
   Set rs = db.OpenRecordset(sSql)
   Do While Not rs.EOF
      sEmails = sEmails & ";" & rs("EMail")
      rs.MoveNext
   Loop
   If sEmails Like ";*" Then sEmails = Mid(sEmails, 2)
   rs.Close
   Me.txEmailsContactsTous = sEmails
End If
End Sub
Le code constitue d'abord la liste des NumUniversités dans le but de créer une instruction SQL de sélection, en utilisant cette liste comme critère.
L'instruction SQL est de type requête UNION de manière à avoir les champs Mail1 et Mail2 dans une seule et même colonne.
Ensuite le code utilise un objet recordset pour parcourir le jeu d'enregistrements résultant de l'instruction SQL de sélection.

Dans la pièce jointe CreerEmailsContactsTous est appelé chaque fois qu'on change un critère de sélection.
Il vaudrait peut-être mieux prévoir un bouton de commande, dans la version finale de ton application.

Si tu as Microsoft Outlook, on peut même créer l'email.

A+
Fichiers attachés
Type de fichier : zip BDD univ6.zip (69,6 Ko, 2 affichages)
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 07h18   #9
Invité de passage
 
Guillaume
Inscription : janvier 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Guillaume

Informations forums :
Inscription : janvier 2011
Messages : 16
Points : 2
Points : 2
Bonjour !

Au risque d'être ennuyeux, je vais me répéter: merci !

* L'extraction des adresses mails, c'est exactement ce que je cherchais à faire. Il est vrai qu'il serait plus simple de les extraire directement dans un mail Outlook, en cliquant sur un bouton... Tu crois que tu me dirais comment faire..? Je pourrais comme ça le reproduire pour l'extraction des emails boursiers dont j'ai créé la macro.

* Une autre question. Les champs correspondants aux contacts et boursiers ne sont pas modifiables dans le Formulaire de recherche multi-critères. Comment modifier ce paramètre? Et faire en sorte que l'on puisse changer les données directement depuis ce 'moteur de recherche'?

Merci,
Guillaume
gigite974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 16h58   #10
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Pour la modification des informations des contacts et des boursiers, le plus simple est de créer des formulaires, que l'on ouvre sur double-clic.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub lstContacts_DblClick(Cancel As Integer)
Dim lgNumContact As Long
If Me.lstContacts.ListIndex <> -1 Then
   lgNumContact = Me.lstContacts.Value
   DoCmd.OpenForm "F_Contact", acNormal, , "NumContact = " & lgNumContact, acFormEdit, acDialog
   ' actualiser liste des contacts pour le cas où on change
   ' l'université à laquelle le contact appartient
   Me.lstContacts.Requery
   ' actualiser infos contact
   ViderInfosContacts
   ActualiserInfosContacts
End If
End Sub
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub lstBoursiers_DblClick(Cancel As Integer)
Dim lgNumBoursier As Long
If Me.lstBoursiers.ListIndex <> -1 Then
   lgNumBoursier = Me.lstBoursiers.Value
   DoCmd.OpenForm "F_Boursier", acNormal, , "NumBoursier = " & lgNumBoursier, acFormEdit, acDialog
   ' actualiser liste des boursiers pour le cas où on change
   ' l'université à laquelle le boursier appartient
   Me.lstBoursiers.Requery
   ' actualiser infos boursier
   ViderInfosBoursiers
   ActualiserInfosBoursiers
End If
End Sub
Pour la création d'emails, j'ai mis en place deux boutons qui font appel à une procédure se trouvant dans un module de code.
Chez moi je n'utilise pas Outlook. Il n'est pas configuré.
J'ai un comportement anormal qui est peut-être dû à cela :
Outlook se ferme mal (Il reste un processus Outlook.exe en mémoire).

A+
Fichiers attachés
Type de fichier : zip BDD univ7.zip (82,9 Ko, 2 affichages)
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 11h14   #11
Invité de passage
 
Guillaume
Inscription : janvier 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Guillaume

Informations forums :
Inscription : janvier 2011
Messages : 16
Points : 2
Points : 2
Bonjour,

Quand on croit que y'en a plus, bah y'en a encore!

* Concernant la recherche Multi-critères générale :

- Si on clique deux fois de suite sur un 'critère' (ce qui revient à sélectionner le critère puis tout de suite le dé-sélectionner), on perd dans lstResults la liste complète des Universités. Comment peut-on faire pour que cela revienne??

- Cliquer sur le critère 'Programme PhD' divise de fait les enregistrements en fonction du type de programme PhD (Ingénierie, Droit, ou Matière non précisée). Comment peut-on faire pour avoir une option 'Tous', qui permettrait de sélectionner les établissements qui ont tous un Programme PhD, peu importe la matière?

* J'ai rajouté des recherches multi-critères pour les Boursiers et les Contacts. J'y arrive à peu près, ce qui est déjà un gros progrès, mais :

- Sélectionner les Boursiers ou Contacts par Ville... Impossible! J'ai tout essayé et ça ne veut jamais marcher...

- Dans la recherche Multi critères Boursiers, le Oui/Non francophone déconne et pareil, impossible de trouver là ou j'ai écrit une bêtise...

Voilà, Merci !
Guillaume
gigite974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 19h52   #12
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Citation:
Envoyé par gigite974 Voir le message
Si on clique deux fois de suite sur un 'critère' (ce qui revient à sélectionner le critère puis tout de suite le dé-sélectionner), on perd dans lstResults la liste complète des Universités. Comment peut-on faire pour que cela revienne??
C'est ma faute.
Il faut remplacer
Code :
1
2
3
4
5
6
7
' S'il y a des critères
If Len(sCrit) > 0 Then
   ' on retire le premier "And "
   sCrit = Mid(sCrit, 5)
End If
 
SQL = SQL & " Where " & sCrit & ";"
par
Code :
1
2
3
4
5
6
' S'il y a des critères
If Len(sCrit) > 0 Then
   ' on retire le premier "And "
   sCrit = Mid(sCrit, 5)
   SQL = SQL & " Where " & sCrit & ";"
End If
Citation:
Envoyé par gigite974 Voir le message
- Cliquer sur le critère 'Programme PhD' divise de fait les enregistrements en fonction du type de programme PhD (Ingénierie, Droit, ou Matière non précisée). Comment peut-on faire pour avoir une option 'Tous', qui permettrait de sélectionner les établissements qui ont tous un Programme PhD, peu importe la matière?
Zone de liste modifiable cmbRechPhD
La source du contenu est une requête union de trois requêtes.
Code :
1
2
3
4
5
6
7
SELECT T_PhD.Matière, T_Matières.Matière AS DescMatière, 3 As Tri
FROM T_PhD LEFT JOIN T_Matières ON T_PhD.Matière = T_Matières.NumMatière
GROUP BY T_PhD.Matière, T_Matières.Matière
UNION
SELECT TOP 1 -1 As Matière, "<Aucun>" As DescMatière, 1 As Tri FROM T_Phd
UNION
SELECT TOP 1 -2 As Matière, "<*>" As DescMatière, 2 As Tri FROM T_Phd  ORDER BY Tri, DescMatière;
Les deux dernières instructions SELECT génèrent deux enregistrements fictifs.

Le code traitant le critère PhD :
Code :
1
2
3
4
5
6
7
8
9
10
If Not Me.chkPhD Then
   Select Case Me.cmbRechPhD
       Case -1    ' <Aucun> Universités sans correspondance dans T_PhD
         sCrit = sCrit & "And Exists(SELECT * FROM T_PhD Where (NumUniversité=R_Multi_Criteres.NumUniversité))=False "
       Case -2    ' <*>     Universités avec au moins une correspondance dans T_PhD
         sCrit = sCrit & "And Exists(SELECT * FROM T_PhD Where (NumUniversité=R_Multi_Criteres.NumUniversité))=True "
       Case Else  ' Universités avec une correspondance dans T_PhD pour la matière sélectionnée
         sCrit = sCrit & "And Exists(SELECT * FROM T_PhD Where (NumUniversité=R_Multi_Criteres.NumUniversité) And (Matière =" & Me.cmbRechPhD & ")) "
   End Select
End If
Citation:
Envoyé par gigite974 Voir le message
- Sélectionner les Boursiers ou Contacts par Ville... Impossible! J'ai tout essayé et ça ne veut jamais marcher...
Ça vient des propriétés de cmbRechVille.
Il n'y a qu'une colonne et sa largeur est définie à 0cm ==> elle est donc invisible.

Citation:
Envoyé par gigite974 Voir le message
Dans la recherche Multi critères Boursiers, le Oui/Non francophone déconne et pareil, impossible de trouver là ou j'ai écrit une bêtise...
Je n'ai pas constaté d'anomalies.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 05h44   #13
Invité de passage
 
Guillaume
Inscription : janvier 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Guillaume

Informations forums :
Inscription : janvier 2011
Messages : 16
Points : 2
Points : 2
Bonjour,

Impossible d'ouvrir les formulaires dans le fichier 'BDD Univ8' que tu as joint sans qu'ACCESS n'ouvre des messages d'erreur.

J'ai essayé sur deux postes différents et le problème est toujours le même. Le fichier joint ici contient deux impressions d'écran te montrant les problèmes.

J'espère que tu pourras trouver d'où ça vient...

Merci
Guillaume
gigite974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 19h05   #14
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

C'est un problème de référence Visual Basic à Outlook.
J'ai modifié la base avec Access 2007 ce qui a changé la référence
de "Microsoft Outlook 11.0 Object Library" en "Microsoft Outlook 12.0 Object Library".

Il suffit d'aller dans l'éditeur Visual Basic et d'afficher les références (menu outils).
Ensuite tu décoches la ou les références dont le nom commence par MANQUANTE.
Enfin, tu re-coches les référence qui étaient manquantes.

J'ai réouvert la base en 2003, rectifié la référence, et remplacé la pièce jointe de mon post d'hier.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 05h15   #15
Invité de passage
 
Guillaume
Inscription : janvier 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Guillaume

Informations forums :
Inscription : janvier 2011
Messages : 16
Points : 2
Points : 2
Bonsoir à toi,

Il y a malheureusement toujours un problème qui se concentre sur le critère 'Programme PhD'.

Un clic dessus et cela m'envoie la fenêtre de bug. Tu verras en pièce jointe ce qu'il en est. J'ai vérifié la syntaxe du code mais n'ai pas trouvé d'erreur. Et j'imagine que si cela marche chez toi c'est qu'il s'agit peut-être d'un problème de compatibilité comme hier...

Voilà,
Merci pour ta patience,
Guillaume
gigite974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 20h07   #16
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

J'ai remis un test sur cmbRechPhD (comme pour cmbRechMatière) pour m'assurer que la valeur n'est pas Null.
Avec un critère de type texte ça passe, mais avec les autres types ça crée du SQL incorrect.
Code :
1
2
3
4
5
6
7
8
9
10
If Not Me.chkPhD And Not IsNull(Me.cmbRechPhD) Then
   Select Case Me.cmbRechPhD
       Case -1    ' <Aucun> Universités sans correspondance dans T_PhD
         sCrit = sCrit & "And Exists(SELECT * FROM T_PhD Where (NumUniversité=R_Multi_Criteres.NumUniversité))=False "
       Case -2    ' <*>     Universités avec au moins une correspondance dans T_PhD
         sCrit = sCrit & "And Exists(SELECT * FROM T_PhD Where (NumUniversité=R_Multi_Criteres.NumUniversité))=True "
       Case Else  ' Universités avec une correspondance dans T_PhD pour la matière sélectionnée
         sCrit = sCrit & "And Exists(SELECT * FROM T_PhD Where (NumUniversité=R_Multi_Criteres.NumUniversité) And (Matière =" & Me.cmbRechPhD & ")) "
   End Select
End If
A+
Fichiers attachés
Type de fichier : zip BDD univ8.zip (101,1 Ko, 4 affichages)
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 06h17   #17
Invité de passage
 
Guillaume
Inscription : janvier 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Guillaume

Informations forums :
Inscription : janvier 2011
Messages : 16
Points : 2
Points : 2
Bonjour,

La recherche multi-critères fonctionne parfaitement maintenant!

Mais ça ne m'empêche pas d'avoir d'autres petits problèmes...

- Je créée le Formulaire Universités. J'ai créée à l'intérieur deux sous-formulaires pour choisir les Matières de spécialité de cette université et les Matières associées au programme PhD. Malheureusement je n'arrive pas à lier ces choix avec le la Table Matières et indépendamment l'une de l'autre... Je ne suis vraiment pas bon et je m'arrache vraiment les cheveux...

- Je voudrais pouvoir ajouter des pièces jointes, que je stockerai dans un fichier en local en dehors de la BDD. Sous ACCES 2003, j'ai compris que c'était un peu plus compliqué (en tout cas pour moi!) Je suis tombé sur un post dans le forum indiquant qu'on pouvait utiliser ce code ci en le placant dans un module.

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Option Compare Database
Option Explicit
 
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                              (ByVal hwnd As Long, ByVal lpszOp As String, _
                               ByVal lpszFile As String, ByVal lpszParams As String, _
                               ByVal LpszDir As String, ByVal FsShowCmd As Long) _
                               As Long
Declare Function GetDesktopWindow Lib "user32" () As Long
 
Const SW_SHOWNORMAL = 1
 
Const SE_ERR_FNF = 2
Const SE_ERR_PNF = 3
Const SE_ERR_ACCESSDENIED = 5
Const SE_ERR_OOM = 8
Const SE_ERR_DLLNOTFOUND = 32
Const SE_ERR_SHARE = 26
Const SE_ERR_ASSOCINCOMPLETE = 27
Const SE_ERR_DDETIMEOUT = 28
Const SE_ERR_DDEFAIL = 29
Const SE_ERR_DDEBUSY = 30
Const SE_ERR_NOASSOC = 31
Const ERROR_BAD_FORMAT = 11
 
Public Function StartDoc(DocName As String) As Long
    Dim Scr_hDC As Long
    Scr_hDC = GetDesktopWindow()
    StartDoc = ShellExecute(Scr_hDC, "open", DocName, _
                            "", "C:\", SW_SHOWNORMAL)
End Function
 
 
 
Public Function ErrorCheck(r As Long) As Integer
 
    Dim msg As String
 
    If r <= 32 Then
        'There was an error
        Select Case r
            Case SE_ERR_FNF
                msg = "Fichier non trouvé"
            Case SE_ERR_PNF
                msg = "Chemin non trouvé"
            Case SE_ERR_ACCESSDENIED
                msg = "Accès refusé"
            Case SE_ERR_OOM
                msg = "Mémoire insufisante"
            Case SE_ERR_DLLNOTFOUND
                msg = "DLL non trouvée"
            Case SE_ERR_SHARE
                msg = "Une violation de partage a eu lieu"
            Case SE_ERR_ASSOCINCOMPLETE
                msg = "Association de fichier incomplète ou invalide"
            Case SE_ERR_DDETIMEOUT
                msg = "Dépassement du temps d'attente pour DDE"
            Case SE_ERR_DDEFAIL
                msg = "Échec de transactiob DDE"
            Case SE_ERR_DDEBUSY
                msg = "DDE occupé"
            Case SE_ERR_NOASSOC
                msg = "Pas de programme associé à l'extention du fichier"
            Case ERROR_BAD_FORMAT
                msg = "Fichier EXE invalide ou erreur dans une image EXE"
            Case Else
                msg = "Erreur" & r & " inconnue"
        End Select
        MsgBox msg & " "
    End If
End Function
Malheureusement, je ne sais pas trop ce qu'il faut faire après (comment appeler ce code, quoi mettre dans le champ de la base etc.). J'ai posté à ce sujet pour arrêter de t'embêter mais visiblement personne ne veut me répondre...

Merci à toi si tu t'y penches!
Guillaume
gigite974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 15h39   #18
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,
Citation:
Envoyé par gigite974 Voir le message
- Je créée le Formulaire Universités. J'ai créée à l'intérieur deux sous-formulaires pour choisir les Matières de spécialité de cette université et les Matières associées au programme PhD. Malheureusement je n'arrive pas à lier ces choix avec le la Table Matières et indépendamment l'une de l'autre... Je ne suis vraiment pas bon et je m'arrache vraiment les cheveux...
Le sous-formulaire R_Matières_Déroulante m'a l'air très bien.
En revanche, le sous-formulaire R_Matières_PhD a pour source de données la table T_Matières_Déroulante.
Je pense que sa source devrait être la table T_PhD.

Ensuite, concernant la source du contenu de la zone de liste modifiable Matière.
Dans le sous-formulaire R_Matières_Déroulante on a
Code sql :
1
2
3
SELECT T_Matières_Déroulante.Matière, T_Matières.Matière AS DescMatière
FROM T_Université LEFT JOIN (T_Matières_Déroulante LEFT JOIN T_Matières ON T_Matières_Déroulante.Matière = T_Matières.NumMatière) ON T_Université.NumUniversité = T_Matières_Déroulante.NumUniversité
GROUP BY T_Matières_Déroulante.Matière, T_Matières.Matière;
Dans le sous-formulaire R_Matières_PhD on a
Code sql :
1
2
3
4
5
6
SELECT T_PhD.Matière, T_Matières.Matière AS DescMatière, 3 AS Tri  
FROM T_PhD LEFT JOIN T_Matières ON T_PhD.Matière = T_Matières.NumMatière
GROUP BY T_PhD.Matière, T_Matières.Matière
UNION SELECT TOP 1 -1 AS Matière, "<Aucun>" AS DescMatière, 1 AS Tri FROM T_Phd
UNION SELECT TOP 1 -2 AS Matière, "<*>" AS DescMatière, 2 AS Tri FROM T_Phd
ORDER BY Tri, DescMatière;
Dans les deux cas, on peut mettre comme source du contenu ...
Code sql :
1
2
3
4
SELECT T_Matières.NumMatière, T_Matières.Matière
FROM T_Matières
GROUP BY T_Matières.NumMatière, T_Matières.Matière
ORDER BY T_Matières.Matière;
... de manière à montrer toutes les matières.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/02/2011, 11h12   #19
Invité de passage
 
Guillaume
Inscription : janvier 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Guillaume

Informations forums :
Inscription : janvier 2011
Messages : 16
Points : 2
Points : 2
Merci ! Beaucoup et pour tout, je clos la discussion là dessus, les échanges avec toi m'auront énormément fait avancer Bonne continuation!
gigite974 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 03h19.


 
 
 
 
Partenaires

Hébergement Web