Fonction VBA qui ne renvoie pas la bonne valeur

Bonjour,

j'ai un vrai soucis avec l'utilisation des fonctions dans mon code VBA : Dans le code du Userform "Menu_ajout_op" du fichier ci-joint, j'utilise la fonction "Lsem" qui permet de renvoyer le numéro de la ligne à laquelle figure la semaine rentrée par l'utilisateur. Cela fonctionne au sein du code mais lorsque je veux utiliser une seconde fois cette fonction, le retour de la fonction est le même que lors de la première utilisation, et ce malgré une valeur de la variable d'entrée différente. Je ne comprends vraiment pas pourquoi. Je ne sais pas si j'ai été suffisamment clair mais mon problème est compliqué à formuler sans voir le code. Merci d'avance à ceux qui essaieront de m'aider.

Bonjour,

Au passage, l'utilisation abusif de '.Select' ralentit fortement l'exécution !

( j'avais pensé à une solution mais qui n'est pas efficace, d'ou l'édition de mon message )

J'avais déjà essayé de passer la fonction en public mais cela n'a pas résolu le problème. La fonction fonctionne une fois mais pas lorsque je souhaite l'utiliser une seconde fois dans le même code : la variable reste la même que celle de la première utilisation et le résultat est attendu n'est donc pas le bon.

Cells(4, 19) = Lsem(21)

Je fais test ci-dessus à la fin du code et il me renvoie le résultat de ceci (qui est la première utilisation de la fonction) :

i = Lsem(TextBox3.Value)

Concernant, les .selectje ne savais pas, mais par quoi peut on les remplacer du coup ? Bien que ce ne soit pas le sujet ici.

Je viens de tester, j'ai bien des valeurs différentes Curieux !

Tu appelle Lrem depuis où ?

Pour les .Select, c'est le générateur de macro qui te ponds ça, en réalité tu n'as quasiment jamais besoin de 'sélectionner' une case, ce qui compte c'est ce qu'elle contient ou sa position, non ?

La fonction Lsem est définie tout en bas de la page (Je ne sais pas si cela pose un problème mais je ne pense pas).

D'accord je vois, j'essaierai d'optimiser un peu en enlevant des .Select plus tard

Oui oui j'ai vu, non pas de souci, mais ton 2ème appel de Lrem, tu le fais depuis la même page ?

Pour le Select, au lieu de ça:

    Range("A2").Select
    ActiveCell.FormulaR1C1 = "Semaine 1"

Plutôt directement:

    Range("A2").Value = "Semaine 1"

Bonjour le fil

@PeaWix une fonction ne doit pas être mise dans un UserForm mais dans un module

image

A+

@BrunoM45 Merci beaucoup ça fonctionne enfin !

@Stryk Merci également pour cette astuce, cela va me permettre de simplifier beaucoup de choses

Rechercher des sujets similaires à "fonction vba qui renvoie pas bonne valeur"