{Access} 2003 requete parametré en %

l-dag Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -  
l-dag Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis débutant sur access (2003), et je ne maitrise pas le langage SQL.

Voila mon pb : j'ai des affaires notéés de 1 à 3. Par une requete, je voudrais compter le nombre d'affaires ayant une moyenne supérieure à 2 (j'ai déja fait les moyennes par affaires).

Pour les compter ce n'est pas difficile mais comment fait-on pour avoir le pourcentage d'affaires ayant une moyenne supérieure ou égale à 2 ?

Exemple : sur 4 affaires, 2 ont une moyenne supérieure à 2 > 50 % ont donc une moyenne supérieure à 2.

Par avance merci pour vos réponses
A voir également:

41 réponses

l-dag
 
Le numéro Id_affaire est entré manuellement dans les tables (format numérique) suivi (je suis obligé de regarder quel numéro a été attribué dans la table "fournisseurs")
0
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,
Je ne vois pas de numéro auto dans ta table Fournisseur, je vois juste ID_Affaire. Peux-tu juste copier/coller la définition complète de ta table fournisseur car je suis un peu perdu.
A plus
0
l-dag Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Numéro auto est le format de Id_Affaire dans ma table "fournisseurs".

Dans ma table "fournisseurs" figurent le nom de l'affaire (doublons car plusieurs fournisseurs pour une meme affaire), le nom des fournisseurs, les contacts / fournisseurs avec leur numéro, et quelques autres infos.

Mes tables "suivis" notent mes fournisseurs ; d'où le lien avec Id_affaire. En effet, "nom_affaire" et "nom_fournisseurs" sont des doublons. C'est pourquoi j'ai rajouté mon champ "Id_affaire" dans ces trois tables.

Cependant, le champ "id_affaire" est en format numéro auto dans ma table "fournisseurs" alors qu'il est en format numérique dans mes tables "suivis fournisseurs".

C'est plus clair pour toi ?
0
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,

Ok, je commence à comprendre, alors je peux te proposer de changer l'ordre des deux premières colonnes pour ta table Fournisseur, d'abord Nom_Affaire et ensuite Id_Affaire et de créer un index primaire sur les deux tables.
Tu trouveras ici le schéma des relations.
Comment fais-tu pour récupérer l'Id_Affaire (Numéro Auto) pour l'utiliser dans ta table Suivi Fournisseur?
A plus
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
l-dag Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Merci,

J'ai refait le schéma que tu m'as donné. Il est sur qu'il y a un problème dans mes relations et pourtant je ne vois pas lequel (ou lesquels).
Lorsque je rentre une nouvelle affaire avec ses fournisseurs, le numéro auto que Access me donne est le 49. Or le numéro 49 correspond déja à un fournisseur sur une affaire (dans la logique je devrais avoir comme numéro 250). Par conséquent, impossible de le noter car risque de doublons (à cause du 49).

Je ne comprends pas du tout , j'espère que ce n'est pas un bug Access!

Donc pour te répondre, je rentre manuellement le "Id_affaire" dans mes tables "suivis". (car j'attribue des notes après avoir rempli ma table "fournisseurs").

Ci joint mes relations :
http://www.cijoint.fr/cjlink.php?file=cj200907/cijUdPBYHw.doc

Cordialement,
0
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,

Est-tu certain que ta clé primaire sur ta table Fournisseur est déclarée comme unique sans doublon?
Tu peux voir cela en cliquant sur cet l'icône, là tu devrais avoir le nom de l'index ainsi que les colonnes qui le composent et celui-ci doit être du type primaire et unique. J'ai aussi trouvé sur Internet une discussion dans un forum parlant du même genre de problème ici, il parle de compactage de la base ce qui pourrait créer des problèmes.
Tu peux aussi peut-être faire une requête
SELECT max(Id_Affaire) FROM Fournisseurs
pour avoir la valeur maximale de Id_Affaire.
A plus
0
l-dag Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Je n'arrrive pas à visualiser l'icone que tu m'as envoyé. J'ai bien sélectionneé sans doublons pour ma clé primaire : "id_affaire" dans la table fournisseurs.

J'ai lu la discussion que tu m'as donné par le lien. J'ai compacté ma base de données mais le problème est le meme avec mes numéros autos. De meme j'ai toujours un pb avec mes relations qui m'empéchent d'ajouter un nouvel enregistrement à ma base...

Cordialement,
0
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,

Pour l'icône, essaye ce lien.
As-tu exécuter la requête comme je te l'avais demandé dans le message précédent?
Peux-être faut-il enlever toutes tes relations et en créer de nouvelles dans l'ordre suivant:
1°) En partant de la table Affaire (Nom_Affaire) vers la table Fournisseurs (Nom_Affaire)
2°) En partant de la table Coordonnées (Nom_Cabinet) vers la table Fournisseurs (Nom_Cabinet)
3°) En partant de la table Fournisseurs (Id_Affaire) vers la table Suivi Fournisseur Conception (Id_Affaire)
4°) En partant de la table Fournisseurs (Id_Affaire) vers la table Suivi Fournisseur Exécution (Id_Affaire)
Peut-tu aussi copier/coller la requête (ou le code VBA) que tu exécutes pour créer ton enregistrement dans la table Fournisseur ?
Sinon, je peux éventuellement de donner mon adresse mail (via un message personnel) et tu peux m'envoyer ta base de données afin que je teste tout cela sur mon PC.
A plus
0
l-dag Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Les relations que tu m'as donné sont celles que j'ai mises en vigueur.

J'accepte de t'envoyer ma base ; tu m'as tellement aidé jusqu'ici !
En revanche, comme tu dois l'imaginer elle doit resté un minimum privé..

Ce qui importe est dans les formulaires et états. Certaines requetes que j'ai réalisé m'ont servi d'appui pour réaliser des requetes par la suite.

J'attends ton message

Cordialement,
0
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,

J'ai bien reçu ta base de données, et le premier problème est résolu. Il semble que la colonne Id_Affaire est vérolée, j'ai donc d'abord copier la table Fournisseurs vers une nouvelle table (Copie Fournisseurs), j'ai ensuite supprimer la table Fournisseurs et Access a automatiquement supprimé les relations, ensuite j'ai renommé la table Copie Fournisseurs en Fournisseurs et recrée les relations. Après cette manipulation, le Id_Affaire pour un nouvel enregistrement était 257 (ce qui est correct, tu as bien 249 enregistrements mais il existe un trou entre le numéro 248 et 253, cela pouvant venir d'annulation d'enregistrements).
Si tu veux je peux t'envoyer la base de données corrigée ou bien tu fais les manipulations toi-même, comme cela tu sais ce que tu devrais faire si jamais cela se reproduit. (Évite de compacter ta base, cela n'est nécessaire que pour gagner de l'espace disque).
Concernant ta deuxième question, je pense que l'utilisation de la sécurité d'Access va te permettre de mieux contrôler qui peux faire quoi sur les tables, les formulaires, requêtes, ...
J'ai pas très bien compris ton problème de Liste Déroulantes, peut-être tu peux m'expliquer cela plus en détail ou bien avec une copie d'écran et indiquer le(s) problème(s).
A plus
0
l-dag Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Effectivement sa marche...merci!

En revanche, mes requetes ne s'automatisent plus : si tu rentres une nouvelle affaire, ensuite un fournisseur étant sur cette affaire (dans la table fournisseur), puis les notes du fournisseur dans l'une des deux tables de suivis. Une fois cela fini et enregistré, ouvre le formulaire descriptif / affaires, tu verras que les infos liées à ta nouvelle affaire n'apparaissent pas ; la nouvelle affaire n'apparait meme pas. Tu sais pourquoi ?

Le problème des listes déroulantes : par exemple dans la table affaires j'ai ma liste de choix ("liste des affaires"), tu choisis palaiseau - école..., > tu tombes sur l'affaire en question, tu fais défiler les infos correspondantes avec la mollette de la souris (fournisseur, contact etc...).

Une fois les infos défilées, ça change d'affaire (tu le remarques avec mon étiquette et mon champ "nom_affaire).

Moi je voudrais n'avoir que la liste déroulante, et donc que défilent seulement les infos concernant l'affaire choisie. Ensuite si je veux voir les infos d'une autre affaire, je choisis dans ma liste déroulante.

Et j'aimerais que quand je rentre une nouvelle affaire, elle s'enregistre automatiquement dans ma liste de choix
Voila l'envergure du problème...

Cordialement,
0
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,

Concernant ton premier point, en fait ton formulaire Descriptif/Affaires se base sur la requête [par affaire].
Après avoir regardé le code sql, j'ai vu que tu utilisais INNER JOIN entre tes différents tables, cela veut dire qu'il faut qu'un enregistrement existe dans chaque table, donc dans ton exemple, n'ayant pas d'enregistrement encore dans la table Suivi Fournisseurs/Conception ou Suivi Fournisseurs/Execution, tu ne voyais pas ta nouvelle affaire.
J'ai donc revu le code
SELECT Affaires.Nom_affaire, Affaires.Type_Batiment, Affaires.Cout_construction, Affaires.Entreprise_1, Affaires.Entreprise_2, Affaires.Responsable_affaire, Affaires.Responsable_chantier, Affaires.Date_de_DROC, Affaires.Date_de_livraison, Fournisseurs.Nom_cabinet_fournisseur, Fournisseurs.Type_Intervenant, [Coordonnées fournisseurs].Telephone, Fournisseurs.Nom_contact, Fournisseurs.Numero_contact, Fournisseurs.Montant_contrat, [Suivi Fournisseurs/Conception].Competences_C, [Suivi Fournisseurs/Conception].Qualite_prestation_C, [Suivi Fournisseurs/Conception].Respect_delais_C, [Suivi Fournisseurs/Conception].Qualite_relationnelle_C, [Suivi Fournisseurs/Conception].Note_globale_C, [Suivi Fournisseurs/Exécution].Competences_E, [Suivi Fournisseurs/Exécution].Qualite_prestation_E, [Suivi Fournisseurs/Exécution].Respect_delais_E, [Suivi Fournisseurs/Exécution].Qualite_relationnelle_E, [Suivi Fournisseurs/Exécution].Note_globale_E
FROM ((Affaires LEFT JOIN (Fournisseurs LEFT JOIN [Coordonnées fournisseurs] ON Fournisseurs.Nom_cabinet_fournisseur = [Coordonnées fournisseurs].Nom_cabinet_fournisseur) ON Affaires.Nom_affaire = Fournisseurs.Nom_affaire) LEFT JOIN [Suivi Fournisseurs/Conception] ON Fournisseurs.Id_Affaire = [Suivi Fournisseurs/Conception].Id_Affaire) LEFT JOIN [Suivi Fournisseurs/Exécution] ON Fournisseurs.Id_Affaire = [Suivi Fournisseurs/Exécution].Id_Affaire;
en changeant les INNER JOIN par des LEFT JOIN basé sur la table Affaires et la table Fournisseurs et alors je peux voir ma nouvelle affaire ainsi que le fournisseur affecté à cette affaire même si aucun suivi fournisseur existe.

Concernant ton deuxième problème, ta liste déroulante est basée sur ta requête [par affaire] ainsi que les données affichées dans ton formulaire, pour pouvoir faire ce que tu veux, il faudrait que les données affichées soient basées sur une autre requête qui devrait filtrer sur le nom de l'affaire choisie. Laisse moi encore un peu de temps et je devrais te faire savoir ma solution. J'ai aussi remarqué que je peux essayer d'ajouter un enregistrement dans ton formulaire Descriptif / Affaires, mais cela génère une erreur car Access essaye de créer différents enregistrements dans les tables utilisées par ta requête, je pense qui faudrait mieux ne pas permettre l'ajoute, mais cela sera peut-être résolu avec la solution précédente. J'ai aussi constaté que dans ton formulaire Fournisseurs, on doit connaître le nom de l'affaire, pourquoi ne pas proposer une liste déroulante contenant toutes les affaires?
A plus
A plus
0
l-dag Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Oui effectivement, j'étais sur la piste des inner join mais tu as été plus rapide que moi (j'étais en pleine recherche sur internet car je ne connais que très peu le langage sql..)

Encore une fois merci!!

En revanche le problème de la liste déroulante : j'y suis depuis une semaine.. alors si tu trouves la solution..ce serait vraiment super et tu m'enlèverai une énoOorme épine du pied!!

A plus!
0
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,

Alors, je crois que j'ai trouvé la solution pour le formulaire Descriptif / Affaires, tu dois faire trois petites choses
1°) Tu dois supprimer le code suivant dans ton formulaire
Private Sub Modifiable62_AfterUpdate()
    ' Rechercher l'enregistrement correspondant au contrôle.
    Dim rs As Object

    Set rs = Me.Recordset.Clone
    rs.FindFirst "[Nom_affaire] = '" & Me![Modifiable62] & "'"
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

2°) Tu dois rajouter le code suivant dans ton formulaire
Private Sub Form_Open(Cancel As Integer)
    Set Me.Recordset = CurrentDb.OpenRecordset("SELECT * FROM [par affaires] ORDER BY Nom_affaire")
End Sub

3°) Tu dois également rajouter le code suivant dans ton formulaire
Private Sub Modifiable62_Change()
    Set Me.Recordset = CurrentDb.OpenRecordset("SELECT * FROM [par affaires] WHERE Nom_affaire = '" & Me![Modifiable62] & "'")
End Sub

Explication:
Lors de l'ouverture du formulaire, on sélectionne tous les enregistrement de la requête [par affaires] et ensuite à chaque fois que le champs Modifiable62 est changé, on sélectionne seulement les enregistrements de la requête [par affaires] où le Nom_affaire = la valeur de la liste déroulante.
J'ai testé et cela marche du tonnerre. J'ai également changé le formulaire afin de ne pas permettre d'ajouter de nouveaux enregistrements, de modifier ou même d'annuler des enregistrements.
A toi de l'essayer et éventuellement de changer les autres listes déroulantes.
Si tu as des problèmes, je peux te renvoyer par mail la nouvelle version de la base de données qui se trouve sur mon PC.
A plus
0
l-dag Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

J'ai recopié les codes que tu m'as donné : c'est parfait. Une fois n'est pas coutume : un GRAND merci!!

D'ailleurs, une fois que j'ai choisi l'affaire parmi ma liste, je peux aussi choisir le type d'intervenant directement ?
0
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,

Tu peux rajouter une nouvelle liste déroulante (ListeIntervenant par exemple), à côté de ta liste des affaires et en utilisant le code suivant à la place du code de mon message précédent, cela devrait faire l'affaire.
Private Sub Form_Open(Cancel As Integer)
    Set Me.Recordset = CurrentDb.OpenRecordset("SELECT * FROM [par affaires] ORDER BY Nom_affaire")
    Me.ListeIntervenant.RowSource = "SELECT DISTINCT Type_Intervenant FROM [par affaires]"
    Me.ListeIntervenant.Locked = True
End Sub

Private Sub ListeIntervenant_Change()
    Set Me.Recordset = CurrentDb.OpenRecordset("SELECT * FROM [par affaires]WHERE Nom_affaire = '" & Me![Modifiable62] & "' AND Type_Intervenant = '" & Me![ListeIntervenant] & "'")
End Sub

Private Sub Modifiable62_Change()
    Set Me.Recordset = CurrentDb.OpenRecordset("SELECT * FROM [par affaires] WHERE Nom_affaire = '" & Me![Modifiable62] & "'")
    Me.ListeIntervenant.RowSource = "SELECT DISTINCT Type_Intervenant FROM [par affaires] WHERE Nom_affaire = '" & Me![Modifiable62] & "'"
    Me.ListeIntervenant.Locked = False
End Sub

Lors de l'ouverture du formulaire (Form_Open) je ne permets pas de choisir un type d'intervenant avant que l'on choisit une affaire (Locked = True).
Le nom ListeIntervenant est juste un exemple, il suffit de la remplacer par celui de ton choix.
A plus
0
l-dag Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Mince..

Pour une fois je n'y arrive pas.

Faut-il rajouter dans mon formulaire une zone de liste déroulante ou directement écrire le code en fonction de mon champ "type_intervenant (liste déja crée dans la table) ?

Cordialement,
0
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,

J'ai rajouté sur le formulaire une nouvelle zone liste déroulante et j'ai remplacée la liste déroulante Type_Intervenant par une simple zone de texte. J'ai d'ailleurs fait de même pour toutes les autres zones liste déroulante (remplacée par zone de texte), de cette façon l'utilisateur ne peut pas changer le contenu de l'enregistrement affichée. Tu trouveras ici une image représentant ma version du formulaire "par affaires".
A plus
0
l-dag Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Raah je n'y arrive pas.

J'ai supprimé le dernier code (rechercher l'enregistrement corerspondant...)

J'ai recopié le code que tu m'as donné en modifiant ce qui devait l'etre, mais sa ne marche pas. J'ai réessayé plusieurs fois, sans succès!

Ou ais-je pu me tromper ?
0
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,

A priori c'est difficile à dire, peut-être dans le nom de la nouvelle liste déroulante, dans le code recopié. Si tu veux et cela sera peut-être plus facile, renvoie moi ta dernière version de ta base de données par mail.
A plus
0