Excel Downloads
Forum

Précédent   Excel Downloads Forums > Excel > Forum Excel

Advertisement

Réponse
 
LinkBack Outils de la discussion
Vieux 25/07/2005, 18h35   #1 (permalink)
XLDnaute Nouveau
 
Date d'inscription: juillet 2005
Messages: 2
Par défaut Pb de fonction avec ActiveCell

Bonjour,

J'ai créé la fonction suivante :

Function Calcul(Montant As Currency)
Calcul = Round(Montant * 0.15 * (ActiveCell.Offset(0, -1).Value - ActiveCell.Offset(-1, -1).Value) / 365, 2)
End Function

Il s'agit d'un calcul d'intérêts en fonction d'un montant et d'un nombre de jours calculés entre deux dates, qui se trouvent sur la cellule immédiatement à gauche et au-dessus. Le montant est une somme de valeurs extraite de la feuille.

Lorsque je valide la fonction, tout de passe parfaitement. Mais quand je modifie l'un des composants de la zone montant dans la feuille d'origine, le résultat se recalcule automatiquement de manière erronée. Je crois comprendre que, dans ce cas, l'ActiveCell n'est pas la cellule attendue (qui contient l'appel de la fonction), mais une cellule quelconque de la feuille.

Existe-t-il un moyen de résoudre ce problème ?

Je vous remercie par avance de votre aide.
frbcn9 est déconnecté   Réponse avec citation
ANNONCES
Vieux 25/07/2005, 19h36   #2 (permalink)
XLDnaute Accro
 
Date d'inscription: février 2005
Localisation: Arras
Messages: 1 425
Envoyer un message via MSN à dg62
Par défaut Re:Pb de fonction avec ActiveCell

Bonsoir Frbcn9



Function Calcul(Montant As Currency)
Calcul = Round(Montant * 0.15 * (range('a1').Offset(0, -1).Value - range('a1').Offset(-1, -1).Value) /
365, 2)
End Function




range('A1') est un exemple, il suffit de remplacer A1 par la cellule de référence.
__________________
@+

dg62 est déconnecté   Réponse avec citation
Vieux 25/07/2005, 19h50   #3 (permalink)
frbcn9
Guest
 
Messages: n/a
Par défaut Re:Pb de fonction avec ActiveCell

Bonsoir dg62,

Je te remercie pour ta réponse, mais malheureusement, elle ne convient pas à mon problème. En effet, dans ma feuille de calcul j'ai de très nombreux appels à cette fonction et donc mettre 'en dur' la cellule de départ du calcul dans la fonction est impossible.

J'ai pensé ajouter cette valeur en paramètre de la fonction, mais je me demandais s'il n'y avait pas une autre solution plus sophistiquée qui m'éviterait de changer toute ma feuille.

Ce devrait pouvoir être possible, car excel, pour évaluer la fonction est bien obligé à un moment donné de se déplacer sur la cellule en question.
  Réponse avec citation
Vieux 25/07/2005, 20h01   #4 (permalink)
Super Moderator
 
Avatar de PascalXLD
 
Date d'inscription: février 2005
Localisation: Rennes
Messages: 10 686
Par défaut Re:Pb de fonction avec ActiveCell

Bonjour

Peut-être en rentrant au moins une des cellules dans ta fonction


Function Calcul(Montant As Currency, Date1 As Range)
Calcul = Round(Montant * 0.15 * (Date1.Value - date1.Offset(0, -1).Value) /
365, 2)
End Function

Bon courage
__________________
Pascal(Visitez mon Blog Photo)

Vous pouvez devenir "Supporter XLD", plus de renseignements ICI
PascalXLD est déconnecté   Réponse avec citation
Vieux 25/07/2005, 20h04   #5 (permalink)
XLDnaute Occasionel
 
Date d'inscription: juin 2005
Messages: 113
Par défaut Re:Pb de fonction avec ActiveCell

Bonsoir à tous et au forum,

Si tu ajoutais deux arguments à ta fonction, il me semble qu'il n'y aurait plus de problème.
Je te propose :

Function Calcul(Montant As Range, DateDébut As Range, DateFin As Range)
Calcul = Round(Montant * 0.15 * (Fin.Value - Début.Value) / 365, 2)
End Function

Là où tu veux faire le calcul tu saisis la fonction =Calcul(C5;D5;D4) avec C5 la cellule contenant le montant,
D5 la cellule contenant la date la plus grande
et D4 la cellule contenant la date la plus petite

A+

Marco
marco57 est déconnecté   Réponse avec citation
Vieux 25/07/2005, 20h19   #6 (permalink)
frbcn9
Guest
 
Messages: n/a
Par défaut Re:Pb de fonction avec ActiveCell

Je vous remercie pour vos réponses. Je sens que je vais faire comme vous m'avez conseillé. Cela ne m'arrange pas vraiment, je dois avoir un bon millier de cellules à rectifier.

C'est vraiment stupide que l'on ne puisse pas déterminer dans une fonction qui l'a appelé (un bouton, une cellule, ....)

Merci quand même !!!
  Réponse avec citation
Vieux 25/07/2005, 20h22   #7 (permalink)
XLDnaute Accro
 
Date d'inscription: mars 2005
Messages: 1 286
Par défaut Re:Pb de fonction avec ActiveCell

Bonjour a tous

Je met mon grain de sel. Il te faux récuperer la cellule qui fait l'ojet du calcul.
Citation:
PublicFunction Calcul(Montant As Currency, Cellule As Range)
Calcul = Round(Montant * 0.15 * (Cellule.Offset(0, -1).Value - Cellule.Offset(-1, -1).Value) / 365, 2)
End Function
Hellboy est déconnecté   Réponse avec citation
Vieux 25/07/2005, 20h40   #8 (permalink)
XLDnaute Accro
 
Date d'inscription: mars 2005
Messages: 1 286
Par défaut Re:Pb de fonction avec ActiveCell

re a tous

Et bien si tu veux t'éviter de tout marquer è a la main, une boucle comme cell-ci pourrais te sortir du pétrain.

Tu n'as qu'a sélectionner la plage qui contient tes formule et exécuter cette macro. Étant donné que je ne connais pas comment exactement tu a écrit ta formule ds tes cellules, ceci est a titre d'exemple.

Citation:
PublicSub CoipeParesse()
For Each cell In Selection
   
With cell
    cell = Replace(.Formula, ')', ';' & Chr(.Column + 64) & .Row & ')')
   
End With
Next cell
End Sub
a+
Hellboy est déconnecté   Réponse avec citation
Vieux 26/07/2005, 08h09   #9 (permalink)
XLDnaute Impliqué
 
Avatar de Yeahou
 
Date d'inscription: mars 2005
Localisation: Sermaise
Messages: 873
Par défaut Re:Pb de fonction avec ActiveCell

Bonjour Frbcn9, Pascal, Dg62, Marco57, Hellboy, le forum

Eh ben si, on peut déterminer la cellule qui appelle la fonction!
Frbcn9, un application.thiscell te renverra ce que tu cherches c'est à dire la référence de la cellule appelant la fonction. Par contre n'oublie pas le application., car thiscell seul peut renvoyer une erreur.
Voici la traduction dans ton code, je ne sais pas s'il sera fonctionnel car il manque peut être une parenthèse pour que le calcul soit juste.

Cordialement, A+

Code:
Function Calcul(Montant As Currency)
MsgBox Application.ThisCell.Address
Calcul = Round(Montant * 0.15 * (Application.ThisCell.Offset(0, -1).Value - Application.ThisCell.Offset(-1, -1).Value) / 365, 2)
End Function
__________________

à la mi août, tous les chats sont roux...
Yeahou est déconnecté   Réponse avec citation
Vieux 26/07/2005, 08h23   #10 (permalink)
XLDnaute Impliqué
 
Avatar de Yeahou
 
Date d'inscription: mars 2005
Localisation: Sermaise
Messages: 873
Par défaut Re:Pb de fonction avec ActiveCell

Re bonjour

voila le même code avec un traitement différencié appel d'une cellule ou par programme (en cas d'appel par programme, thiscell renvoie une erreur et on utilise activecell). Il ne te reste plus qu'à adapter.
Cela devrait fonctionner.

A+

Code:
Function Calcul(Montant As Currency)
On Error GoTo Traite_Bouton
Calcul = Round(Montant * 0.15 * (Application.ThisCell.Offset(0, -1).Value - Application.ThisCell.Offset(-1, -1).Value) / 365, 2)
Exit Function
Traite_Bouton:
Calcul = Round(Montant * 0.15 * (ActiveCell.Offset(0, -1).Value - ActiveCell.Offset(-1, -1).Value) / 365, 2)
End Function
__________________

à la mi août, tous les chats sont roux...
Yeahou est déconnecté   Réponse avec citation
Vieux 26/07/2005, 11h27   #11 (permalink)
frbcn9
Guest
 
Messages: n/a
Par défaut Re:Pb de fonction avec ActiveCell

Bonjour à tous, et un grand merci pour votre aide !!!!

Surtout à toi Yeahou, ton bout de code fonctionne parfaitement, je viens de le tester.

Encore merci. A+
  Réponse avec citation
ANNONCES
Réponse

Liens sociaux

Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui



Fuseau horaire GMT +2. Il est actuellement 14h36.


(C) 2006 Excel Downloads