Impossible d'écrire dans une cellule depuis une fonction

Le
TTT
Bonjour;

J'ai un pb. Quand je fais ça, ça explose :
Function X()
Range("A1").value = 18
End Function

Alors que qd je fais ça, ça marche :
Sub X()
Range("A1").value = 18
End Sub
On trouve bien la valeur 18 en cellule A1.

Pourquoi? y a-t-il moyen de contourner?
Voilà en fait ce que je veux :
Function TableMultiplicationNxN(ByVal rg as Range, ByVal N as Integer) as
string
for i = 1 to N
for j = 1 to N
rg(i, j) = i * j
Next
Next
TableMultiplicationNxN = "Table " & N & "x" & N & " créée avec succès".
End Function
En gros, je passe un range en paramètre à une fonction, la fonction fait des
calculs très compliqués et écrit les résultats dans le range. Puis en valeur
unique de retour, un code ou un message signalant que tout s'est bien passé.
Pourquoi je peux pas faire ça?

Merci d'avance.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacky
Le #4853371
Bonsoir,
'---------
Function x()
x = 18
End Function
'-----------
Dans une cellule
=X()

--
Salutations
JJ


"TTT" 47000137$0$8023$
Bonjour;

J'ai un pb. Quand je fais ça, ça explose :
Function X()
Range("A1").value = 18
End Function

Alors que qd je fais ça, ça marche :
Sub X()
Range("A1").value = 18
End Sub
On trouve bien la valeur 18 en cellule A1.

Pourquoi? y a-t-il moyen de contourner?
Voilà en fait ce que je veux :
Function TableMultiplicationNxN(ByVal rg as Range, ByVal N as Integer) as
string
for i = 1 to N
for j = 1 to N
rg(i, j) = i * j
Next
Next
TableMultiplicationNxN = "Table " & N & "x" & N & " créée avec succès".
End Function
En gros, je passe un range en paramètre à une fonction, la fonction fait
des calculs très compliqués et écrit les résultats dans le range. Puis en
valeur unique de retour, un code ou un message signalant que tout s'est
bien passé.
Pourquoi je peux pas faire ça?

Merci d'avance.



JB
Le #4853351
Bonsoir,

Une fonction contrairement à une procédure (Sub) retourne un résultat
mais ne peut pas agir sur une cellule.
Le résultat peut être une valeur, un tableau.

http://boisgontierjacques.free.fr/pages_site/procedures.htm#Fonctions

Function TableMult(n)
Dim temp(1 To 10)
For i = 1 To 10
temp(i) = i & "x" & n & "=" & i * n
Next
tableMult = Application.Transpose(temp)
End Function

Dans le tableur:
-sélectionner A1:A9
=Tablemult(5)
-valider avec Maj+ctrl+entrée

JB
http://boisgontierjacques.free.fr


On 30 sep, 21:59, "TTT"
Bonjour;

J'ai un pb. Quand je fais ça, ça explose :
Function X()
Range("A1").value = 18
End Function

Alors que qd je fais ça, ça marche :
Sub X()
Range("A1").value = 18
End Sub
On trouve bien la valeur 18 en cellule A1.

Pourquoi? y a-t-il moyen de contourner?
Voilà en fait ce que je veux :
Function TableMultiplicationNxN(ByVal rg as Range, ByVal N as Integer) as
string
for i = 1 to N
for j = 1 to N
rg(i, j) = i * j
Next
Next
TableMultiplicationNxN = "Table " & N & "x" & N & " créée avec succès".
End Function
En gros, je passe un range en paramètre à une fonction, la fonction f ait des
calculs très compliqués et écrit les résultats dans le range. Pui s en valeur
unique de retour, un code ou un message signalant que tout s'est bien pas sé.
Pourquoi je peux pas faire ça?

Merci d'avance.


TTT
Le #4853301
Bonsoir et merci de votre aide.
En fait je connaissais déjà votre truc.
Mais ce n'est pas ce que je voudrais.
Je répète : je voudrais par exemple en A1 écrire = TableMult(C8).
La fonction me remplit la table de multiplication dans la plage C8:L17. Et
m'écrit par exemple : "Ok 10x10 valeurs calculées avec succès".
C'est un besoin très spécifique.
=> Et surtout j'ai déjà vu faire ça ! mais le code de la fameuse fonction
est caché dans une dll, je n'ai jamais su comment c'est fait. Par contre, je
suis SUR que c'est faisable pour l'avoir vu.

"JB"
Bonsoir,

Une fonction contrairement à une procédure (Sub) retourne un résultat
mais ne peut pas agir sur une cellule.
Le résultat peut être une valeur, un tableau.

http://boisgontierjacques.free.fr/pages_site/procedures.htm#Fonctions

Function TableMult(n)
Dim temp(1 To 10)
For i = 1 To 10
temp(i) = i & "x" & n & "=" & i * n
Next
tableMult = Application.Transpose(temp)
End Function

Dans le tableur:
-sélectionner A1:A9
=Tablemult(5)
-valider avec Maj+ctrl+entrée

JB
http://boisgontierjacques.free.fr


On 30 sep, 21:59, "TTT"
Bonjour;

J'ai un pb. Quand je fais ça, ça explose :
Function X()
Range("A1").value = 18
End Function

Alors que qd je fais ça, ça marche :
Sub X()
Range("A1").value = 18
End Sub
On trouve bien la valeur 18 en cellule A1.

Pourquoi? y a-t-il moyen de contourner?
Voilà en fait ce que je veux :
Function TableMultiplicationNxN(ByVal rg as Range, ByVal N as Integer) as
string
for i = 1 to N
for j = 1 to N
rg(i, j) = i * j
Next
Next
TableMultiplicationNxN = "Table " & N & "x" & N & " créée avec
succès".
End Function
En gros, je passe un range en paramètre à une fonction, la fonction fait
des
calculs très compliqués et écrit les résultats dans le range. Puis en
valeur
unique de retour, un code ou un message signalant que tout s'est bien
passé.
Pourquoi je peux pas faire ça?

Merci d'avance.


Modeste
Le #4853291
Bonsour® TTT avec ferveur ;o))) vous nous disiez :

=> Et surtout j'ai déjà vu faire ça ! mais le code de la fameuse
fonction est caché dans une dll, je n'ai jamais su comment c'est
fait. Par contre, je suis SUR que c'est faisable pour l'avoir vu.


T'es TéTu !!!!
si les explications et la solution de JB ne te satisfont pas
alors retrouve la Dll et fait nous voir !!!
moi je suis comme St Thomas...
;o)))

@+
;o)))

TTT
Le #4852541
Bonsour® TTT avec ferveur ;o))) vous nous disiez :

=> Et surtout j'ai déjà vu faire ça ! mais le code de la fameuse
fonction est caché dans une dll, je n'ai jamais su comment c'est
fait. Par contre, je suis SUR que c'est faisable pour l'avoir vu.


T'es TéTu !!!!
si les explications et la solution de JB ne te satisfont pas
alors retrouve la Dll et fait nous voir !!!
moi je suis comme St Thomas...


Désolé de vous froisser mais la solution qui consiste à retourner un array à
la sortie d'une fonction ne me satisfait pas dans la mesure où je ne connais
pas à l'avance les dimensions du tableau de résultats.
Quant à la dll je ne peux vous la fournir car il possède un copyright dessus
(d'ailleurs pour le lancer il faut un serveur de licence, sinon il ne
fonctionnera pas).

En tous les cas merci bcp pour votre aide.


TTT
Le #4964651
Je pense que si je vous disais ce que je voudrais faire ce sera plus simple
:
Je cherche à écrire un DataGrid pour Excel (DataSet provenant d'un
webservice).
Ca existe?
Sinon, ben je veux bien l'écrire mais pour ça il faut que la fonction
appelante (depuis les feuilles) puis écrire dans des cellules !
Merci
Publicité
Poster une réponse
Anonyme