[Q] [VBA] Formule VBA et ParamArray => comment sélectionner une zone?
5 réponses
JCF
Bonjour à tous
j'utilise VBA pour me créer une formule (que j'utilise dans des feuilles de calcul) nécessitant jusqu'à 17 variables, mais dont beaucoup sont facultatives..
Jusqu'à présent, j'avais défini ma fonction de la façon suivante
Cette fonction nécessitait donc de saisir 17 entrées, même si plusieurs variables étaient inutilisées. Si les 17 variables se trouvent à la queue-leu-leu, il serait plus facile de pouvoir sélectionner directement une plage de cellules. Idem si il y a moins de 17 variables, ou en deux trois plages de cellules successives. La solution que j'ai trouvé pour faire cela est de déclarer ma fonction de la façon suivante
Function IFA(ParamArray VARS()
TT = UBound(VARS) 'Pour voir combien de variables ont été entrée
Ensuite j'appelle les différentes variables en utilisant "VARS(i)" i étant une valeur de 0 à TT
Et bien ça ne marche que si lors de l'entrée des variables dans la formule, je sélectionne les cellules de la feuille une à une. La selection de plages de cellules ne fonctionne pas. A quoi cela est-il dû? Où me plante-je sachant que j'aimerai bien que l'on puisse indiféremment entrer les variables soit par
-une plage de cellules,
-plusieurs plages de cellules
-cellule par cellule
Merci par avance pour vos remarques et suggestions
JC
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Daniel.M
Bonjour JC,
La sélection de plages te retournera un Variant qui sera un tableau à 2 dimensions.
'Exemple: Function IFA(ParamArray VARS()) Dim i As Integer, j As Integer, n As Integer, V As Variant n = UBound(VARS) j = LBound(VARS) For i = j To n V = VARS(i) Next i IFA = 1 + n - j End Function
Si tu saisis sur la feuille:
=ifa(A1;B1:B5;C1)
À ta 2e itération dans la boucle, V sera un tableau à 2 dimensions.
Salutations,
Daniel M.
"JCF" wrote in message news:
Bonjour à tous, j'utilise VBA pour me créer une formule (que j'utilise dans des feuilles de calcul) nécessitant jusqu'à 17 variables, mais dont beaucoup sont
facultatives...
Jusqu'à présent, j'avais défini ma fonction de la façon suivante:
Cette fonction nécessitait donc de saisir 17 entrées, même si plusieurs variables étaient inutilisées. Si les 17 variables se trouvent à la
queue-leu-leu, il serait plus facile de pouvoir sélectionner directement une plage de cellules. Idem si il y a moins de 17 variables, ou en deux trois plages de cellules successives. La solution que j'ai trouvé pour faire cela est de déclarer ma fonction de la façon suivante:
Function IFA(ParamArray VARS())
TT = UBound(VARS) 'Pour voir combien de variables ont été entrées
Ensuite j'appelle les différentes variables en utilisant "VARS(i)" i étant une valeur de 0 à TT.
Et bien ça ne marche que si lors de l'entrée des variables dans la formule, je sélectionne les cellules de la feuille une à une. La selection de plages de
cellules ne fonctionne pas. A quoi cela est-il dû? Où me plante-je sachant que j'aimerai bien que l'on puisse indiféremment entrer les variables soit par:
-une plage de cellules, -plusieurs plages de cellules, -cellule par cellule?
Merci par avance pour vos remarques et suggestions, JC
Bonjour JC,
La sélection de plages te retournera un Variant qui sera un tableau à 2
dimensions.
'Exemple:
Function IFA(ParamArray VARS())
Dim i As Integer, j As Integer, n As Integer, V As Variant
n = UBound(VARS)
j = LBound(VARS)
For i = j To n
V = VARS(i)
Next i
IFA = 1 + n - j
End Function
Si tu saisis sur la feuille:
=ifa(A1;B1:B5;C1)
À ta 2e itération dans la boucle, V sera un tableau à 2 dimensions.
Salutations,
Daniel M.
"JCF" <anonymous@discussions.microsoft.com> wrote in message
news:505A7EEC-D942-4B31-BFAD-BD3DF0E59726@microsoft.com...
Bonjour à tous,
j'utilise VBA pour me créer une formule (que j'utilise dans des feuilles de
calcul) nécessitant jusqu'à 17 variables, mais dont beaucoup sont
facultatives...
Jusqu'à présent, j'avais défini ma fonction de la façon suivante:
Cette fonction nécessitait donc de saisir 17 entrées, même si plusieurs
variables étaient inutilisées. Si les 17 variables se trouvent à la
queue-leu-leu, il serait plus facile de pouvoir sélectionner directement une
plage de cellules. Idem si il y a moins de 17 variables, ou en deux trois plages
de cellules successives. La solution que j'ai trouvé pour faire cela est de
déclarer ma fonction de la façon suivante:
Function IFA(ParamArray VARS())
TT = UBound(VARS) 'Pour voir combien de variables ont été entrées
Ensuite j'appelle les différentes variables en utilisant "VARS(i)" i étant une
valeur de 0 à TT.
Et bien ça ne marche que si lors de l'entrée des variables dans la formule, je
sélectionne les cellules de la feuille une à une. La selection de plages de
cellules ne fonctionne pas. A quoi cela est-il dû? Où me plante-je sachant que
j'aimerai bien que l'on puisse indiféremment entrer les variables soit par:
-une plage de cellules,
-plusieurs plages de cellules,
-cellule par cellule?
Merci par avance pour vos remarques et suggestions,
JC
La sélection de plages te retournera un Variant qui sera un tableau à 2 dimensions.
'Exemple: Function IFA(ParamArray VARS()) Dim i As Integer, j As Integer, n As Integer, V As Variant n = UBound(VARS) j = LBound(VARS) For i = j To n V = VARS(i) Next i IFA = 1 + n - j End Function
Si tu saisis sur la feuille:
=ifa(A1;B1:B5;C1)
À ta 2e itération dans la boucle, V sera un tableau à 2 dimensions.
Salutations,
Daniel M.
"JCF" wrote in message news:
Bonjour à tous, j'utilise VBA pour me créer une formule (que j'utilise dans des feuilles de calcul) nécessitant jusqu'à 17 variables, mais dont beaucoup sont
facultatives...
Jusqu'à présent, j'avais défini ma fonction de la façon suivante:
Cette fonction nécessitait donc de saisir 17 entrées, même si plusieurs variables étaient inutilisées. Si les 17 variables se trouvent à la
queue-leu-leu, il serait plus facile de pouvoir sélectionner directement une plage de cellules. Idem si il y a moins de 17 variables, ou en deux trois plages de cellules successives. La solution que j'ai trouvé pour faire cela est de déclarer ma fonction de la façon suivante:
Function IFA(ParamArray VARS())
TT = UBound(VARS) 'Pour voir combien de variables ont été entrées
Ensuite j'appelle les différentes variables en utilisant "VARS(i)" i étant une valeur de 0 à TT.
Et bien ça ne marche que si lors de l'entrée des variables dans la formule, je sélectionne les cellules de la feuille une à une. La selection de plages de
cellules ne fonctionne pas. A quoi cela est-il dû? Où me plante-je sachant que j'aimerai bien que l'on puisse indiféremment entrer les variables soit par:
-une plage de cellules, -plusieurs plages de cellules, -cellule par cellule?
Merci par avance pour vos remarques et suggestions, JC
isabelle
bonjour JCF,
je crois bien que c'est impossible, les arguments d'une fonction ne peuvent être qu'une constante, une variable ou une expression transmise à une procédure et non un tableau.
Merci par avance pour vos remarques et suggestions, JC
bonjour JCF,
je crois bien que c'est impossible, les arguments d'une fonction ne
peuvent être qu'une constante, une variable ou une expression transmise
à une procédure et non un tableau.
je crois bien que c'est impossible, les arguments d'une fonction ne peuvent être qu'une constante, une variable ou une expression transmise à une procédure et non un tableau.
Merci par avance pour vos remarques et suggestions, JC
isabelle
... dans le sens de sélection de plage à l'aide de la souris ( puisqu'à ce moment on est en mode édition)
isabelle
bonjour JCF,
je crois bien que c'est impossible, les arguments d'une fonction ne peuvent être qu'une constante, une variable ou une expression transmise à une procédure et non un tableau.
Merci par avance pour vos remarques et suggestions, JC
... dans le sens de sélection de plage à l'aide de la souris ( puisqu'à
ce moment on est en mode édition)
isabelle
bonjour JCF,
je crois bien que c'est impossible, les arguments d'une fonction ne
peuvent être qu'une constante, une variable ou une expression transmise
à une procédure et non un tableau.
... dans le sens de sélection de plage à l'aide de la souris ( puisqu'à ce moment on est en mode édition)
isabelle
bonjour JCF,
je crois bien que c'est impossible, les arguments d'une fonction ne peuvent être qu'une constante, une variable ou une expression transmise à une procédure et non un tableau.
Merci par avance pour vos remarques et suggestions, JC
JCF
----- isabelle a écrit : ----
isabelle a écrit
je crois bien que c'est impossible, les arguments d'une fonction n peuvent être qu'une constante, une variable ou une expression transmis à une procédure et non un tableau Ca m'étonne ce que tu me dis là car en déclarant ma Fonction de la seconde façon (Function IFA(ParamArray VARS())), elle fonctionne, mais seulement si je sélectionne les variables cellule par cellule. Or c'est déjà bien un tableau qui est là fourni à la fonction en argument
En fait mon problème, c'est d'arriver à faire interpréter à la fonction, lorsque c'est une plage de cellules qui est sélectionnée, que chaque cellule correspond à une variable, car pour l'instant elle n'a pas l'air de comprendre cette utilisation là et renvoie l'erreur #value A Jean-Christophe
----- isabelle a écrit : ----
isabelle a écrit
je crois bien que c'est impossible, les arguments d'une fonction n
peuvent être qu'une constante, une variable ou une expression transmis
à une procédure et non un tableau
Ca m'étonne ce que tu me dis là car en déclarant ma Fonction de la seconde façon (Function IFA(ParamArray VARS())), elle fonctionne, mais seulement si je sélectionne les variables cellule par cellule. Or c'est déjà bien un tableau qui est là fourni à la fonction en argument
En fait mon problème, c'est d'arriver à faire interpréter à la fonction, lorsque c'est une plage de cellules qui est sélectionnée, que chaque cellule correspond à une variable, car pour l'instant elle n'a pas l'air de comprendre cette utilisation là et renvoie l'erreur #value
A
Jean-Christophe
je crois bien que c'est impossible, les arguments d'une fonction n peuvent être qu'une constante, une variable ou une expression transmis à une procédure et non un tableau Ca m'étonne ce que tu me dis là car en déclarant ma Fonction de la seconde façon (Function IFA(ParamArray VARS())), elle fonctionne, mais seulement si je sélectionne les variables cellule par cellule. Or c'est déjà bien un tableau qui est là fourni à la fonction en argument
En fait mon problème, c'est d'arriver à faire interpréter à la fonction, lorsque c'est une plage de cellules qui est sélectionnée, que chaque cellule correspond à une variable, car pour l'instant elle n'a pas l'air de comprendre cette utilisation là et renvoie l'erreur #value A Jean-Christophe
JCF
----- Daniel.M a écrit : ----
La sélection de plages te retournera un Variant qui sera un tableau à dimensions
Si tu saisis sur la feuille
=ifa(A1;B1:B5;C1
Tu veux dire qu'en fait le tableau VARS ressemblerait à ça? A1 B1 C B B B B5 ?
J'ai beaucoup de mal à comprendre comment il stocke tout ça! En fait, je veux ni plus ni moins arriver à faire la même chose que la fonction intégrée SUM, à laquelle les arguments que l'on passe peuvent être des cellules ou des plages de cellules Comment dois-je faire pour récupérer les valeurs Une boucle du même genre que celle que tu as montrée Merci et à JC
----- Daniel.M a écrit : ----
La sélection de plages te retournera un Variant qui sera un tableau à
dimensions
Si tu saisis sur la feuille
=ifa(A1;B1:B5;C1
Tu veux dire qu'en fait le tableau VARS ressemblerait à ça?
A1 B1 C
B
B
B
B5 ?
J'ai beaucoup de mal à comprendre comment il stocke tout ça! En fait, je veux ni plus ni moins arriver à faire la même chose que la fonction intégrée SUM, à laquelle les arguments que l'on passe peuvent être des cellules ou des plages de cellules
Comment dois-je faire pour récupérer les valeurs
Une boucle du même genre que celle que tu as montrée
Merci et à
JC
La sélection de plages te retournera un Variant qui sera un tableau à dimensions
Si tu saisis sur la feuille
=ifa(A1;B1:B5;C1
Tu veux dire qu'en fait le tableau VARS ressemblerait à ça? A1 B1 C B B B B5 ?
J'ai beaucoup de mal à comprendre comment il stocke tout ça! En fait, je veux ni plus ni moins arriver à faire la même chose que la fonction intégrée SUM, à laquelle les arguments que l'on passe peuvent être des cellules ou des plages de cellules Comment dois-je faire pour récupérer les valeurs Une boucle du même genre que celle que tu as montrée Merci et à JC