Fonction personnalisée : un argument ne se charge pas en mémoire

XLTOF

XLDnaute Nouveau
Bonjour les experts,

J'ai besoin de vos lumière pour un problème dans une fonction personnalisée. L'objet du post résume assez bien mon soucis...

En gros, j'ai une fonction de type :

Function Mafonction(argument1 As String, argument2 As Double) As String

Cette fonction doit dans un premier temps concaténer Arg1 et Arg2; et rechercher ensuite cette nouvelle chaine de caractère dans un autre onglet.

Problème : la valeur de Arg2 ne semble pas vouloir "monter" en mémoire et lorsque je concatène Arg1 + Arg2 j’obtiens toujours Arg1...

Plus bizarre : Lorsque j'éxécute ma fonction en mode pas à pas, je vois bien que Arg2 reste vide, donc la concaténation ne se fait pas. Mais lorsque j'arrête la macro manuellement, elle veut repartir au départ, mais cette fois elle charge Arg2 en mémoire mais pas arg1...

J'avoue avoir du mal à m'y retrouver...

Merci d'avance pour vos lumières

Bonne soirée
 

Staple1600

XLDnaute Barbatruc
Re : Fonction personnalisée : un argument ne se charge pas en mémoire

Bonsoir à tous

Sans un exemple plus concret et/ou un fichier exemple
Code:
Function Mafonction(arg1$, arg2$) As String
Mafonction = arg1 & arg2
End Function
Code:
Sub test()
MsgBox Mafonction(Range("A1").Text, Range("A2").Text)
End Sub
La concaténation se fait bien dans ce petit exemple ;)

PS: même résultat sans la fonction cependant ;)
Code:
Sub testBis()
MsgBox Range("A1").Text & Range("A2").Text
End Sub
 

XLTOF

XLDnaute Nouveau
Re : Fonction personnalisée : un argument ne se charge pas en mémoire

Bonsoir Staple;

Voici le début code dans le détail. Je n'ai pas mis tout le code car c'est assez long et le problème se situe apparemment au début puisque l'argument 2 ne monte pas.

Encore merci !



Function Tend(clubo As String, lastjo As Double) As String
Dim myvar As String

myvar = clubo & CStr(lastjo)


For i = 2 To 420


Select Case Sheets("calendrier").Cells(i, 4).Value
Case myvar
Maligne = Rows(i) + 11
Exit For
End Select

Next

tendance = Maligne

End Function
 

XLTOF

XLDnaute Nouveau
Re : Fonction personnalisée : un argument ne se charge pas en mémoire

Re_bonsoir

Je viens me de rendre compte d'un détail qui vous sera probablement utile :

Dans mon fichier d'origine, Arg2 est fourni par une formule.
Si j'écrase la formule et j'écris le résultat en dur dans la cellule, oh miracle, ma fonction personnalisée monte bien Arg2 avec sa valeur correcte.

Mon problème devient donc : comment charger un argument issu d'une formule dans une fonction personnalisée...

On avance...

Merci à vous

Bonne soirée
 

Staple1600

XLDnaute Barbatruc
Re : Fonction personnalisée : un argument ne se charge pas en mémoire

Re


Tu peux joindre, stp, un fichier Excel exemple pour qu'on faire des tests grandeur nature ;)

NB
: Il y a petit souci de syntaxe dans ton exemple
Code VBA:
Function Tend(clubo As String, lastjo As Double) As String
Dim myvar As String, i%
myvar = clubo & CStr(lastjo)
For i = 2 To 420[/COLOR]
Select Case Sheets("calendrier").Cells(i, 4).Value
Case myvar
Maligne = Rows(i) + 11
Exit For
End Select
Next
'tendance = Maligne
Tend = Maligne
End Function
 
Dernière édition:

XLTOF

XLDnaute Nouveau
Re : Fonction personnalisée : un argument ne se charge pas en mémoire

Staple,

J'ai essayé de creuser un peu pour restreindre la portée du problème.
Comme indiqué dans mon précédent post la question n'est plus de charger un Argument en mémoire mais de charger le résultat d'une formule en mémoire.

Dans mon cas,on peut même restreindre le problème à la question suivante :
Comment faire rentrer dans une variable la valeur de la cellule DP3 de l'onglet "Recap par journée".

Cette valeur est issue de nombreuses formules qui font elles même référence à des cellules de l'onglet "calendrier".

En pièce jointe mon fichier

Merci encore

A+
 

Pièces jointes

  • Suivi_ligue1.xlsm
    124.6 KB · Affichages: 46

Paf

XLDnaute Barbatruc
Re : Fonction personnalisée : un argument ne se charge pas en mémoire

Bonjour XLTOF, bonjour Staple1600

a priori c'est au niveau de la boucle For i = 2 To 420 que se crée l'anomalie.

si j'ai bien compris cette boucle permet de déterminer la journée suivante.
Par exemple si DP3 contient 29, on cherche, dans la feuille calendrier, la ligne correspondant à Journée 29 puis on rajoute 11 ( ce qui nous porte à la ligne contenant Journée 30) et on met cette valeur dans la variable lignedep.

Si c'est bien ça , on peut éviter la boucle en faisant :
lignedep = (lastjo * 11) - 9

A+
 

XLTOF

XLDnaute Nouveau
Re : Fonction personnalisée : un argument ne se charge pas en mémoire

Salut les experts !


Effectivement Staple, c'est un fichier de suivi de match de foot mais c'est pas une raison pour botter en touche, parce que ça c'est du Rugby ;-) Je plaisante évidement et je te remercie pour ton aide. D'ailleurs je suis toujours stupéfait de la rapidité avec laquelle les réponses arrivent sur ce forum

Merci Paf pour ta réponse.
Tu as bien cerné le problème mais je pense qu'il ne se situe pas au niveau de la boucle mais carrément à l’amorçage de la fonction.
Si tu la lance en pas à pas tu verras que dès le début, l'argument Lasjo reste désespérément vide.

Ca fait comme si Excel n'avait pas recalculé la formule de la cellule où il doit piocher la valeur de cette variable au moment où il lance ma fonction personnalisée. Le problème ne se pose que dans le cas d'une fonction personnalisée car j'ai fait des tests avec une Sub normale et la valeur monte bien en mémoire.

En tout cas j'ai trouvé une solution de contournement qui m'a permis de terminer mon fichier (du même type que ce que tu proposes). Mais par pure curiosité personnelle j'aimerais bien comprendre ce qui empêche cette valeur de se charger...

Merci pour vos lumières

A+
 

Paf

XLDnaute Barbatruc
Re : Fonction personnalisée : un argument ne se charge pas en mémoire

re,

en isolant le code ligne à ligne il y a des soucis dès l'introduction de la boucle, qui disparaissent en adoptant la proposition du post #8, sans pouvoir déterminer la source exacte de l'anomalie.

Peut être que votre solution peut intéresser des forumeur ayant le même cas ?

Bonne suite

edit: je n'ai pas réaliser de test sans récupérer de valeur dans une autre feuille que la feuille où s'exécute la fonction. Peut-être une piste ?
 
Dernière édition:

XLTOF

XLDnaute Nouveau
Re : Fonction personnalisée : un argument ne se charge pas en mémoire

Bonsoir Paf

En fait, ma solution est une solution de contournement car je n'ai toujours pas de réponse à ma question :

Comment, dans une fonction perso, charger une variable (un argument) avec une valeur issue d'une formule de calcul ?

Dans mon cas j'ai supprimé cette variable. L'argument de ma fonction fait désormais appel a une cellule "en dur".
Donc je n'ai plus de problème... Juste de la curiosité insatisfaite ;-)

Bonne soirée
 

Habitude

XLDnaute Accro
Re : Fonction personnalisée : un argument ne se charge pas en mémoire

Bonjour

Ton problème se situe au niveau de la conversion du type de donnée. Qui au départ est de type Range.
Un range qui détient un type constant se converti bien.
Un range qui détient un type formule se converti mal.

Je te conseil de ne pas convertir les types et de rester en range.

Function tendancedom(clubo As Range, lastjo As Range) As String

Ainsi
lastjo.value va te donner la valeur
lastjo.formula va te ramener la formule


Regarde aussi du coté de la fonction
Application.Volatile
Très utile pour les fonctions personnalisées
 

XLTOF

XLDnaute Nouveau
Re : Fonction personnalisée : un argument ne se charge pas en mémoire

Hello Habitude;

Merci pour ta réponse,

j'ai testé le Range.formula
Ca fonctionne mais en fait ça sort la formule telle qu'elle est écrite sur la feuille (ou plutot traduite au format US) mais pas la valeur de cette formule de calcul.

Donc pas de nouveau avec cette piste.
J'avais essayé également l'astuce application.volatile mais sans succès non plus...

Bonne soirée

A+
 

XLTOF

XLDnaute Nouveau
Re : Fonction personnalisée : un argument ne se charge pas en mémoire

Hello !

Malheureusement, dans ce cas le ".value" ne remonte pas la valeur de la cellule mais 0.
C'est comme s'il ne recalculait pas la formule avant de lancer la fonction perso...
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 944
Membres
103 989
dernier inscrit
jralonso