Oui désolé, j'ai écrit un exemple et je suis allé un peu trop vite.
A la place de "typeCell = Testvartype(typeCell) ", je voulais marquer
"typeCell = Testvartype(Cell) ".
En effet, ca renvoyait 9 dans ce cas.
Ta correction m'apporte une solution partielle en ajoutant le ".value" à
Cell avant de le passer en argument à ma fonction.
Cependant, je n'avais pas expliqué tout mon problème. Je vais expliquer mon
cas plus en détail (je m'y prend peut-être mal).
La fonction FonctionExemple peut etre appelée soit depuis une procédure
MainExemple soit directement depuis une formule dans le classeur. Or dans le
cas où je l'appelle depuis une formule dans le classeur, l'argument Entree1
de la fonction FonctionExemple est une "cell" donc si je teste avec vartype,
celui-ci me renvoie 9. Ceci ne permet pas de déterminer si je peux effectuer
ma fonction correctement ou si je dois renvoyer "erreur type incorrect". Ta
solution en ajoutant ".value" va me permettre de vérifier un peu plus en
testant l'objet dans le cas où vartype me renvoie 9. Cependant l'argument
Entree1 n'est pas forcément de type objet et le code refuse de s'exécuter si
j'écris "Entree1.value" quelque part dans ma fonction (même si à l'intérieur
d'un test qui ne devrait s'exécuter que lorsqu'on est en présence d'un
objet). L'erreur est "Erreur d'execution BASIC '91' variable d'objet non
définie".
De plus tous les objets n'ont pas forcément une propriété value.
Merci de vous etre penché sur mon problème! Si vous voyez des pistes à
creuser ou même une solution, ca serait super!
PS: garder à l'idée que c'est un exemple.
PS2: je pourrais faire 2 fonctions différentes mais je trouve ca dommage car
j'ai des centaines de fonctions qui sont faites ainsi et dupliquer autant de
code sera lourd à gérer pour la maintenance future. Et j'aimerai si possible
trouver une solution qui marche avec Excel et libreoffice (dans Excel, je
n'ai pas ce problème car il doit convertir implicitement cell en
cell.value).
Voici mon code:
Option VBASupport 1
Option Explicit
sub MainExemple()
dim MonParametreEntree as variant
dim test as variant
MonParametreEntree = "exemple" 'test pour simuler avec une
chaine
test = FonctionExemple(MonParametreEntree)
msgbox(MonParametreEntree & " : " & test)
MonParametreEntree = 1 'test pour simuler avec
un entier
test = FonctionExemple(MonParametreEntree)
msgbox(MonParametreEntree & " : " & test)
set MonParametreEntree = Worksheets("Feuille1").Cells(1, 1) 'test pour
simuler une formule dans excel
test = FonctionExemple(MonParametreEntree)
msgbox(MonParametreEntree & " : " & test)
end sub
function FonctionExemple(Entree1 as variant) as variant
dim result as variant
dim msgErreur as string
msgErreur = "" 'initialisation de
msgErreur à une chaine vide
if vartype(Entree1) = 9 then 'test si Entree1 est un
objet
if vartype(Entree1.value) <> 8 then 'test si Entree1 est
different d'une chaine
msgErreur = "erreur type incorrect"
endif
elseif vartype(Entree1) <> 8 then 'test si Entree1 est
different d'une chaine
msgErreur = "erreur type incorrect"
endif
if msgErreur = "" then 'on calcule seulement
si aucune erreur
result = len(Entree1) 'permet de renvoyer le
nombre de caractère de la chaine
endif
FonctionExemple = result
end function
--
View this message in context:
http://nabble.documentfoundation.org/macro-Vartype-sur-une-cellule-dans-une-fonction-tp3738878p3741609.html
Sent from the Users mailing list archive at Nabble.com.
--
Envoyez un mail à users+help@fr.libreoffice.org pour savoir comment vous désinscrire
Les archives de la liste sont disponibles à http://listarchives.libreoffice.org/fr/users/
Tous les messages envoyés sur cette liste seront archivés publiquement et ne pourront pas être
supprimés
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.