Meilleur auteur de réponses
[ACCESS] Champ calculé par rapport à un regroupement d'enregistrement

Question
-
Bonjour,
je butte sur une question.
J'ai une base de données ACCESS dans laquelle j'entre le nom de mes clients, le tarif de leur contrat de maintenance, les dates d'interventions + le temps passé en intervention.
J'ai donc:
- une table "Clients" avec comme champs "IDClient", "Nom" et "TarifContrat"
- une table "Inter" avec comme champs "IDInter", "IDClient", "DteInter" et "TpsPasse"
Ce qui fonctionne:
- Formulaire pour saisir des nouveaux clients + tarif du contrat de maintenance
- Formulaire pour saisir de nouvelles interventions avec la date de l'inter, le temps passé, le client, et un petit graphique à bâton mensuel
Ce que je souhaite en plus:
- Avoir une zone de texte dans laquelle un compte se fait automatiquement par rapport au nombre de temps passé suivant chaque client.
En fait, le formulaire en question dispose d'une zone de liste déroulante pour le nom du client, une zone de saisie de la date d'intervention, une zone de texte pour y insérer un temps en heure, une zone de texte qui reprend le tarif du contrat de maintenance depuis la table "Clients" et le graphique qui se met à jour suivant les enregistrements créés et lorsque l'on passe d'un client à un autre.
Il ne me manque plus que cette zone de texte qui se met à jour en calculant le temps déjà passé par client. C'est à dire que lorsque je sélectionne un client depuis la liste déroulante, je souhaite voir combien de temps à déjà été passé chez ce client dans le but de voir si mon contrat de maintenance est adapté.
Merci à ceux qui se pencheront sur mon problème.
@+Franck
Réponses
-
J'ai enfin réussi à faire ce que je voulais. Je m'explique, ça pourrait servir à d'autres.
1. J'ai donné un nom à ma liste déroulante: Liste
2. J'ai créé ma zone de texte indépendante nommée: Depense
3. Dans les évènement "Après MAJ" de la liste déroulante j'ai créé un petit code VBA:
Private Sub Liste_AfterUpdate() Me.Depense = DSum("[TpsPasse]", "Inter", "[IDClient]=[Liste]") End Sub
Voilà, du coup lorsque je sélectionne un client dans ma liste déroulante, j'ai automatiquement le calcul de la somme de temps passé enregistré.
J'ai encore un peu de peaufinement à réaliser et du design mais l'idée est là et ça fonctionne. J'ai aussi mis un code dans certains objets pour éviter d'écraser des enregistrement déjà créés. En somme, lorsqu'une intervention est enregistrée avec tous les éléments nécessaire, si l'on repasse dessus on ne peut rien modifier. Pour ce faire j'ai mis un code VBA dans les évènements "Sur Clic". Voici le code:
Private Sub Liste_Click() Me.AllowEdits = False End Sub
Voilà, merci encore pour les réponses.
@+
- Marqué comme réponse tchao57 mercredi 8 mai 2013 21:10
- Non marqué comme réponse tchao57 mercredi 8 mai 2013 21:10
- Marqué comme réponse Aurel BeraModerator jeudi 9 mai 2013 05:45
Toutes les réponses
-
Bonjour
La requête pour calculer le temps total passée au client c'est simple
select sum(TpsPasse) from Inter where IDClient = ?
Vous devez afficher ce résultat dans le TextBox.
TpsPasse - c'est de quell type (entier, DateTime, etc...)
Cordialement,
-
-
J'ai mis "?" seulement pour indiquer que ici cois devez compléter le IDClient.
Ici vous avez des détails sur comment vous pouvez travailler avec des paramètres en VBA.
http://blogannath.blogspot.co.uk/2010/02/microsoft-access-tips-tricks-parameter.html
Cordialement
-
Je n'ai donc pas le choix que de devoir compléter IDClient manuellement à moins d'utiliser VBA? C'est bien ça?
Le problème c'est que je ne connais pas du tout VBA.
N'y aurait-il pas une possibilité de récupérer "IDClient" ou "Nom" dans le formulaire de saisie des Inter lorsque je sélectionne le client dans ma liste déroulante afin de l'intégrer dynamiquement dans ma zone de texte?
Merci encore.
-
Vous pouvez récupérer le IDClient si je me rappelle bien, mais vous devez quand-même exécuter une requête.
Essayez de poster une autre question dans ce forum: http://answers.microsoft.com/fr-fr/office/forum/access?tm=1368020482419
Peut-être ils peuvent vous indiquer une solution plus facile.
-
-
-
J'ai enfin réussi à faire ce que je voulais. Je m'explique, ça pourrait servir à d'autres.
1. J'ai donné un nom à ma liste déroulante: Liste
2. J'ai créé ma zone de texte indépendante nommée: Depense
3. Dans les évènement "Après MAJ" de la liste déroulante j'ai créé un petit code VBA:
Private Sub Liste_AfterUpdate() Me.Depense = DSum("[TpsPasse]", "Inter", "[IDClient]=[Liste]") End Sub
Voilà, du coup lorsque je sélectionne un client dans ma liste déroulante, j'ai automatiquement le calcul de la somme de temps passé enregistré.
J'ai encore un peu de peaufinement à réaliser et du design mais l'idée est là et ça fonctionne. J'ai aussi mis un code dans certains objets pour éviter d'écraser des enregistrement déjà créés. En somme, lorsqu'une intervention est enregistrée avec tous les éléments nécessaire, si l'on repasse dessus on ne peut rien modifier. Pour ce faire j'ai mis un code VBA dans les évènements "Sur Clic". Voici le code:
Private Sub Liste_Click() Me.AllowEdits = False End Sub
Voilà, merci encore pour les réponses.
@+
- Marqué comme réponse tchao57 mercredi 8 mai 2013 21:10
- Non marqué comme réponse tchao57 mercredi 8 mai 2013 21:10
- Marqué comme réponse Aurel BeraModerator jeudi 9 mai 2013 05:45