OVH Cloud OVH Cloud

résultat fonction personalisée sur plusieur cellules

4 réponses
Avatar
PG49
Bonjour,

Je souhaiterais à l'aide d'une fonction personnalisée, faire apparaître le
résultat, qui se compose de plusieurs nombre, dans autant de cellule que de
nombre.

Exemple : en V16 ma fonction =ETAB(Q16;S16;U16;$S$6)
cette fonction permet d'aller chercher des informations dans une base de
données.
Si la base dedonnée doit renvoyer 12 - 654 et 3698, j'aurais voulu avoir :
en W16 : 12
en X16 : 654
en Y16 : 3698

j'ai essayé avec : ActiveCell.Offset(0, 1)=ETAB mais a priori la fonction
s'arrête dés qu'elle essaye d'écrire dans une autre cellule.

En espérant avoir été assez clair,

Merci de vos réponses et bonnes fêtes de fin d'année.

4 réponses

Avatar
Patrick Fredin
Bonjour,

Je ne suis pas sûr que l'utilisation d'une fonction personnalisée soit un
bon choix.

Ou alors il faudrait que dans les paramètres de la fonction tu indiques la
cellule où se trouve la fonction pour qu'il sache à partir de quelle cellule
il doit ajouter des valeurs. Quelque chose comme cela :

Function ETAB(Param1, Param2, Param3, Param4, LaCellule as Range)

Ensuite, tu peux utiliser la procédure suivante :

LaCellule.End(xlRight).Offset(0, 1) = ...

Comme cela, en faisant une boucle sur les données récupérées de la base, les
infos se mettront au bon endroit. Mais encore une fois, je ne suis pas sûr
que l'utilisation d'une fonction personnalisée soit un bon choix parce que
une fonction a pour but de renvoyer une valeur plutôt que d'exécuter un
traitement. Cela dit, une fonction peut très bien aller chercher des
informations dans diverses sources avant de renvoyer une valeur.

Tiens-moi au courant du résultat.

--
Patrick

"PG49" wrote in message
news:%
Bonjour,

Je souhaiterais à l'aide d'une fonction personnalisée, faire apparaître le
résultat, qui se compose de plusieurs nombre, dans autant de cellule que
de
nombre.

Exemple : en V16 ma fonction =ETAB(Q16;S16;U16;$S$6)
cette fonction permet d'aller chercher des informations dans une base de
données.
Si la base dedonnée doit renvoyer 12 - 654 et 3698, j'aurais voulu avoir :
en W16 : 12
en X16 : 654
en Y16 : 3698

j'ai essayé avec : ActiveCell.Offset(0, 1)=ETAB mais a priori la fonction
s'arrête dés qu'elle essaye d'écrire dans une autre cellule.

En espérant avoir été assez clair,

Merci de vos réponses et bonnes fêtes de fin d'année.




Avatar
Daniel.M
Bonsoir,

Tu sélectionnes W16:Y16.
Tu entres ta fonction de manière matricielle (Ctrl-Maj-Entrée)
=ETAB(Q16;S16;U16;$S$6)

Function ETAB(a,b,c,d) as Variant

Dim V as variant

Redim V(1 to 3)

V(1) = a
V(2) = b
V(3) = c+d
ETAB=V
End Function

Bien sûr, ton traitement spécifique est plus élaboré (à l'intérieur de ETAB)
mais le principe est là pour une matrice horizontale, à savoir, génération d'un
tableau d'1 dimension et assignation de ce tableau au nom de fonction.

Salutations,

Daniel M.

"PG49" wrote in message news:%
Bonjour,

Je souhaiterais à l'aide d'une fonction personnalisée, faire apparaître le
résultat, qui se compose de plusieurs nombre, dans autant de cellule que de
nombre.

Exemple : en V16 ma fonction =ETAB(Q16;S16;U16;$S$6)
cette fonction permet d'aller chercher des informations dans une base de
données.
Si la base dedonnée doit renvoyer 12 - 654 et 3698, j'aurais voulu avoir :
en W16 : 12
en X16 : 654
en Y16 : 3698

j'ai essayé avec : ActiveCell.Offset(0, 1)=ETAB mais a priori la fonction
s'arrête dés qu'elle essaye d'écrire dans une autre cellule.

En espérant avoir été assez clair,

Merci de vos réponses et bonnes fêtes de fin d'année.




Avatar
PG49
Bonjour,

Hélas cela ne fonctionne pas. En effet, en effectuant la fonction pas a
pas on se rend compte que celle ci s'arrête sur la ligne
LaCellule.End(xlToRight).Offset(0, 1) = A. c'est à dire au moment d'écrire
le résultat dans une autre cellule que celle ou se trouve la fonction.
Mais j'ai également essayé la méthode (formule matricielle) de Daniel qui
fonctionne.

Merci en tout cas pour la réponse et à nouveau bonnes fêtes de fin d'année.



"Patrick Fredin" a écrit dans le
message de news:
Bonjour,

Je ne suis pas sûr que l'utilisation d'une fonction personnalisée soit un
bon choix.

Ou alors il faudrait que dans les paramètres de la fonction tu indiques la
cellule où se trouve la fonction pour qu'il sache à partir de quelle
cellule

il doit ajouter des valeurs. Quelque chose comme cela :

Function ETAB(Param1, Param2, Param3, Param4, LaCellule as Range)

Ensuite, tu peux utiliser la procédure suivante :

LaCellule.End(xlRight).Offset(0, 1) = ...

Comme cela, en faisant une boucle sur les données récupérées de la base,
les

infos se mettront au bon endroit. Mais encore une fois, je ne suis pas sûr
que l'utilisation d'une fonction personnalisée soit un bon choix parce que
une fonction a pour but de renvoyer une valeur plutôt que d'exécuter un
traitement. Cela dit, une fonction peut très bien aller chercher des
informations dans diverses sources avant de renvoyer une valeur.

Tiens-moi au courant du résultat.

--
Patrick

"PG49" wrote in message
news:%
Bonjour,

Je souhaiterais à l'aide d'une fonction personnalisée, faire apparaître
le


résultat, qui se compose de plusieurs nombre, dans autant de cellule que
de
nombre.

Exemple : en V16 ma fonction =ETAB(Q16;S16;U16;$S$6)
cette fonction permet d'aller chercher des informations dans une base de
données.
Si la base dedonnée doit renvoyer 12 - 654 et 3698, j'aurais voulu avoir
:


en W16 : 12
en X16 : 654
en Y16 : 3698

j'ai essayé avec : ActiveCell.Offset(0, 1)=ETAB mais a priori la
fonction


s'arrête dés qu'elle essaye d'écrire dans une autre cellule.

En espérant avoir été assez clair,

Merci de vos réponses et bonnes fêtes de fin d'année.








Avatar
PG49
Bonjour,

Génial cela fonctionne.

Merci pour la réponse et bonnes fêtes de fin d'année.

"Daniel.M" a écrit dans le message de
news:
Bonsoir,

Tu sélectionnes W16:Y16.
Tu entres ta fonction de manière matricielle (Ctrl-Maj-Entrée)
=ETAB(Q16;S16;U16;$S$6)

Function ETAB(a,b,c,d) as Variant

Dim V as variant

Redim V(1 to 3)

V(1) = a
V(2) = b
V(3) = c+d
ETAB=V
End Function

Bien sûr, ton traitement spécifique est plus élaboré (à l'intérieur de
ETAB)

mais le principe est là pour une matrice horizontale, à savoir, génération
d'un

tableau d'1 dimension et assignation de ce tableau au nom de fonction.

Salutations,

Daniel M.

"PG49" wrote in message
news:%

Bonjour,

Je souhaiterais à l'aide d'une fonction personnalisée, faire apparaître
le


résultat, qui se compose de plusieurs nombre, dans autant de cellule que
de


nombre.

Exemple : en V16 ma fonction =ETAB(Q16;S16;U16;$S$6)
cette fonction permet d'aller chercher des informations dans une base de
données.
Si la base dedonnée doit renvoyer 12 - 654 et 3698, j'aurais voulu avoir
:


en W16 : 12
en X16 : 654
en Y16 : 3698

j'ai essayé avec : ActiveCell.Offset(0, 1)=ETAB mais a priori la
fonction


s'arrête dés qu'elle essaye d'écrire dans une autre cellule.

En espérant avoir été assez clair,

Merci de vos réponses et bonnes fêtes de fin d'année.