Bonjour a tous,
Je créé une petite BDD avec Access. Et j'ai besoin d'aide pour une requête qui me permettra d'afficher de les personnes qui ont six mois d'impayé consécutif. Et afficher automatiquement exclu devant leur nom
Bonjour a tous,
Je créé une petite BDD avec Access. Et j'ai besoin d'aide pour une requête qui me permettra d'afficher de les personnes qui ont six mois d'impayé consécutif. Et afficher automatiquement exclu devant leur nom
Bonjour
As tu déjà quelque chose sous la main? quels sont les tables et les champs que tu manipules? bref on ne saurait t'aider si on a rien comme information de ton projet.
Deux tables, Adhérents et cotisations.
Table Adhérents :
Id_mem
nom,
prénom,
fonctions,
date_adhésion
Table cotisations :
Id1
Mois cotisations
Date paiement
Montant
Situation (payé ou impayé)
La cotisations mensuelle est de 1000 €
Si un adhérents a six mois d'impayé consécutif, il est exclu. Voilà la requête Access pour lequel j'ai besoin d'aide.
Petit remarque: pas de relation entre les deux tables. Il faut donc ajouter Id_mem dans la table Cotisation. tu pourras faire de celui-ci un menu déroulant pour faciliter l'enregistrement des cotisations.
Tu vas créer trois petites requêtes en supposant que dans la situation mensuelle d'un adhérent vous mentionnez "impayé" ou "payé" chaque mois.
R1:
R2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT Adherants.nom, Adherants.prenom, cotisations.situation FROM Adherants INNER JOIN cotisations ON Adherants.Id_mem = cotisations.id_mem WHERE (((cotisations.situation))="impayé");
R3:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT R1.nom, R1.prenom, Count(R1.situation) AS V FROM R1 GROUP BY R1.nom, R1.prenom;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT R2.nom, R2.prenom, R2.V, IIf([V]>=6, "exclu", "") AS D FROM R2 GROUP BY R2.nom, R2.prenom, R2.V;
Merci infiniment. Que dieu te bénisse.
La troisième requête compte le nombre d'impayé qu'il soit consécutif ou aléatoire. Sauf qu'il faut six impayés consécutif. Si de façon aléatoire le membre n'est pas exclu.
Comment prendre en compte que les " impayés " consécutif seulement.
Exemple 1 :
".
1- Jean pampidou / impayé
2- Jean pampidou / impayé
3 - Jean pampidou / payé
4 - Jean pampidou / impayé
5 - Jean pampidou / impayé
6 - Jean pampidou / impayé
7 - Jean pampidou / impayé
Dans ce cas nous avons 6 "impayés Puis que les 6 "impayés" ne sont pas consécutif. Le membre n'est pas "exclu".
Exemple 2:
1- Jean pampidou / payé
2- Jean pampidou / impayé
3 - Jean pampidou / impayé
4 - Jean pampidou / impayé
5 - Jean pampidou / impayé
6 - Jean pampidou / impayé
7 - Jean pampidou / impayé
8 - Jean pampidou / payé
Dans ce cas nous avons 6 "impayés" consécutifs. Le membre est exclu.
Ma préoccupations concerne l'exemple 2. Je ne sais pas comment fait pour que la requête prenne en compte que le cas 2. C'est-à-dire les "impayés" 6 fois d'affilées
Bonjour
Une fonction VBA pourrait t'aider. Tu peux t'inspirer de ceci : https://www.developpez.net/forums/d1...-consecutives/
Bonjour Bertiny;
j'ai pu regardé le lien que tu m'a envoyé mais je ne comprends (ce n'est claire).
peux-tu s'il te plait m'aider.
merci
Bonjour à tous,
Pour compléter les propositions de bertiny, on va reprendre les 2 premières requêtes :
Pour simplifier les calculs je prends les indices des mois (1,2,3...12), pour le champ [Mois cotisations].
R1:
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT Adherent.Id_mem, Adherent.nom, Adherent.prenom, Cotisations.[Mois cotisations], Cotisations.Situation, (select Max([Mois Cotisations]) from Cotisations as T where (T.id_mem=Adherent.id_mem) and (T.Situation="Impayé") and (T.[Mois Cotisations]<Cotisations.[Mois Cotisations])) AS Precedent FROM Adherent INNER JOIN Cotisations ON Adherent.Id_mem = Cotisations.id_mem WHERE (((Cotisations.Situation)="Impayé") AND (((select Max([Mois Cotisations]) from Cotisations as T where (T.id_mem=Adherent.id_mem) and (T.Situation="Impayé") and (T.[Mois Cotisations]<Cotisations.[Mois Cotisations])))=[Mois cotisations]-1)) OR ((((select Max([Mois Cotisations]) from Cotisations as T where (T.id_mem=Adherent.id_mem) and (T.Situation="Impayé") and (T.[Mois Cotisations]<Cotisations.[Mois Cotisations]))) Is Null));
Le champ précédent renvoie l'indice du mois précédent, la requête ne retient que les impayés qui se suivent mensuellement ([precedent]=[Mois cotisations]-1) ou ([precedent] est null)
R2:
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT R1.Id_mem, R1.nom, R1.prenom, Count(R1.situation) AS V FROM R1 GROUP BY R1.Id_mem, R1.nom, R1.prenom HAVING (((Count(R1.situation))>=6));
On retient, en se basant sur R1, uniquement les adhérents qui ont 6 ou + de 6 impayés consécutifs.
Autre possibilité pour R2, sans avoir recours au champ Precedent , on peut aussi compter le nombre d'impayés et le comparer à la différence entre le dernier et le premier mois +1:
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT R1.Id_mem, R1.nom, R1.prenom, Count(R1.[Mois Cotisations]) AS nbre FROM R1 GROUP BY R1.Id_mem, R1.nom, R1.prenom HAVING (((Count(R1.[Mois Cotisations]))>=6 And (Count(R1.[Mois Cotisations]))=(Max([Mois Cotisations])-Min([Mois Cotisations])+1)));
Cdlt,
La première requête à l'exécution indique erreur de syntaxe. A partir de la première ligne. Peux-tu regarder Stp.
Salut User,
J'ai essayé d'exécuter la première requête. Mais un message d'erreur s'affiche.
(Sélect Max(Mois cotisations).......
J'ai même dû créer un champ Mois avec les chiffre (1, 2, ....., 12). Mais toujours rien.
Peux-tu l'éclairer davantage.? Merci
Je n'ai vu qu'une petite erreur de majusculesEn supposant bien sûr que ton champ s!'appelle [Mois Cotisations] et non [Mois cotisation].
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT Adherent.Id_mem, Adherent.nom, Adherent.prenom, Cotisations.[Mois Cotisations], Cotisations.Situation, (select Max([Mois Cotisations]) from Cotisations as T where (T.id_mem=Adherent.id_mem) and (T.Situation="Impayé") and (T.[Mois Cotisations]<Cotisations.[Mois Cotisations])) AS Precedent FROM Adherent INNER JOIN Cotisations ON Adherent.Id_mem = Cotisations.id_mem WHERE (((Cotisations.Situation)="Impayé") AND (((select Max([Mois Cotisations]) from Cotisations as T where (T.id_mem=Adherent.id_mem) and (T.Situation="Impayé") and (T.[Mois Cotisations]<Cotisations.[Mois Cotisations])))=[Mois Cotisations]-1)) OR ((((select Max([Mois Cotisations]) from Cotisations as T where (T.id_mem=Adherent.id_mem) and (T.Situation="Impayé") and (T.[Mois Cotisations]<Cotisations.[Mois Cotisations]))) Is Null));
Il est souvent préférable de nommer les champs composé en les reliant par _
cordialement.
Merci à tous. User, bertiny .
J'ai pu voir mon erreur grâce vos contributions. Merci infiniment.
Que Dieu vous bénisse.
N'oublis pas de mettre la discussion à "Résolu"
Résolu. Encore merci
bonjour olyvares1,
pour marquer la discussion résolu il y a un bouton fait pour çà : il faut juste cliquer dessus.
J'ai une table de gestion de cotisations et j'ai besoin d'aide pour une requête qui me permettra de déterminer le nombre de mois entre la dernière date de cotisation payée et la date à ce jour. J'ai fait ce qui suit mais ça ne marche pas.
Mois([Maintenant ())- Mois([période])
Plutôt que la dernière date, il effectue le calcul avec la date de la première cotisations.
ID Noms Montant Période
1 Jean 500 05/01/17
2 Luc 800 09/01/17
3 Jean 200 11/03/17
Je voudrais que ma requête utilise dans le cas de Jean la dernière date (11/03/17) pour le calcul.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager