Mes fonctions renvoient 0 lors de la mise à jour
Bonjour,
J'ai un gros problème avec mon classeur excel et je ne trouve pas de solution sur internet, je viens donc à vous. Je m'explique:
J'ai un classeur où j'ai créé des fonctions qui utilisent des données présentes dans d'autres feuilles du classeur. Ces fonctions ont fonctionnées durant 2 mois mais maintenant alors que je n'ai rien modifié si je fais une mise à jour de la feuille ben mes fonctions revoient 0 ou #value. Voici un exemple de fonction que j'ai créé en VBA et qui ne fonctionne plus:
Function hr(i As Integer)
Dim j As Integer
j = (i + 1) + (i - 2) * 23
Dim k As Integer
k = j + 23
Dim x As Integer
For x = j To k
hr = hr + Sheets(5).Range("h" & x)
Next x
hr = hr / 24
End Function
Dernière précision: j'ai plusieurs classeurs qui utilisent les mêmes fonctions (je fais un copier-coller du code VBA) et sur 4 classeurs, deux fonctionnent et deux pas.
Merci d'avance pour l'aide que vous pourriez m'apporter.
J'ai voulu rajouter une formule à mon classeur:
Function p(t As Double)
p = 6.107799961 + t * (0.4436518521 + t * (0.01428945805 + t * (2.650648471 / 10000 + t * (3.031240396 / 1000000 + t * (2.034080948 / 100000000 + t * 6.136820929)))))
End Function
C'est une fonction simple et pourtant si je donne 1 en valeur de t, on me renvoie #value...
Voici les autres fonctions présentes dans le module:
Function pasjournalier(pfrigo As Double, parametrepas As Double)
pasjournalier = (pfrigo * 1000) / parametrepas
End Function
Function nombremachine(pourcent As Single, chargemin As Single, nombre As Integer)
chargemin = chargemin / 100
Dim test As Boolean
For i = 1 To nombre
If pourcent - chargemin < i * chargemin And test = False Then
nombremachine = i
test = True
End If
Next i
If nombremachine = 0 Then
nombremachine = nombre
End If
End Function
Function charge(pourcent As Single, nombre As Integer, nombremax As Integer)
charge = pourcent * 100 * nombremax / nombre
End Function
Function Pabilinéaire(temperature As Single, charge As Single, chargemin As Single)
Dim x As Boolean
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
x = False
For i = 1 To 110
j = i + 10
k = i - 1
l = j - 1
If i = 1 Then
k = 1
End If
If charge <= chargemin Then
charge = chargemin
End If
If Sheets(3).Range("A" & i) <= charge And Sheets(3).Range("A" & j) > charge And x = False Then
If Sheets(3).Range("B" & k) > temperature And Sheets(3).Range("B" & i) <= temperature Then
Pabilinéaire = Sheets(3).Range("c" & i) / ((Sheets(3).Range("B" & k) - Sheets(3).Range("B" & i)) * (Sheets(3).Range("A" & j) - Sheets(3).Range("A" & i))) * (Sheets(3).Range("B" & k) - temperature) * (Sheets(3).Range("A" & j) - charge) + Sheets(3).Range("c" & k) / ((Sheets(3).Range("B" & k) - Sheets(3).Range("B" & i)) * (Sheets(3).Range("A" & j) - Sheets(3).Range("A" & i))) * (temperature - Sheets(3).Range("B" & i)) * (Sheets(3).Range("A" & j) - charge) + Sheets(3).Range("c" & j) / ((Sheets(3).Range("B" & k) - Sheets(3).Range("B" & i)) * (Sheets(3).Range("A" & j) - Sheets(3).Range("A" & i))) * (Sheets(3).Range("B" & k) - temperature) * (charge - Sheets(3).Range("A" & i)) + Sheets(3).Range("c" & l) / ((Sheets(3).Range("B" & k) - Sheets(3).Range("B" & i)) * (Sheets(3).Range("A" & j) - Sheets(3).Range("A" & i))) * (temperature - Sheets(3).Range("B" & i)) * (charge - Sheets(3).Range("A" & i))
x = True
i = 110
End If
End If
Next i
End Function
Function ecwtdate(dates As Date)
Dim x As Boolean
x = False
If dates < CDate("01/04/2008") And x = False Or dates >= CDate("01/12/2008") And x = False Then
ecwtdate = 18
x = True
ElseIf dates > CDate("31/03/2008") And x = False And dates < CDate("01/06/2008") Or dates > CDate("31/08/2008") And x = False And dates < CDate("01/12/2008") Then
ecwtdate = 23
x = True
ElseIf dates > CDate("31/05/2008") And dates < CDate("01/09/2008") And x = False Then
ecwtdate = 27
x = True
End If
End Function
Function Paww(plage As Single, partload As Single, partmin As Single)
Dim x As Boolean
Dim i As Integer
Dim j As Integer
x = False
For i = 1 To 31
If partload < partmin Then
partload = partmin
End If
j = i + 3
If Sheets(2).Range("A" & i) <= partload And x = False And Sheets(2).Range("A" & j) > partload And Sheets(2).Range("B" & i) = plage Then
Paww = Sheets(2).Range("c" & i) + (partload - Sheets(2).Range("A" & i)) * (Sheets(2).Range("c" & j) - Sheets(2).Range("c" & i)) / (Sheets(2).Range("A" & j) - Sheets(2).Range("A" & i))
x = True
End If
Next i
End Function
Function hr(i As Integer)
Dim j As Integer
j = (i + 1) + (i - 2) * 23
Dim k As Integer
k = j + 23
Dim x As Integer
For x = j To k
hr = hr + Sheets(5).Range("h" & x)
Next x
hr = hr / 24
End Function
Je ne vois vraiment pas pourquoi cela ne fonctionne pas car dans d'autres classeurs ces formules fonctionnent.
Bonjour
Atouzazar
En début de fonction rajoutes (exemple)
Function pasjournalier(pfrigo As Double, parametrepas As Double)
Application.Volatile
pasjournalier = (pfrigo * 1000) / parametrepas
End FunctionVérifies aussi dans les options si tu n'as pas le calcul en mode manuel
Merci pour ta réponse.
Application.volatile fonctionne aussi en anglais?
A quoi sert cette ligne de code exactement?
Bonjour
Extrait de l'aide
Volatile, méthode
Cette méthode marque comme volatile une fonction personnalisée. Une fonction volatile doit être recalculée chaque fois qu'un calcul est effectué dans une cellule quelconque de la feuille de calcul. Une fonction non volatile n'est recalculée qu'en cas de changement des variables d'entrée. Cette méthode est sans effet si elle ne se trouve pas à l'intérieur d'une fonction définie par l'utilisateur utilisée pour calculer une cellule de feuille de calcul.
lezueh a écrit :Application.volatile fonctionne aussi en anglais?
Si maintenant il y des instructions différentes entre une version Anglaise et une version Française, je ne suis pas au courant
Au fait : Problème résolu ?
J'ai essayé d'ajouter application.Volatile mais cela ne fonctionne pas lorsque mon programme se met à jour, mes fonctions retournent 0 ou #value. Je vais essayer de vous envoyer ma feuille excell mais elle est assez lourde je devrai attendre ce soir pour le compresser.
Je n'arrive pas a joindre mon classeur il est trop gros et j'ai pas de logiciel de compression au boulot. J'ai fait un nouveau classeur depuis et le premier code que j'utilise ne fonctionne déja pas alors qu'il fonctionne dans un autre calsseur, à ne rine comprendre!
Voici le code qui ne fonctionne pas:
Function hr(i As Integer)
Dim j As Integer
j = (i + 1) + (i - 2) * 23
Dim k As Integer
k = j + 23
hr = 0
Dim x As Integer
For x = j To k
hr = hr + Sheets(5).Range("h" & x)
MsgBox (Sheets(5).Range("h" & x))
Next x
hr = hr / 24
End Function
j'ai ajouté la ligne msgbox afin de controler la valeur mais la fenetre qui apparait est vide. Pourtant la fonction me renvoie 0 alors que si je donne un i de telle manière que il n'y ait plus de valeur dans la feuille 5 mais du texte aloors j'obtiens #value. Je comprends pas pourquoi j'ai 0 en cas normal.
Je vien de tester quelque chose: quand je change sheets 5 en sheets 7 ca fonctionne...pour quelle raison?
Bonjour
Sans fichier dur dur de trouver une solution, des fois on y arrive, mais la je ne vois pas
lezueh a écrit :J'ai fait un nouveau classeur depuis
Joins celui-ci car tu as déjà un problème avec
lezueh a écrit :je vien de tester quelque chose: quand je change sheets 5 en sheets 7 ca fonctionne...pour quelle raison?
????
je sais pas envoyer le classeur d'ici.
Pour l histoire des feuilles 5 et 7 si je met mes données en feuille 5, cela ne fonctionne pas mais si je les mets en 7 et que je modifie le code,cela fonctionne. Etant donné que j'ai plusieurs classeurs ou j'ai à chaque fois créé un module contenant les mêmes fonctions avec les mêmes références de pages il y a peut etre confusion ? pourtant je n'ouvre pas spécialement les classeurs en même temps. N'existe-t-il pas un code permettant lorsque j'appelle la feuille 5 de spécifier que c'est la feuille 5 de ce classeur précisément??
merci pour thisworkbook je vais essayer.
Pour attacher un fichier merci mais ca je sais quand meme faire c'est juste que j'ai pas d'outil de compression sur mon pc de bureau je devrai donc envoyer ca de chez moi.
...Je viens d'essayer thisworkbook je pensais avoir trouvé la solution miracle mais...ca marche pas
voila j ai reussi a compresser mais il etait trop grand (plus de 900ko en rar) je l ai donc splitté en 4 parts
j avais oublié les autres parties
Personne peut m'aider?? mon code vba fonctionne quand je change le nom des pages (je modifie évidement le contenu des pages en fonction).
