VBA ADD-IN: Erreur 1004 lors de l'écriture dans des cellules

Bonjour à tous,

Je me sens idiot car je suis convaincu que j'ai du louper un chapitre. Mais tant pis j'ose vous poser la question.

Dans mon Add-In j'ai une fonction qui suite à des résultats doit écrire dans des cellules. Rien d'extraordinaire. Mais ...

Voilà un exemple simple d"écriture qui NE MARCHE PAS:

Function DoAdd(nb1 As Integer, nb2 As Integer)

   DoAdd = nb1 + nb2

   Call Ecrire

End Function

Sub Ecrire()

   With ActiveSheet

   ' .Range("H23:H24").Activate

   ' .Range("H23:H24").Select

   .Range("H23") = 8888

   .Range("H24") = 999

  End With

End Sub

Précision:

1) Que j'appelle la Sub(Ecrire) ou que ce soit directement codé dans la fonction ne change rien à l'erreur

2) En mettant la Sub(Ecrire) seule dans le module de la feuille concernée ca marche.

Quelqu'un pourrait-il m'expliquer le pourquoi?

Par avance merci

PS:

J'ai aussi testé les syntaxes suivantes sans succés:

Workbooks("Classeur1.xlsx").Worksheets("Feuil1").Range("C23").Activate

Workbooks("Classeur1.xlsx").Worksheets("Feuil1").Range("C23").Select 

Workbooks("Classeur1.xlsx").Worksheets("Feuil1").Range("C23") = nb1

ActiveWorkbook.Worksheets("Feuil1").Range("C23") = nb1

ActiveSheet.Range("=C23") = nb1 'Range("C24") = nb2

Précision: Je travaille avec Excel 2019.

Merci encore

Bonsoir,

vous parlez de module de la feuille, mais les fonctions personnalisées ne doivent-elles pas être dans un module standard ?

@ bientôt

LouReeD

Bonjour,

de plus une fonction retourne une valeur épicétou.
Si elle est appelée depuis une feuille, ça s'inscrit dans la cellule d'appel. Impossible de modifier son environnement ou une autre cellule.
(sauf à bidouille visant à détourner le rôle d'une fonction, plus ou moins scabreux...)

Donc :

Function DoAdd(nb1 As Integer, nb2 As Integer)
   DoAdd = nb1 + nb2
End Function

et dans une cellule :
=DoAdd(5;3)
eric

Bonjour

merci pour vos réponses.

Je n'ai écris qu'un exemple.

@LouReeD: Comme je l'ai dit la F(DoAdd) et la Sub(Ecrire) se trouve toutes les 2 dans un module d'un fichier. Une fonction personnelle "Add-In".

Si j'écris la Sub(Ecrire) dans une feuille calcul Feuil1 (comme une macro ordinaire) ca marche, pas de problème.

Ce qui me fiat penser que c'est à cause de son emplacement dans un fichier Add-in que j'ai l'erreur 1004 lors de la tentative d'écriture.

@eriiic: Vous avez raison une f() retourne une réponse . Dans mon exemple c'est la ligne: de code: DoAdd = nb1 + nb2

Mais, à priori, je ne vois pourquoi EN PLUS de la réponse ma fonction ne pourrait écrire dans une cellule?

J'ai cherché des heures et je ne comprends pas mon erreur.

J'ai un "début" de réponse trouvé sur le site du support Microsoft:

https : \\support.microsoft.com \ fr-fr \ office \ créer-des-fonctions-personnalisées-dans-excel-2f06c10b-3622-40d6-a1b2-b6748ae8231f

les fonctions personnalisées ne peuvent pas resizer des fenêtres, modifier une formule dans une cellule, ni modifier les options de police, de couleur ou de motif pour le texte dans une cellule. Si vous incluez un code d'« action » de ce type dans une procédure de fonction, la fonction renvoie la #VALUE! comme erreur

Super !

Je ne sais pas comment contourner cela mais je suis très surpris.

J'espère qu'un Expert Excel va pouvoir m'en dire SNIF SNIF!!

Bonjour,

Comment ça 'un début de réponse' ?
Le rôle d'une fonction est de retourner une valeur (ou un tableau si elle est matricielle), il faut l'accepter et l'admettre, c'est tout.
Si tu veux pouvoir écrire n'importe où, ou changer l'environnement, c'est un Sub qu'il faut.
Et comme tu as pu le constater, une fonction qui appelle un sub reste une fonction.
eric

Bonjour @eriic

… il faut l'accepter et l'admettre, c'est tout …

Ben oui pas le choix

Et comme tu as pu le constater, une fonction qui appelle un sub reste une fonction.

C'est là où ça me chiffonne pour ne pas dire m'a agacé.

Donc pas de soluce pour écrire dans une cellule à partir d'une F() située dans un autre fichier (Fonctions_personnalisées.xlam … par exemple, par hasard )

... Même en passant "par la fenêtre" (OK. Je ne la referai plus)

Encore merci pour votre aide et peut être qu'avec une nouvelle version Excel ce sera résolu.

Bonjour,

non, aucune version ne modifiera ça.
C'est le rôle et la raison d'être d'une fonction, et ça dans tous les langages.

Il y a bien une possibilité, mais tellement tarabiscotée, difficile à mettre en oeuvre que sa fiabilité peut être douteuse.
Pour aller à l'encontre des préceptes, ça ne vaut pas le coup.
eric

Bonjour,

en effet une fonction personnalisée = un calcul dans une feuille, mais s'il était possible de faire des changement dans d'autre cellules = calcul dans la feuille = calcul de la fonction = = = = !

On finirait en boucle infinie, non ? Ou bien alors il faut faire des "stop de calcul" "stop de réaction" etc...J'avoue je n'ai jamais essayé !

@ bientôt

LouReeD

Rechercher des sujets similaires à "vba add erreur 1004 lors ecriture"