Bonjour à tous.
Voilà j'ai un problème avec une fonction en vba, que j'utilise à partir
d'un cellule excel (en mettant dans la cellule =ma_fction(param1,...) ).
Bon la fonction marche, mais j'ai voulu la rendre "autorecalculante" :)
, donc j'ai vu que Application.Volatile faisait ça.
Donc maintenant si je modifie une cellule, la fonction est bien
réexécuter. C'est ce que je voulais, par contre le problème, c'est que
j'avais un morceau de code qui s'executer sur l'evenement "Change" de ma
Feuil1. Le code sert à faire une coloration du fond d'une cellule, en
fonction de son contenu.
J'ai mis un point d'arret, et la procedure est bien executer, mais les
modification que je fais sur les cellules ne sont pas pris en compte.
Comme si les cellules se verouller, quand je met ce
"Application.volatile", si je l'enléve, ma coloration remarche, mais je
dois valider la cellule qui contient ma fonction, pour qu'elle se mette
à jour.
Voici le code de ma procedure sur l'evenement "Change"
Private Sub Worksheet_Change(ByVal Target As Range)
If ((Target.Row >= 5 And Target.Row <= 24) Or (Target.Row >= 26 And
Target.Row <= 48)) And (Target.Column >= 5 And Target.Column <= 10) Then
Select Case Target
Case "Blé dur"
With Target.Interior
.ColorIndex = 10
.Pattern = xlSolid
End With
Case "Prairie"
With Target.Interior
.ColorIndex = 43
.Pattern = xlSolid
End With
Case "Courges"
With Target.Interior
.ColorIndex = 46
.Pattern = xlSolid
End With
Case "Gel"
With Target.Interior
.ColorIndex = 40
.Pattern = xlSolid
End With
Case "Melons"
With Target.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
Case "Luzerne"
With Target.Interior
.ColorIndex = 50
.Pattern = xlSolid
End With
Case "P de terre"
With Target.Interior
.ColorIndex = 53
.Pattern = xlSolid
End With
Case "Oliviers"
With Target.Interior
.ColorIndex = 12
.Pattern = xlSolid
End With
Case Else
With Target.Interior
.ColorIndex = 0
.Pattern = xlSolid
End With
End Select
End If
End Sub
Et le code de ma fonction
Public Function ble_dur(intervale As Range, champs As String) As Single
Application.Volatile
Dim total As Single
total = 0
For i = 1 To intervale.Rows.Count
If intervale.Cells(i, 1) = "Blé dur" Then
If ActiveSheet.Cells(intervale.Cells(i, 1).Row,
intervale.Cells(i, 1).Column - 1) = champs Then
total = total +
ActiveSheet.Cells(intervale.Cells(i, 1).Row, 3)
End If
End If
Next i
ble_dur = total
End Function
Sachant que la procedure se trouve sur Feuil1 et que la fonction est
dans un module (Module1), je ne sais pas si c'est comme ça qu'on fait :)
En traçant le code pas à pas, le ".ColorIndex" contient la valeur
"-4142", je crois que c'est comme si je n'avais pas de selection.
J'ai aussi essayer un truc du genre "Feuil1.Cells(Target.Row,
Target.Column).Interior" à la place de "Target.Interior" dans mes With.
Mais c'est pareil.
J'espère que vous m'avez compris :) Et merci d'avance pour la solution.
Je suis sur que ça doit être un truc tout bête, mais vu que je debute en
VBA, je n'ai pas trouvé.
Application.Calculate peut être lent si tu as des documents lourds ouve rts.
Recalcule simplement la feuille avec Me.Calculate.
Bonsour® BeN avec ferveur ;o))) vous nous disiez :
Bon la fonction marche, mais j'ai voulu la rendre "autorecalculante" :) , donc j'ai vu que Application.Volatile faisait ça.
Application.volatile n'intervient que sur un changement de valeur !!!! un changement de format, couleur, texte, bordures ne change pas la vale ur...
dans ta procédure de recoloration il faut terminer par : Application.calculate
-- Cordialement,
Michel Gaboly www.gaboly.com
Modeste
Bonsour® Michel Gaboly avec ferveur ;o))) vous nous disiez :
Application.Calculate peut être lent si tu as des documents lourds ouverts.
Tout à fait Michel !!! ;o))) c'était surtout pour appuyer sur les lacunes du dénombrement par les formats et l'impuissance de application.volatile dans ces contextes.
;-) pffft... on ne va pas relancer le débat !!!
-- ;o))) @+
Les news à la source !!! news://news.microsoft.com/microsoft.public.fr.excel et répondez OUI
n'oubliez pas les FAQ :http://www.excelabo.net http://dj.joss.free.fr/faq.htm http://www.faqoe.com http://faqword.free.fr
Bonsour® Michel Gaboly avec ferveur ;o))) vous nous disiez :
Application.Calculate peut être lent si tu as des documents lourds
ouverts.
Tout à fait Michel !!!
;o)))
c'était surtout pour appuyer sur les lacunes du dénombrement par les formats
et l'impuissance de application.volatile dans ces contextes.
;-)
pffft... on ne va pas relancer le débat !!!
--
;o)))
@+
Les news à la source !!!
news://news.microsoft.com/microsoft.public.fr.excel
et répondez OUI
n'oubliez pas les FAQ :http://www.excelabo.net
http://dj.joss.free.fr/faq.htm
http://www.faqoe.com http://faqword.free.fr
Bonsour® Michel Gaboly avec ferveur ;o))) vous nous disiez :
Application.Calculate peut être lent si tu as des documents lourds ouverts.
Tout à fait Michel !!! ;o))) c'était surtout pour appuyer sur les lacunes du dénombrement par les formats et l'impuissance de application.volatile dans ces contextes.
;-) pffft... on ne va pas relancer le débat !!!
-- ;o))) @+
Les news à la source !!! news://news.microsoft.com/microsoft.public.fr.excel et répondez OUI
n'oubliez pas les FAQ :http://www.excelabo.net http://dj.joss.free.fr/faq.htm http://www.faqoe.com http://faqword.free.fr
Michel Gaboly
J'ai rien dit, moi, ;-)))
Enfin, presque.
Bonsour® Michel Gaboly avec ferveur ;o))) vous nous disiez :
Application.Calculate peut être lent si tu as des documents lourds ouverts.
Tout à fait Michel !!! ;o))) c'était surtout pour appuyer sur les lacunes du dénombrement par le s formats et l'impuissance de application.volatile dans ces contextes.
;-) pffft... on ne va pas relancer le débat !!!
-- Cordialement,
Michel Gaboly www.gaboly.com
J'ai rien dit, moi, ;-)))
Enfin, presque.
Bonsour® Michel Gaboly avec ferveur ;o))) vous nous disiez :
Application.Calculate peut être lent si tu as des documents lourds
ouverts.
Tout à fait Michel !!!
;o)))
c'était surtout pour appuyer sur les lacunes du dénombrement par le s formats
et l'impuissance de application.volatile dans ces contextes.
Bonsour® Michel Gaboly avec ferveur ;o))) vous nous disiez :
Application.Calculate peut être lent si tu as des documents lourds ouverts.
Tout à fait Michel !!! ;o))) c'était surtout pour appuyer sur les lacunes du dénombrement par le s formats et l'impuissance de application.volatile dans ces contextes.
;-) pffft... on ne va pas relancer le débat !!!
-- Cordialement,
Michel Gaboly www.gaboly.com
BeN
Merci pour les réponses :) Donc si j'ai bien compris, j'enleve mon Application.Volatile dans ma fonction ble_dur, qui se trouve dans un module, et je rajoute un me.Calculate à la fin de ma procedure de coloration.
J'ai fait ça, mais ça ne marche pas. La procédure de coloration remarche, mais si je change une valeur dans la zone, où la procédure s'execute, la cellule qui contient ma fonction ne se met pas à jour.
J'ai dû mal comprendre un truc.
J'ai rien dit, moi, ;-)))
Enfin, presque.
Bonsour® Michel Gaboly avec ferveur ;o))) vous nous disiez :
Application.Calculate peut être lent si tu as des documents lourds ouverts.
Tout à fait Michel !!! ;o))) c'était surtout pour appuyer sur les lacunes du dénombrement par les formats et l'impuissance de application.volatile dans ces contextes.
;-) pffft... on ne va pas relancer le débat !!!
Merci pour les réponses :)
Donc si j'ai bien compris, j'enleve mon Application.Volatile dans ma
fonction ble_dur, qui se trouve dans un module, et je rajoute un
me.Calculate à la fin de ma procedure de coloration.
J'ai fait ça, mais ça ne marche pas. La procédure de coloration
remarche, mais si je change une valeur dans la zone, où la procédure
s'execute, la cellule qui contient ma fonction ne se met pas à jour.
J'ai dû mal comprendre un truc.
J'ai rien dit, moi, ;-)))
Enfin, presque.
Bonsour® Michel Gaboly avec ferveur ;o))) vous nous disiez :
Application.Calculate peut être lent si tu as des documents lourds
ouverts.
Tout à fait Michel !!!
;o)))
c'était surtout pour appuyer sur les lacunes du dénombrement par les
formats
et l'impuissance de application.volatile dans ces contextes.
Merci pour les réponses :) Donc si j'ai bien compris, j'enleve mon Application.Volatile dans ma fonction ble_dur, qui se trouve dans un module, et je rajoute un me.Calculate à la fin de ma procedure de coloration.
J'ai fait ça, mais ça ne marche pas. La procédure de coloration remarche, mais si je change une valeur dans la zone, où la procédure s'execute, la cellule qui contient ma fonction ne se met pas à jour.
J'ai dû mal comprendre un truc.
J'ai rien dit, moi, ;-)))
Enfin, presque.
Bonsour® Michel Gaboly avec ferveur ;o))) vous nous disiez :
Application.Calculate peut être lent si tu as des documents lourds ouverts.
Tout à fait Michel !!! ;o))) c'était surtout pour appuyer sur les lacunes du dénombrement par les formats et l'impuissance de application.volatile dans ces contextes.
;-) pffft... on ne va pas relancer le débat !!!
BeN
J'ai un peu chercher, et en fait, avec un Application.CalculateFull ça marche. Un me.Calculate ou un Application.calculate n'a pas l'air de suffir. Mais sinon, il n'y pas moyen de rendre cette fonction automatique, comme le sont les fonctions Excel. Par exemple si dans A1 à A10 j'ai des nombres, et que dans A11, je met =SOMME(A1:A10). Si je modifie les nombres dans A1 à A10, la somme va se recalculer. Je voudrais que cela soit pareil, mais sans dépendre de la procédure de coloration. C'est possible ??
Merci pour les réponses :) Donc si j'ai bien compris, j'enleve mon Application.Volatile dans ma fonction ble_dur, qui se trouve dans un module, et je rajoute un me.Calculate à la fin de ma procedure de coloration.
J'ai fait ça, mais ça ne marche pas. La procédure de coloration remarche, mais si je change une valeur dans la zone, où la procédure s'execute, la cellule qui contient ma fonction ne se met pas à jour.
J'ai dû mal comprendre un truc.
J'ai rien dit, moi, ;-)))
Enfin, presque.
J'ai un peu chercher, et en fait, avec un Application.CalculateFull ça
marche. Un me.Calculate ou un Application.calculate n'a pas l'air de suffir.
Mais sinon, il n'y pas moyen de rendre cette fonction automatique, comme
le sont les fonctions Excel.
Par exemple si dans A1 à A10 j'ai des nombres, et que dans A11, je met
=SOMME(A1:A10). Si je modifie les nombres dans A1 à A10, la somme va se
recalculer. Je voudrais que cela soit pareil, mais sans dépendre de la
procédure de coloration. C'est possible ??
Merci pour les réponses :)
Donc si j'ai bien compris, j'enleve mon Application.Volatile dans ma
fonction ble_dur, qui se trouve dans un module, et je rajoute un
me.Calculate à la fin de ma procedure de coloration.
J'ai fait ça, mais ça ne marche pas. La procédure de coloration
remarche, mais si je change une valeur dans la zone, où la procédure
s'execute, la cellule qui contient ma fonction ne se met pas à jour.
J'ai un peu chercher, et en fait, avec un Application.CalculateFull ça marche. Un me.Calculate ou un Application.calculate n'a pas l'air de suffir. Mais sinon, il n'y pas moyen de rendre cette fonction automatique, comme le sont les fonctions Excel. Par exemple si dans A1 à A10 j'ai des nombres, et que dans A11, je met =SOMME(A1:A10). Si je modifie les nombres dans A1 à A10, la somme va se recalculer. Je voudrais que cela soit pareil, mais sans dépendre de la procédure de coloration. C'est possible ??
Merci pour les réponses :) Donc si j'ai bien compris, j'enleve mon Application.Volatile dans ma fonction ble_dur, qui se trouve dans un module, et je rajoute un me.Calculate à la fin de ma procedure de coloration.
J'ai fait ça, mais ça ne marche pas. La procédure de coloration remarche, mais si je change une valeur dans la zone, où la procédure s'execute, la cellule qui contient ma fonction ne se met pas à jour.
J'ai dû mal comprendre un truc.
J'ai rien dit, moi, ;-)))
Enfin, presque.
BeN
Tiens c'est magique, je sais pas ce que j'ai fais, mais maintenant ça me fait comme si j'avais le application.volatile, sauf qu'il n'y est pas. Le seul moyen de refaire marcher la coloration, c'est de commenter la fonction. Ben biensur apres elle ne marche plus.
Bonsour® BeN avec ferveur ;o))) vous nous disiez :
Bon la fonction marche, mais j'ai voulu la rendre "autorecalculante" :) , donc j'ai vu que Application.Volatile faisait ça.
Application.volatile n'intervient que sur un changement de valeur !!!! un changement de format, couleur, texte, bordures ne change pas la valeur...
dans ta procédure de recoloration il faut terminer par : Application.calculate
Tiens c'est magique, je sais pas ce que j'ai fais, mais maintenant ça me
fait comme si j'avais le application.volatile, sauf qu'il n'y est pas.
Le seul moyen de refaire marcher la coloration, c'est de commenter la
fonction. Ben biensur apres elle ne marche plus.
Bonsour® BeN avec ferveur ;o))) vous nous disiez :
Bon la fonction marche, mais j'ai voulu la rendre "autorecalculante" :)
, donc j'ai vu que Application.Volatile faisait ça.
Application.volatile n'intervient que sur un changement de valeur !!!!
un changement de format, couleur, texte, bordures ne change pas la valeur...
dans ta procédure de recoloration
il faut terminer par : Application.calculate
Tiens c'est magique, je sais pas ce que j'ai fais, mais maintenant ça me fait comme si j'avais le application.volatile, sauf qu'il n'y est pas. Le seul moyen de refaire marcher la coloration, c'est de commenter la fonction. Ben biensur apres elle ne marche plus.
Bonsour® BeN avec ferveur ;o))) vous nous disiez :
Bon la fonction marche, mais j'ai voulu la rendre "autorecalculante" :) , donc j'ai vu que Application.Volatile faisait ça.
Application.volatile n'intervient que sur un changement de valeur !!!! un changement de format, couleur, texte, bordures ne change pas la valeur...
dans ta procédure de recoloration il faut terminer par : Application.calculate