Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Renvoi de formules calculées dans XL dans une requête Access

11 réponses
Avatar
Jac
(supersedes <mn.540e7d86ef2169c6.89607@mfra.net>)

Bonjour à tous,

j'ai besoin de créer dans une requête 3 x 36 formules de calcul afin de
pouvoir répartir des valeurs selon 3 groupes d'années pour 36
spécifications.

Les formules ressemblent à :
101A: VraiFaux([N°Tech]=101;[2009_2012];0)
101B: VraiFaux([N°Tech]=101;[2013_2015];0)
101C: VraiFaux([N°Tech]=101;[2016_2018];0)
et je recommance pour 102 et 103 et 104 et les autres...

Donc dans XL, je suis capable de générer toutes ces formules, et je
pensais les transposer, les copier et les coller dans Access, comme
quand je copie puis colle quelques champs pour les dupliquer.

Mais le collage n'a pas fonctionné... Est-ce possible ?

Merci d'avance à qui pourra me donner un avis, pour la prochaine fois.

Jac

10 réponses

1 2
Avatar
3stone
Salut,

"Jac"
| j'ai besoin de créer dans une requête 3 x 36 formules de calcul afin de
| pouvoir répartir des valeurs selon 3 groupes d'années pour 36
| spécifications.
|
| Les formules ressemblent à :
| 101A: VraiFaux([N°Tech]1;[2009_2012];0)
| 101B: VraiFaux([N°Tech]1;[2013_2015];0)
| 101C: VraiFaux([N°Tech]1;[2016_2018];0)
| et je recommance pour 102 et 103 et 104 et les autres...
|
| Donc dans XL, je suis capable de générer toutes ces formules, et je
| pensais les transposer, les copier et les coller dans Access, comme
| quand je copie puis colle quelques champs pour les dupliquer.
|
| Mais le collage n'a pas fonctionné... Est-ce possible ?


Lorsque l'on utilise Access, il faut oublier un peu (beaucoup ;) Excel...
et, une requête avec une charretée de iif() n'est pas ce qu'il y a de mieux
pour la maintenance de la base...

La solution est donc une fonction VBA qui te renvoie gentiment le résultat.

La fonction sera lisible et la requête tout autant ;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Jac
Bonjour 3stone,

conseil adopté à l'unanimité !!!
Mais je manque d'imagination pour créer la fonction.
Si tu peux me mettre sur la voie, ce serait génial.

Merci d'avance.

Salut,

"Jac"
j'ai besoin de créer dans une requête 3 x 36 formules de calcul afin de
pouvoir répartir des valeurs selon 3 groupes d'années pour 36
spécifications.

Les formules ressemblent à :
101A: VraiFaux([N°Tech]1;[2009_2012];0)
101B: VraiFaux([N°Tech]1;[2013_2015];0)
101C: VraiFaux([N°Tech]1;[2016_2018];0)
et je recommance pour 102 et 103 et 104 et les autres...

Donc dans XL, je suis capable de générer toutes ces formules, et je
pensais les transposer, les copier et les coller dans Access, comme
quand je copie puis colle quelques champs pour les dupliquer.

Mais le collage n'a pas fonctionné... Est-ce possible ?



Lorsque l'on utilise Access, il faut oublier un peu (beaucoup ;) Excel...
et, une requête avec une charretée de iif() n'est pas ce qu'il y a de mieux
pour la maintenance de la base...

La solution est donc une fonction VBA qui te renvoie gentiment le résultat.

La fonction sera lisible et la requête tout autant ;-)



Avatar
3stone
Salut,

"Jac"
[...]
| Mais je manque d'imagination pour créer la fonction.
| Si tu peux me mettre sur la voie, ce serait génial.


Je veux bien, mais...



| >> j'ai besoin de créer dans une requête 3 x 36 formules de calcul afin de
| >> pouvoir répartir des valeurs selon 3 groupes d'années pour 36
| >> spécifications.
| >>
| >> Les formules ressemblent à :
| >> 101A: VraiFaux([N°Tech]1;[2009_2012];0)
| >> 101B: VraiFaux([N°Tech]1;[2013_2015];0)
| >> 101C: VraiFaux([N°Tech]1;[2016_2018];0)
| >> et je recommance pour 102 et 103 et 104 et les autres...


mais il faudrait savoir ce qu'il y a à traiter...

Ce que tu indiques ci-dessus n'est pas clair, pour moi ;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Jac
Alors voil&agrave; :<br />
pour chaque N&deg;Tech, j'ai besoin de faire appara&icirc;tre, selon l'ann&eacute;e, de<br />
2009 &agrave; 2012 ou de 2013 &agrave; 2015 ou de 2016 &agrave; 2018 le montant en Euros<br />
correspondant.<br />
Donc le N&deg;Tech 101 est &quot;&eacute;clat&eacute;&quot; en 3 colonnes 101A + 101B + 101C.<br />
Et il y a 36 N&deg;Tech...<br />
<br />
A la fin, je remplis un rapport en cumulant les r&eacute;sultats pour chaque<br />
&quot;ProTrEns&quot; afin de donner les montants pour les trois p&eacute;riodes.<br />
<br />
CJoint un exemple avec la table &quot;REPARTITION&quot; et ma requ&ecirc;te actuelle<br />
&quot;ValeursFicheTechnique&quot; avec les calculs repris 108 fois !!!<br />
<br />
http://cjoint.com/?grbsyIqWhE<br />
<br />
Si c'est possible &agrave; simplifier avec une fonction (?) ou tout autre ruse<br />
car je sens que je vais avoir encore quelques autres r&eacute;partitions du<br />
m&ecirc;me genre &agrave; calculer.<br />
<br />
<blockquote class="block0"><br />
Salut,<br />
<br />
&quot;Jac&quot;<br />
[...]<br />
<blockquote class="block1"><br />
Mais je manque d'imagination pour cr&eacute;er la fonction.<br />
Si tu peux me mettre sur la voie, ce serait g&eacute;nial.<br />
<br />
</blockquote><br />
<br />
Je veux bien, mais...<br />
<br />
<br />
<br />
<blockquote class="block1"><br />
<blockquote class="block0"><br />
<blockquote class="block1"><br />
j'ai besoin de cr&eacute;er dans une requ&ecirc;te 3 x 36 formules de calcul afin de<br />
pouvoir r&eacute;partir des valeurs selon 3 groupes d'ann&eacute;es pour 36<br />
sp&eacute;cifications.<br />
<br />
Les formules ressemblent &agrave; :<br />
101A: VraiFaux([N&deg;Tech]1;[2009_2012];0)<br />
101B: VraiFaux([N&deg;Tech]1;[2013_2015];0)<br />
101C: VraiFaux([N&deg;Tech]1;[2016_2018];0)<br />
et je recommance pour 102 et 103 et 104 et les autres...<br />
<br />
</blockquote><br />
</blockquote><br />
</blockquote><br />
<br />
mais il faudrait savoir ce qu'il y a &agrave; traiter...<br />
<br />
Ce que tu indiques ci-dessus n'est pas clair, pour moi ;-)<br />
<br />
</blockquote><br />
<br />
<br />
<br />
Avatar
3stone
Salut,

"Jac"
| Alors voilà :
| pour chaque N°Tech, j'ai besoin de faire apparaître, selon l'année, de
| 2009 à 2012 ou de 2013 à 2015 ou de 2016 à 2018 le montant en Euros
| correspondant.
| Donc le N°Tech 101 est "éclaté" en 3 colonnes 101A + 101B + 101C.
| Et il y a 36 N°Tech...
|
| A la fin, je remplis un rapport en cumulant les résultats pour chaque
| "ProTrEns" afin de donner les montants pour les trois périodes.
|
| CJoint un exemple avec la table "REPARTITION" et ma requête actuelle
| "ValeursFicheTechnique" avec les calculs repris 108 fois !!!
|
| http://cjoint.com/?grbsyIqWhE
|
| Si c'est possible à simplifier avec une fonction (?) ou tout autre ruse
| car je sens que je vais avoir encore quelques autres répartitions du
| même genre à calculer.


Eh ben, je n'avais rien compris à ta question... ;-(

En fait, tu fait de l'Excel dans ta requête, et effectivement, on ne peut
pas remplacer cela par une fonction.

Ici, tu ajoutes des colonnes sur un raisonnement obscur pour moi...
déjà que je ne suis pas ce que l'on appelle un matheux :o))

Et, une fonction traite des colonnes, mais n'en crée pas ;-)
Alors, remplacer tous les iff() par une autre fonction n'apportera rien.

Par contre, créer une fonction qui ramène dans une seule colonne
les valeurs "101A" ou "101B" ou "101C" et la somme, ce serait réaliste...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Jac
Salut 3stone,

Eh ben, je n'avais rien compris à ta question... ;-(


Si tu n'avais rien compris à ma question, c'est qu'elle n'était pas
assez clairement exposée.
Mais c'est parfois difficile de faire clair et concis car quand
l'explication initiale est bien longue, ça ne donne pas trop envie aux
autres de lire, puis de chercher à comprendre, puis d'imaginer une
solution, puis de créer un exemple, puis de rédiger une réponse. Ça
m'arrive aussi de regarder plus haut ou plus bas quand c'est bien
touffu.

En fait, tu fait de l'Excel dans ta requête, et effectivement, on ne peut
pas remplacer cela par une fonction.


... dommage, car pour la saisie je n'ai rien trouvé de mieux que deux
colonnes : l'année et la valeur et pour l'exploitation, il faut que
j'éclate les valeurs selon les années.

Ici, tu ajoutes des colonnes sur un raisonnement obscur pour moi...
déjà que je ne suis pas ce que l'on appelle un matheux :o))


Pour moi, ce n'est pas vraiment obscur (heureusement)car pour chaque
N°tech et pour chaque tranche d'années, je dois calculer la valeur
ligne par ligne avant de renvoyer les résultats dans un rapport.

Donc c'est long et fastidieux, et pas facile pour être sûr que toute la
centaine de calculs très ressemblants renvoient bien les bonnes
valeurs, sans salade. Mais avec une table de valeurs test, y'a moyen de
bétonner.

Donc ma première idée était de faire tous les calculs dans Excel, puis
de les renvoyer dans Access comme champs calculés. Mais là, ce n'est
pas encore au point.

Mais en y réfléchissant, si je remonte tous la syntaxe de mes calculs
dans le champ texte d'une table, serait-il possible d'imaginer de
peupler une requête par vba ?
Acquisition des valeurs de la table, ouverture de la requête déjà
préparée (table + champs "de base") et affectation des variables à de
nouveaux champs.
Est-ce faisable en vba ? Dans Excel, je saurais faire quelque chose de
ressemblant, mais dans Access, il me manque encore un peu de
vocabulaire... vu que l'enregistreur de vba n'est pas encore né dans
Access...

Salut,

"Jac"
Alors voilà :
pour chaque N°Tech, j'ai besoin de faire apparaître, selon l'année, de
2009 à 2012 ou de 2013 à 2015 ou de 2016 à 2018 le montant en Euros
correspondant.
Donc le N°Tech 101 est "éclaté" en 3 colonnes 101A + 101B + 101C.
Et il y a 36 N°Tech...

A la fin, je remplis un rapport en cumulant les résultats pour chaque
"ProTrEns" afin de donner les montants pour les trois périodes.

CJoint un exemple avec la table "REPARTITION" et ma requête actuelle
"ValeursFicheTechnique" avec les calculs repris 108 fois !!!

http://cjoint.com/?grbsyIqWhE

Si c'est possible à simplifier avec une fonction (?) ou tout autre ruse
car je sens que je vais avoir encore quelques autres répartitions du
même genre à calculer.




Eh ben, je n'avais rien compris à ta question... ;-(

En fait, tu fait de l'Excel dans ta requête, et effectivement, on ne peut
pas remplacer cela par une fonction.

Ici, tu ajoutes des colonnes sur un raisonnement obscur pour moi...
déjà que je ne suis pas ce que l'on appelle un matheux :o))

Et, une fonction traite des colonnes, mais n'en crée pas ;-)
Alors, remplacer tous les iff() par une autre fonction n'apportera rien.

Par contre, créer une fonction qui ramène dans une seule colonne
les valeurs "101A" ou "101B" ou "101C" et la somme, ce serait réaliste...


Avatar
3stone
Salut,

"Jac"
[...]
| Mais en y réfléchissant, si je remonte tous la syntaxe de mes calculs
| dans le champ texte d'une table, serait-il possible d'imaginer de
| peupler une requête par vba ?
| Acquisition des valeurs de la table, ouverture de la requête déjà
| préparée (table + champs "de base") et affectation des variables à de
| nouveaux champs.
| Est-ce faisable en vba ? Dans Excel, je saurais faire quelque chose de
| ressemblant, mais dans Access, il me manque encore un peu de
| vocabulaire... vu que l'enregistreur de vba n'est pas encore né dans
| Access...

Si tu arrive à mettre ce qu'il faut dans une table...
dans ce cas, tu peut créer de toute pièce une requête avec la méthode
CreateQueryDef en concaténant "les bouts" que tu récupères dans ta table.
Mais je n'ai rien sous la main pour illuster...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Jac
> Salut,

"Jac"
[...]
Mais en y réfléchissant, si je remonte tous la syntaxe de mes calculs
dans le champ texte d'une table, serait-il possible d'imaginer de
peupler une requête par vba ?
Acquisition des valeurs de la table, ouverture de la requête déjà
préparée (table + champs "de base") et affectation des variables à de
nouveaux champs.
Est-ce faisable en vba ? Dans Excel, je saurais faire quelque chose de
ressemblant, mais dans Access, il me manque encore un peu de
vocabulaire... vu que l'enregistreur de vba n'est pas encore né dans
Access...



Si tu arrive à mettre ce qu'il faut dans une table...
dans ce cas, tu peut créer de toute pièce une requête avec la méthode
CreateQueryDef en concaténant "les bouts" que tu récupères dans ta table.
Mais je n'ai rien sous la main pour illuster...



Et avec ceci :
http://cjoint.com/?gsvRzgFngW
ça irait ?
Avatar
3stone
Salut,

"Jac"
[...]
| > Si tu arrive à mettre ce qu'il faut dans une table...
| > dans ce cas, tu peut créer de toute pièce une requête avec la méthode
| > CreateQueryDef en concaténant "les bouts" que tu récupères dans ta table.
| > Mais je n'ai rien sous la main pour illuster...
|
| Et avec ceci :
| http://cjoint.com/?gsvRzgFngW
| ça irait ?


Je vais regarder - dès que j'ai un peu de temps, mais je suppose que ce sont des données...

Lorsque je disais "sous la main", je pensais à un exemple de code ;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Jac
Moi, j'ai compris que c'est la matière première qui te manquait...

Salut,

"Jac"
[...]
Si tu arrive à mettre ce qu'il faut dans une table...
dans ce cas, tu peut créer de toute pièce une requête avec la méthode
CreateQueryDef en concaténant "les bouts" que tu récupères dans ta table.
Mais je n'ai rien sous la main pour illuster...



Et avec ceci :
http://cjoint.com/?gsvRzgFngW
ça irait ?




Je vais regarder - dès que j'ai un peu de temps, mais je suppose que ce sont
des données...

Lorsque je disais "sous la main", je pensais à un exemple de code ;-)


1 2