Aide sur sélections multiples ACCESS

Fermé
laportez Messages postés 7 Date d'inscription vendredi 24 novembre 2006 Statut Membre Dernière intervention 10 novembre 2011 - 24 nov. 2006 à 15:36
laportez Messages postés 7 Date d'inscription vendredi 24 novembre 2006 Statut Membre Dernière intervention 10 novembre 2011 - 6 mars 2007 à 15:27
Bonjour,
Je cherche de l'aide sur ACCESS.

Voici mon problème :
J’ai la table « Adhérents » suivante :
Code adhe (code numérique)
Nom adhe (Patronyme)
Prenom adhe (Prénom)
Adresse adhe (Rue)
CP adhe (Code Postal)
Ville adhe (Ville)
Sexe adhe (Codes H ou F)
Catégorie adhe (Codes M, B ou P)
Profession adhe (Profession principale texte libre)
Date entrée adhe (Date inscription jj/mm/aaaa)
Article adhe (Catégorie d’articles texte libre)
Rappel adhe (Date relance jj/mm/aaaa)
Motif rappel adhe (Motif relance texte libre)

Je voudrais créer un état paramétrable permettant des sélections multiples sur :
Le sexe (sexe adhe),
La catégorie (Catégorie adhe),
La date d’entrée (Date entrée adhe).
Pour éditer par exemple tous les adhérents H,
ou tous les adhérents H de la catégorie B,
ou tous les adhérents F de la catégorie M inscrits avant le 01/01/2005

Comment créer un formulaire ou une requête permettant de lancer cet état en sélectionnant les critères dans des fenêtres déroulantes (sexe, catégorie) ou de saisie (date) ?
Une bonne âme aurait-elle un exemple approchant ?

Merci à tous

3 réponses

Utilisateur anonyme
25 nov. 2006 à 15:52
suite :

Deuxième étape :

Les combobox

Pour être sur de bien comprendre votre besoin, je
l'exprime ici à ma façon.

Disons qu'a l'ouverture de votre formulaire vous avez
1000 enregistrements, vous voulez à l'aide d'une
sélection dans un combobox réduire ce nombre à 100.
À l'aide d'un second combobox vous désirez réduire
ce nombre à 50 et ainsi de suite.

Donc pour ce faire vous devez alimenter les combobox
à l'aide de requêtes simples qui vont former les critéres
de sélection.

Comme vous avez du le contaster mon exemple est basé
sur un base de données de films qui constitue ma
vidéothèque.

L'un de mes combobox définit le style de film que je
recherche.

Dans les propriété de mon comboxbox,

la propriété [ Origine source ] = [ Table/Requête ]
la propriété [ Contenu ] = Sélectionner la requête que vous avez construit.

Je m'arrête ici et j'attendrai votre réponse pour la suite.

Lupin
2
laportez Messages postés 7 Date d'inscription vendredi 24 novembre 2006 Statut Membre Dernière intervention 10 novembre 2011
6 mars 2007 à 15:27
Merci à tous
OK ça marche
La solution fonctionne parfaitement, et en plus c'est esthétiquement parfait.
0
Utilisateur anonyme
24 nov. 2006 à 16:46
Bonjour,

J'ai une solution pour vous !

Tout d'abord je dois vous poser quelques questions.

Est-ce que vos formulaires sont tous accroché sur des requêtes.
Est-ce que vos requêtes sont tous accrochées sur des tables.
Avez-vous une bonne connaissance de VBA.

1.) Créer une requête simple répondant à un exemple de vos besoin.
2.) Visualiser la requête en mode SQL et copier la dans ce fil de discussion.
3.) Inclure une routine sur une liste déroulante de l'un des champs de votre besoin.
4.) Inclure une fonction de modification de requête par programmation.

Exemple de la routine :
Private Sub Liste_Cassette_AfterUpdate()
    
    Dim Chaine As String
    Dim Critere As String
    Dim CassetteVidéo As String
    
On Error GoTo Liste_Cassette_Err

    CassetteVidéo = Forms![Formulaire Édition Liste Vidéo].[Liste Cassette]
    Chaine = "Select * from [Table Vidéo] where [Cassette] = "
    Critere = Chaine & """" & CassetteVidéo & """"
    
    If (ChangeRequeteDef("Requête Liste Spécifique Cassette", Critere)) Then
        DoCmd.OpenForm "Formulaire Liste Spécifique Édition Cassette", acNormal, "", "[Cassette]", , acNormal
    End If

Liste_Cassette_Exit:
    Exit Sub

Liste_Cassette_Err:
    MsgBox Error$
    Resume Liste_Cassette_Exit

End Sub



La fonction :

Public Function ChangeRequeteDef(ChaineRequete As String, ChaineSQL As String) As Boolean
    
    Dim Definition As QueryDef
    
    If ((ChaineRequete = "") Or (ChaineSQL = "")) Then
        ChangeRequeteDef = False
    Else
        Set Definition = CurrentDb.QueryDefs(ChaineRequete)
        Definition.SQL = ChaineSQL
        Definition.Close
        RefreshDatabaseWindow
        ChangeRequeteDef = True
    End If
    
End Function



Procédé par étape et je vous guiderez.

@+
Lupin
0
laportez Messages postés 7 Date d'inscription vendredi 24 novembre 2006 Statut Membre Dernière intervention 10 novembre 2011
25 nov. 2006 à 11:24
Tout d'abord Merci beaucoup.
Les réponses à vos questions :
>> Est-ce que vos formulaires sont tous accroché sur des requêtes.
Actuellement formulaires de consultation, de création et mise à jour des enregistrements.
Etats liste des enregistrements.
Requêtes de sélection simple (calcul de délai ancienneté inscription avec la fonction datediff et tri sur ce délai).
C'est là que je voudrais ouvrir plusieurs combobox permettant de sélectionner les critères complémentaires.
>> Est-ce que vos requêtes sont tous accrochées sur des tables.
Oui (avec champ calculé -Today et délai).
>>Avez-vous une bonne connaissance de VBA.
Basique et peu utilisée depuis plusieurs années.

Merci encore

laportez
0
Utilisateur anonyme
25 nov. 2006 à 15:15
Bonjour,

A première vue votre base est bien monté, puisque la logique
nous dit qu'un formulaire devrait toujours être accroché sur une
requête (et non sur une table) et c'est la requête qui s'accroche
sur la table.

Première étape :

Vous allez construire une requête qui sélectionne un ou plusieurs
enregistrements selon les critères qui vous avez besoin.

exemple :

SELECT *
FROM [Table Vidéo]
WHERE ((([Table Vidéo].Style)="SCIENCE-FICTION"));

dans cet exemple, je n'ai qu'un critère :
[Table Vidéo].Style = "SCIENCE-FICTION"

mais vous pouvez en avoir plus d'un.

vous créé la requête et passez en mode affichage SQL,
premier bouton de la barre d'outils.

faites ensuite un copier/coller de cette requête ici-même,
je vais vous expliquer comment modifier cette requête par
programmation comme dans l'exemple cité dans mon premier
message.

Lupin
0