Fonction ramenant #valeur!

analyst

XLDnaute Nouveau
Bonjour,

J'ai developpé une fonction excel par vb et je reçois en retour le message #valeur!
Je me demande ce qu'il faut faire ou du moins si possible comment voir les bugs afin de les corriger.

Merci de votre aide

Analyst
 
G

Guest

Guest
Re : Fonction ramenant #valeur!

Bonjour et bienvenue sur le forum,

Mettre un point d'arrêt (F9) sur une ligne de code de la fonction puis faire en sorte qu'elle soit recalculée. Ta fonction s'arrêtra sur la ligne marquée et tu pourras voir les variables dans la fenêtre 'Variables locale' et/ou ajouter un espion dans la fenêtre espion et/ou faire des tests et autres debug.print dans la fenêtre exécution(CTRL+G)!

Si c'est du latin pour toi, donne nous un fichier exemple avec la fonction et les explications necessaire à une bonne compréhension du problème.

A+
 

analyst

XLDnaute Nouveau
Re : Fonction ramenant #valeur!

voici le fichier
je veux juste ramener une valeur avec les donnnées que j'ai sur année de signature et année projeté. la valeur doit dépendre du numero de ligne et du numero de colonne de la case de reception. la formule est ecrite sur la feuille 1
 

Pièces jointes

  • exercice fonctions.xlsm
    22.4 KB · Affichages: 34
  • exercice fonctions.xlsm
    22.4 KB · Affichages: 35
  • exercice fonctions.xlsm
    22.4 KB · Affichages: 37
G

Guest

Guest
Re : Fonction ramenant #valeur!

Bonjour,

Une fonction personnalisée ne peut pas agir sur des objets excel (feuilles, cellules etc) elle ne peut que faire des calculs et renvoyer une valeur.

Donc pas Sheets("feuille").activate et autres select.

Code:
Public Function correspondance(ligne, col As Integer)
    'declaration des variables
    Dim per_col, sign, proj As Integer
    'attributions des numeros de colonnes variables
    With Worksheets("Feuil3")
        per_col = .Cells(4, 5).Value
        sign = .Cells(5, 5)
        proj = .Cells(6, 5)
    End With
    With Worksheets("Feuil1")
        correspondance = (.Cells(ligne, proj) - .Cells(ligne, sign)) * .Cells(ligne, per_col)
    End With
End Function

Ecrite comme cela, elle renvoie un résultat (que je n'ai pas vérifié, n'ayant pas tout compris tes explications)
Mais pourquoi une fonction VBA alors qu'un rechercheV et ou Index couplé avec equiv semblerait suffire?

A+
 

analyst

XLDnaute Nouveau
Re : Fonction ramenant #valeur!

En fait le problème est pour un modèle financier que je veux developper dans le cadre d'une recherche. et la formule rempli plusieurs feuilles word.
je me disais que par fonction que je ne ferais qu'adapter à la ligne et à la colonne, le fichier serai moins lours et on aurait la possibilité d'expliquer la methodologie dans le developpeur.
qu'est-ce que tu pense de cette solution?
 
G

Guest

Guest
Re : Fonction ramenant #valeur!

Re,

N'ayant pas toutes les données du problème, je ne peux répondre à ta question. Par contre
je me disais que par fonction que je ne ferais qu'adapter à la ligne et à la colonne, le fichier serai moins lours

là aussi tout dépend de la "sexualité des huîtres dans le bassin d'Arcachon" :)

La priorité doit toujours être donnée à ce qu'excel fait sans problème. Une application VBA pouvant très vite devenir une usine à gaz ou un handicap, le jour où tu pars de l'entreprise, ou pour les utilisateurs qui n'y connaissent rien.

Dans ta fonction actuelle, tu as un paramètre 'col' inutilsé dans ton calcul.

A+
 

analyst

XLDnaute Nouveau
Re : Fonction ramenant #valeur!

Tu as parfaitement raison et je me disait qu'une bonne documentation du programme pourrait resoudre le problème. as tu déja rencontré ce genre de problème? connait tu une autre manière de les adresser?

Merci;
A+
 
G

Guest

Guest
Re : Fonction ramenant #valeur!

re,

Nous sommes sur un forum de partage, pas un forum professionnel et je ne traite pas de problème ne pouvant être publiquement exposé (Cas extrêment rare d'ailleurs).

A+
 

analyst

XLDnaute Nouveau
Re : Fonction ramenant #valeur!

bien raison!!!

les variables sur la feuille 3 sont des numeros de colonnes utilisées pour reconnaitre l'emplacement des paramètres utilisés dans le calcul. il ya un taux correspondant au taux et à l'année que je dois rechercher dans la feuille deux avec des boucles for et if et utiliser le pourcentage corresdpondant dans la dernière feuille.
il marche très bien pour l'instant mais je n'ai po encore pu inserer les for et if car je me demande si elles sont prises en compte par les fonctions.

Merci beaucoup car pour l'instant ça marche.
tu es un bon developpeur, très bon

Voici le fichier qui marche
 

Pièces jointes

  • exercice fonctions.xlsm
    24.7 KB · Affichages: 34
  • exercice fonctions.xlsm
    24.7 KB · Affichages: 39
  • exercice fonctions.xlsm
    24.7 KB · Affichages: 36
G

Guest

Guest
Re : Fonction ramenant #valeur!

Re,

Je ne dois pas être si bon que ça car je ne comprends toujours pas!

Déjà en G16 de Feuil1: la fonction
=(G$15-$D16)*$E16
fait tout aussi bien que ta fonction personalisée VBA!
Ensuite les taux de ta feuille 2 ne correspondent pas aux taux que tu as mis en feuil1 dans les cellules de la colonne Percentage(numéro d'ordre de ligne? pourcentage*10?).
Enfin je ne comprends pas du tout l'utilité de tes variables de feuil3.

P.S. ce que tu as en tête, m'échappe complètement!

A+
 
Dernière modification par un modérateur:

analyst

XLDnaute Nouveau
Re : Fonction ramenant #valeur!

l'exemple de la feuille est la formule la plus simple de toutes les formules que je veux programmer. sinon d'autres formules font plus de deux pages words. et ca alourdi le vrai fichier que je ne peux jamais joindre tellement heavy. voila pkw je demandais ton mail. mais resoudre cette formule me permettra de resoudre les plus lourds
 
G

Guest

Guest
Re : Fonction ramenant #valeur!

Re,

Pour répondre à la question
je n'ai po encore pu inserer les for et if car je me demande si elles sont prises en compte par les fonctions.

Comme je te le disais plus haut tu peux tout faire dans une fonction personnelle VBA SAUF agir (modifier l'état ou la sélection) sur des cellules, feuilles. Donc tu peux mettre autant de boucle for ou de if que tu veux dans ces conditions.

Et si tu utilises des structures With...End With n'oublies pas le point '.' devant les Range et autres Cell (.Range, .Cell)

Il me semble qu'il ait fort à parier que tu te compliques la vie pour rien.
Mais comme tu sembles ne pas vouloir donner toutes les données du problème, je m'arrête là et passe la main à qui voudra.

A+
 

Discussions similaires

Réponses
13
Affichages
306

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83