penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 2007
-
19 sept. 2006 à 11:58
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 2012
-
19 sept. 2006 à 15:18
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????
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>
geobasic
Messages postés69Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention 3 octobre 2006 19 sept. 2006 à 14:17
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 !
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 19 sept. 2006 à 12:09
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)
penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 20072 19 sept. 2006 à 12:34
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 20072 19 sept. 2006 à 12:45
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)
penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 20072 19 sept. 2006 à 12:54
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.
geobasic
Messages postés69Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention 3 octobre 2006 19 sept. 2006 à 13:12
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 ?
penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 20072 19 sept. 2006 à 13:17
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.]