Fonction personnalisee Excel requete Access

Bonjour,

J'essaye de creer une fonction personnalisee en Excel, affichant sur la feuille Excel le resultat d'une requete en Access.

Je n'arrive pas a le faire; j'ai d'autres fonctions qui marchent mais pour une fonction avec un argument seulement.

Je supconne que le probleme est lie a l'ecriture de l'instruction HAVING ou alors aux arguments de la fonction.

Voici la fonction:

Function VIT(Pro As Range, It As Range)

Dim WS As Workspace

Dim RS As Recordset

Dim BD As Database

Set WS = DBEngine.Workspaces(0)

Set BD = WS.OpenDatabase("C:\Users\Orlando\Documents\STD COST 2006.accdb")

req = "SELECT ProjName, ITEM, Sum(AMOUNT) AS [Somme De AMOUNT] FROM [ZPPO] GROUP BY [[ZPPO.ProjName] GROUP BY [ZPPO.ITEM]]"

req = req + "HAVING ProjName=" & Chr(34) & Pro & Chr(34) And "HAVING ITEM=" & Chr(34) & It & Chr(34)

Set RS = BD.OpenRecordset(req)

VIT = RS.Fields("Somme De AMOUNT").Value

End Function

Merci beaucoup d'avance pour votre aide!!!!!!!

Orlando

Bonjour

Il ne faut qu'un GROUP BY suivi d'un ou n champs séparés par des virgules

Bonjour,

Merci beaucoup de votre aide; j'ai essaye mais ca ne marche pas; quand je le fait avec un seul argument ca marche, il y donc un seul Group By et un seul Having et ca marche. Ca pourrai etre l'utilisation de deux arguments et l'ecriture de GROUP BY, mais surtout l'ecriture de HAVING avec les deux variables.

Merci beaucoup, bonne apres midi.

RE

Group by champ1, champ2 having condition1 and condition2

Merci beaucoup, mais ca ne marche pas toujour

Voici la fonction modifiee:

Function VIT(Pro As Range, It As Range)

Dim WS As Workspace

Dim RS As Recordset

Dim BD As Database

Set WS = DBEngine.Workspaces(0)

Set BD = WS.OpenDatabase("C:\Users\Orlando\Documents\STD COST 2006.accdb")

req = "SELECT ProjName, ITEM, Sum(AMOUNT) AS [Somme De AMOUNT] FROM [ZPPO] GROUP BY [[ZPPO.ProjName],[ZPPO.ITEM]]" _

& "HAVING ProjName=" & Chr(34) & Pro & Chr(34) And "HAVING ITEM=" & Chr(34) & It & Chr(34)

Set RS = BD.OpenRecordset(req)

VIT = RS.Fields("Somme De AMOUNT").Value

End Function

RE

Regarde mon post : pas 2 fois Having just AND

Je suis desole, ca ne marche pas, je suis maintenant convencu que le pb vient de l'ecriture de l'instruction HAVING, le placement des "

Merci encore pour votre patience

Re

Je n'avais pas détaillé tout, juste le sql mais tu ne peux passer un range comme valeur.

Concrètement c'est quoi pro et it ?

Le plus simple tu fais la requête dans Access et tu l'affiches en SQL : déjà tu auras la syntaxe pour la mettre en VBA ensuite.

J'ai fait la requête en Access et affiche l’écriture SQL, ProjName c'est le nom d'un des projets c'est du TEXTE, et item c'est la référence par produit aussi du TEXTE sur la base access. La fonction EXCEL marche très bien avec un seul argument, le nom du projet mais quand j'ajoute le second argument, ITEM, avec le correspondant "Group By" et le correspondant "HAVING" alors c'est le problème.

La somme c'est toujours sur la même colonne de la base Access. En effet sur une fonction qui marche, je ne fait que rajouter un argument de plus a la fonction avec trois éléments supplémentaires de la correspondante requête Access qui elle fonctionne; c'est a dire je rajout a l'instruction SELECT, le nouveau élément ITEM, l'instruction GROUP BY ITEM et l’instruction HAVING qui correspond a l'argument ITEM.

Merci encore, vous êtes vraiment gentil et patient

RE

C'est Pro et It déclarés en range qui ne paraissent pas normaux

Bonjour,

Merci beaucoup pour votre aide, j'ai essayé de déclarer les arguments de différentes façons sans succès, j'ai même modifiée la requête pour avoir un HAVING et un WHERE, mais ça ne marche pas.

J'ai donc contourné le problème un concaténant les deux colonnes et donc un seul argument et ça marche.

Je crois que le problème vient de la déclaration des arguments, j'aimerais quand même pouvoir le faire avec les deux arguments.

Merci encore

Re

Comme déjà dit tu dois utiliser des valeurs par des range comme arguments...

Bonsoir

Je ne sais pas si le pb est reglé.

Le having tu le mets sur un opérateur de type sum Having sum() > 4 , Having min() <2

Je l'ecrirais comme ça :

req = "SELECT ZPPO.ProjName, ZPPO.ITEM, Sum(ZPPO.AMOUNT) AS [Somme De AMOUNT] FROM [ZPPO] "& _

" Where ProjName= " & "'" & Pro & "'"& _

" And ITEM= " & "'" & It & "'"& _

" GROUP BY [[ZPPO.ProjName],[ZPPO.ITEM]]"

Une astuce : juste derriere la declaration de req ( du dessus ) colle ta req ds une cellule excel

range("A2") = req

copie colle la valeur de cette cellule ds un editeur access et tu verras ce qui est mal mis

CDt,

Bonjour,

Merci beaucoup, je viens juste de trouver la solution, le problème était l’écriture de HAVING, apparemment ça doit s’écrire sur deux différentes lignes, et de cette façon la fonction marche:

& "HAVING [ZPPO.ProjName]=" & Chr(34) & ProjName & Chr(34) _

& "AND [ZPPO.ITEM]=" & Chr(34) & ITEM & Chr(34)

Les deux arguments de la fonction ont été déclarés comme RANGE.

Par contre pouvez vous me dire comment écrire l’instruction HAVING ou WHERE, si les arguments sont déclarés comme INTEGER? En gardant les mêmes: ProjName et ITEM.

Merci beaucoup

Peux tu ecrire ta requete avec un where au lieu du having

Pour moi si tu filtres sur un element qui n est pas une somme ni un min ni un max ni un avg tu mets where et and si tu as plusieurs conditions

Par contre si tu avais filtre sur Sum(ZPPO.AMOUNT

Having Sum(ZPPO.AMOUNT) > 0

Cdt

En fait je n'ai pas de problème pour formuler une requête, mon seul problème reste l’écriture sur Excel VBA de l’instruction HAVING ou WHERE quand un argument a été déclaré en INTEGER. Comme tu peux voir quand l'argument est déclaré en RANGE j'utilise l’écriture que j'ai indique ici en haut et ça marche.

Merci encore

Qd tes valeurs de donnes que tu mets en integer t as pas des donnees qui ne colleraient pas avc le type entier ? Des virgules ou truc du genre

Rechercher des sujets similaires à "fonction personnalisee requete access"