Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Impossible d'écrire dans une cellule depuis une fonction

6 réponses
Avatar
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.

6 réponses

Avatar
Jacky
Bonsoir,
'---------
Function x()
x = 18
End Function
'-----------
Dans une cellule
=X()

--
Salutations
JJ


"TTT" a écrit dans le message de news:
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.



Avatar
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" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">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" wrote:
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.


Avatar
TTT
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" a écrit dans le message de news:

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" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">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" wrote:
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.


Avatar
Modeste
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)))

Avatar
TTT
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.


Avatar
TTT
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