Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 12/01/2012, 15h50   #1
Futur Membre du Club
 
Michel AUBINEAU
Inscription : mai 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Michel AUBINEAU

Informations forums :
Inscription : mai 2010
Messages : 43
Points : 16
Points : 16
Par défaut Calculs totaux imbriqués

Je dispose des 3 tables liées suivantes (voir PJ) :
VERGERS, PARCELLES, SECTIONS_VAR

Mon besoin (simple !) de regroupement est de :

1- Balayer la table SECTIONS_VAR et totaliser le champ 'Surface_SV' par 'Code_Parcelle',pour tous les enregistrements ayant le même 'Code_Parcelle'.
2- Mettre la somme trouvée dans le champ 'Surface_Parcelle' de la table PARCELLES.

3- Balayer la table PARCELLES et totaliser le champ 'Surface_Parcelle' par 'Code_Verger', pour tous les enregistrements ayant le même 'Code_Verger'.
4- Mettre la somme trouvée dans le champ 'Surface_Verger' de la table VERGERS.

Dois-je utiliser des recordsets imbriqués !!!!! ?????
Comment imbriquer des requêtes paramétrables ?
Une seule requête peut-elle tout faire ?

Merci à l'avance.
Michel
Images attachées
Type de fichier : png mes_tables.png (18,7 Ko, 6 affichages)
maub85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 23h43   #2
Membre éclairé
 
Avatar de tee_grandbois
 
Inscription : novembre 2004
Messages : 216
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 216
Points : 321
Points : 321
Bonsoir,
cela peut paraître bizarre, mais c'est possible de mettre à jour les 2 tables avec une requète si on a pris soin de mettre à 0 les champs de cumul des surfaces:
Code :
1
2
UPDATE PARCELLES INNER JOIN VERGERS ON PARCELLES.[#Code_Verger] = VERGERS.Code_Verger 
SET PARCELLES.Surface_Parcelle = 0, VERGERS.Surface_Verger = 0;
Le cumul est contrôlé par les liens entre les tables:
Code :
1
2
3
4
UPDATE VERGERS INNER JOIN (PARCELLES INNER JOIN sections_var ON PARCELLES.Code_Parcelle = SECTIONS_VAR.[#Code_Parcelle]) ON
 VERGERS.Code_Verger = PARCELLES.[#Code_Verger] SET PARCELLES.Surface_Parcelle =
 [PARCELLES].[Surface_Parcelle]+[SECTIONS_VAR].[Surface_SV], VERGERS.Surface_Verger =
 [VERGERS].[Surface_Verger]+[SECTIONS_VAR].[Surface_SV];
Méthode à utiliser uniquement si le modèle des données est simple ou parfaitement maitrisé.
tee_grandbois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 07h37   #3
Futur Membre du Club
 
Michel AUBINEAU
Inscription : mai 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Michel AUBINEAU

Informations forums :
Inscription : mai 2010
Messages : 43
Points : 16
Points : 16
Merci déjà de la réponse reçue.

J'arrive (un peu) à comprendre la requête 'mise a jour'. (je suis débutant).

Le résultat espéré n'est pas atteint car aucun champ des 2 tables n'est mis à jour !

Voici quelle a été ma procédure :

1- Vérification du modèle des données dans les 3 tables :
Table SECTIONS_VAR : Le champ 'Surface_SV' est bien de type numérique, réel simple, standard, décimales auto
Table PARCELLES : Le champ 'Surface_Parcelle' est bien de type numérique, réel simple, standard, décimales auto
Table VERGERS : Le champ 'Surface_Verger' est bien de type numérique, réel simple, standard, décimales auto

2- Exécution de la requête 'mise à zéro' des champs de cumul des 2 tables

3- Constat de la valeur '0.00' dans les champs cumul des 2 tables

4- Exécution de la requête 'mise à jour' des 2 tables

5- Constat de la valeur ' ' dans les champs cumul des 2 tables

Je suis incapable de comprendre ce qui se passe, ou plutôt ce qui ne se passe pas !!!

Merci de votre aide.
Michel
maub85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 23h56   #4
Membre éclairé
 
Avatar de tee_grandbois
 
Inscription : novembre 2004
Messages : 216
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 216
Points : 321
Points : 321
Bonsoir,
il y a peut-être des valeurs nulles dans 'Surface_SV', dans ce cas il faut les "neutraliser" avec nz:
Code :
1
2
3
4
UPDATE VERGERS INNER JOIN (PARCELLES INNER JOIN sections_var ON PARCELLES.Code_Parcelle = SECTIONS_VAR.[#Code_Parcelle]) ON
 VERGERS.Code_Verger = PARCELLES.[#Code_Verger] SET PARCELLES.Surface_Parcelle =
 [PARCELLES].[Surface_Parcelle]+nz([SECTIONS_VAR].[Surface_SV],0), VERGERS.Surface_Verger =
 [VERGERS].[Surface_Verger]+nz([SECTIONS_VAR].[Surface_SV],0);
tee_grandbois est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/01/2012, 07h34   #5
Futur Membre du Club
 
Michel AUBINEAU
Inscription : mai 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Michel AUBINEAU

Informations forums :
Inscription : mai 2010
Messages : 43
Points : 16
Points : 16
Absolument parfait comme diagnostic et comme solution apportée.
Bravo.
Je te remercie vivement.

Bien cordialement
Michel
maub85 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 23h20.


 
 
 
 
Partenaires

Hébergement Web