Aidez moi sur les requetes VB [Résolu]

Signaler
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
-
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
-
Bonjour à tous,

Je souhaite effectuer un calcul après exécution d'une requete par code VB sous la forme suivante.
Private Sub filtreflotte_AfterUpdate()
' calcul de valeurs
Dim somh As Currency
Dim dep As Currency
Mise en place de la requete
Dim Mabd As Database
Dim requete1 As QueryDef
Dim sql As String
'on effectue la base de la requête
sql = "SELECT * FROM essai WHERE essai.flotte= '" & Me.filtreflotte & "'"
'lancement de la requête
Set Mabd = currentdb
Set requete1 = Mabd.CreateQueryDef("pondere", sql)
DoCmd.OpenQuery ("pondere")
'mettre la somme de champs dans les objets suivants
somh = DSum(pondere.hours, pondere)
dep = DSum(pondere.NonProg, pondere)
End Sub

Cela me renvoie l'erreur "object requis"  lorsque je veux executer la fonction Dsum.
Que dois je faire, cela est il dû a une erreur de syntaxe????

Merci d'avance.

Penny

16 réponses

Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Salut 726848 penny05, salut =89254 jrivet, salut 190022 geobasic,

penny05 a du flair,

je n'ai rien testé, juste lu.
Ma 1ère impression, c'est que l'erreur "object requis" ne survient pas quand tu cherches à utiliser la DSUM, mais plutôt quand tu cherches à manipuler la variable pondere (que tu n'as d'ailleurs pas déclarée, et qui devrait être du type QueryDef, je pense).

Il est possible qu'elle soit à la valeur Nothing (mets un point d'arrêt et un espion, tu y verras plus clair)(en fait, j'en suis presque sûr, mais je n'ai pas testé). Tu devras peut-être donc rajouter une affectation de référence du genre :

Set pondere = MaBD.QueryDefs("pondere")

Il est aussi possible que VB n'arrive pas à résoudre la référence, auquel cas il faudrait écrire quelque chose du genre : MaBD.pondere (mais je ne suis pas sûr que l'objet QueryDef soit une propriété de l'objet DataBase, accessible directement, sans passer par la collection [instance intrinsèque, comme Text1, dans Text1.Text qui est en fait Me.Text1.Text, ou même Me.Controls.Items("Text1").Text, blabla, blabla...]), comme quand on manipule Excel.Application et Excel.Workbooks, il nous faut écrire xlApp.Workbooks("Machin").Sheets("Feuil1") et pas Feuil1 comme nous le montrerait l'enregistreur de macros.

voilà, pour l'instant,
à+

PS: pardon pour le speach, j'avais un peu plus de 2s.
PS2 : j'ai adapté ma devise, parce que maitenant, si t'es en page 4, c'est que t'es mort :)

rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Ok vu. Excuse moi je cherchais en vain la fonction Dsum dans VB, effectivement on ne la trouve que dans VBA Access. En fait la syntaxe  correcte devrait être  somh = Dsum("pondere!hours","pondere")  car les arguements demandés sont des chaînes !
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
57
Salut,

Il nous manque quelque informations:
1- Qu est ce que DSum  (Une fonction je suppose) = > Si oui que prend t'elle en parametres
2- Lorsque tu fait l'appel a DSum Tu marques pondere.Hours de quel type est ta variable pondere.

Il faudrait nous donné DSUm.

Peu etre peu tu essayer
somh = DSum(requete1.hours, requete1)

@+,   Ju£i?n
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
alors la fonction Dsum effectue la somme des champs d'une table ou formulaire etc..
elle se présente sous la forme suivante: Dsum ( champ , table, le critère si on veut)
donc une fois que je crée la requete
Set requete1 = Mabd.CreateQueryDef("pondere", sql)
qui s'appelle donc pondere,
je fais
somh = DSum(pondere.hours, pondere) qui effectue la somme des heures du champ heures de la table pondere qui sera créée par la requete.
et donc somh = DSum(requete1.hours, requete1) me donne une erreur de compilation "membre ou méthode introuvable"

Merci d'avance
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

La bonne syntaxe c'est somh = DSum(requete1!hours, requete1)
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
Cela ne marche pas pour autant
j'ai l'erreur incompatibilité de type.
si je l'a nomme pondere cette requete par
Set requete1 = Mabd.CreateQueryDef("pondere", sql)
ca ne devrait pas nécessiter de mettre
somh = DSum(requete1!hours, requete1)
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Il faudrait que tu nous donne la définition exacte de la fonction Dsum
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
La fonction SomDom (DSum) calcule la somme d'un ensemble de valeurs relatives à un jeu d'enregistrements spécifié (un [javascript:HelpPopup('actip9.hlp','defDomain'); domaine]). Utilisez la fonction SomDom (DSum) dans Visual Basic, une [javascript:HelpPopup('actip9.hlp','defScript'); macro], une expression de requête ou un [javascript:HelpPopup('actip9.hlp','defCalculatedControl'); contrôle calculé.]


Par exemple, la fonction SomDom (DSum) peut être utilisée dans une expression de champ calculé d'une requête pour calculer les ventes totales réalisées par un employé déterminé sur une certaine donnée. Vous pouvez utiliser la fonction SomDom (DSum) dans un contrôle calculé pour afficher le cumul des ventes d'un produit particulier.



Syntaxe



DSum(
expr, domaine[, critère])
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Cette fonction est une fonction maison ou une fonction externe ? A savoir sous quel type sont définis les paramètres "expr" et "domaine" dans la fonction ?
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
comme expliqué sur l'aide:
expr, Expression qui identifie le champ numérique dont vous voulez additionner les valeurs. Il peut s'agir d'une [javascript:HelpPopup('actip9.hlp','defNull'); Null.]
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
personnelementc'est plutot l'erreur object requis qui me dérange


Qu'est ce que cela veut il dire réellement
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Tu ne répond pas à ma première question: d'où vient la fonction Dsum ?
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
Je comprends pas ce que tu veux dire par d'ou vient la fonction Dsum...


c'est une fonction VB disponible sur les applications access


Peut tu etre plus clair
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Il a raison, je focalise sur la référence à Nothing, mais ce n'est pas la peine d'avoir cette référence, car c'est une chaine que tu dois passer.


Bien vu geobasic





rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
Encore merci de votre contribution!!!
Rvblog, the expert i tell u thanks again n again....
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
see you later, alligator

rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>