modifier le contenu de cell depuis function,impos?

L

lardi

Guest
Lorsque j'essaye de modifier le contenu d'une cellule Excel dans le code d'une function VBA, la function s'execute jusque avant l'instruction d'affectation de la cellule puis s'interromp sans autre forme de procès.
en clair, voici le code utilisé dans un nouveau module créé dans VBA:
-----
Function updatecell()

Cells(2, 2).Value = '123'

End Function
-----
lorsque j'appelle cette fonction dans une cellule quelconque ( =updatecell() ), j'obtiens dans cette cellule #valeur! et le contenu de la cellule B2, n'a pas été mis à jour.
Si par contre j'appelle cette fonction depuis un sub lié par exemple à un bouton créé sur la feuille de calcul, là, pas de problème.....
Pourquoi la function se 'plante-t-elle' sur cette instruction lorsqu'elle est appellée directement depuis la feuille excell.

A noter que dans le code original, il y a des calculs qui sont faits dans la function et que je peux vérifier avec des msgbox mais pas moyen d'écrire les résultats dans des cellules. C'est evervant !

merci pour vos réponses.
 

chris

XLDnaute Barbatruc
Bonjour
Une fonction ne marche pas comme cela : elle utilises les valeurs des arguments éventuels pour réaliser un calcul et renvoie le résultat : la fonction somme(A1:A3) utilise l'argument plage A1:A3 et renvoie la somme du contenu des cellulles de cette plage.

Ton code est une procédure et non une fonction. Tu dois utiliser Sub et non Function et l'appeler par un bputon ou un raccourci.

Mais si tu expliques exactement ton objectif on pourra peut-être te donner plus de pistes.
 
L

lardi

Guest
Salut chris, salut à tous,

Biensûr, une fonction n'est pas FAITE POUR être utilisée sans argument et ne pas retourner de valeur !

Mais pour clarifier ma question qui est peut-être un peu masquée dans beaucoup de texte, je voudrais savoir :

Pourquoi est-il impossible de modifier le contenu d'une cellule excel à partir d'une FUNCTION appellée directement depuis une autre cellule excel ?

En clair, tu écris le code:
Function updatecell()

Cells(2, 2).Value = '123'

End Function

(que je donne comme EXEMPLE SIMPLIFé) dans un module du classeur excel et tu executes le code en tapant dans une cellule '=updatecell()' sans les guillemets, hein !!! et ça ne fonctionne pas !!!!

La question n'est pas de débattre philosophiquement de l'emploi que je fais d'une FUNCTION mais c'est de savoir pourquoi ça ne fonctionne pas ???!!!

Moi, je ne vois pas pourquoi ?
Surtout que, si je l'appelle depuis un bouton ajouté à la feuille excel, du genre :

Private Sub CommandButton1_Click()
Call updatecell
End Sub

là, ca fonctionne sans rien changer au code.....

Ce qui est amusant, c'est que dans le code original, la FUNCTION fait pas mal de choses (calcul de valeurs) avant de vouloir inscrire les résultats dans les cellules cibles. Et le code est exécuté jusqu'à rencontrer la première instruction cells(i, j).value = valeur
et là, ça se plante !!!

Qqun peut-il m'expliquer ?
Merci d'avance
 

Discussions similaires

Réponses
1
Affichages
131
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 348
Messages
2 087 510
Membres
103 570
dernier inscrit
patrickb83p