Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


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.