Re : Changement du format d'une cellule sur un event ne marche plus.
9 réponses
BeN
Voilà je reposte mon problème, en essayant de mieux l'expliquer:
Bonjour.
Sur une feuille excel, j'ai une fonction (placé dans un module
"module1") et une procedure sur un évenement "change" (qui se trouve
dans le module de la feuille "Feuil1"), elle sert à colorer les cellules
en fonction de leur contenu.
Voici la fonction et la procedure.
Public Function ble_dur(intervale As Range, culture As String) As Single
Dim total As Single
Dim Cellule As Range
total = 0
For Each Cellule In intervale
If Cellule = "Blé dur" Then
If ActiveSheet.Cells(Cellule.Row, Cellule.Column - 1) =
culture Then
total = total + ActiveSheet.Cells(Cellule.Row, 3)
End If
End If
Next Cellule
ble_dur = total
End Function
Private Sub Worksheet_Change(ByVal Target As Excel.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
Le problème que j'ai, et que si j'utilise ,dans une cellule, ma fonction
ble_dur avec en parametre une plage de cellule sur laquelle j'applique
ma coloration, et qu'ensuite je modifie une cellule dans cette plage de
cellule (la plage passé en parametre de ma fonction), la coloration ne
se fait pas.
Or si je modifie une cellule sur laquelle la coloration s'effectue, et
qui ne fait pas parti de la plage passer en paramétre de ma fonction, la
coloration marche.
Par exemple:
Ma coloration s'effectue sur les cellules E5 à J24 et E26 à J48.
Dans une cellule (disons B50), je tape '=ble_dur(F5:F24; "Blé dur")'
Dans B50, j'aurais le résultat de ma fonction.
Maintenant si je modifie la cellule F6 (qui est dans la plage passé en
paramétre, de la fonction en B50), ma coloration ne marche pas, pourtant
elle est bien dans la plage de cellules aux quelles j'attribue une couleur.
Et si je modifie la case G6 (qui est en dehors de la plage passé en
paramétre), la coloration marche.
J'ai tracé le code pas à pas, et dans les deux cas, excel passe dans ma
procédure de coloration, mais dans le premier cas, c'est comme si le
'.colorindex' était en lecture seule, je lui donne une valeur, mais il
ne la prend pas en compte.
Quelqu'un à une idée d'où peut venir le problème ?
Merci d'avance.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
BeN
J'ai mis plusieurs point d'arret, et en fait excel, dans le cas où ça ne marche pas fait:
Execution complete de la fonction ble_dur Execution complete de la procedure de coloration Execution complete de la fonction ble_dur
???
Avec pour les deux executions de fonctions les même paramétres.
J'ai l'impression, qui concidère ma procédure au millieu comme une fonction appelé depuis une cellule, et donc il m'interdit la modification des cellules.
J'ai mis plusieurs point d'arret, et en fait excel, dans le cas où ça ne
marche pas fait:
Execution complete de la fonction ble_dur
Execution complete de la procedure de coloration
Execution complete de la fonction ble_dur
???
Avec pour les deux executions de fonctions les même paramétres.
J'ai l'impression, qui concidère ma procédure au millieu comme une
fonction appelé depuis une cellule, et donc il m'interdit la
modification des cellules.
J'ai mis plusieurs point d'arret, et en fait excel, dans le cas où ça ne marche pas fait:
Execution complete de la fonction ble_dur Execution complete de la procedure de coloration Execution complete de la fonction ble_dur
???
Avec pour les deux executions de fonctions les même paramétres.
J'ai l'impression, qui concidère ma procédure au millieu comme une fonction appelé depuis une cellule, et donc il m'interdit la modification des cellules.
BeN
Bon je vous donne le fichier en question.
http://cjoint.com/?bvt0uGrAvr
Vous comprendrez peut être mieux ce que je veux dire.
J'ai mis plusieurs point d'arret, et en fait excel, dans le cas où ça ne marche pas fait:
Execution complete de la fonction ble_dur Execution complete de la procedure de coloration Execution complete de la fonction ble_dur
???
Avec pour les deux executions de fonctions les même paramétres.
J'ai l'impression, qui concidère ma procédure au millieu comme une fonction appelé depuis une cellule, et donc il m'interdit la modification des cellules.
Bon je vous donne le fichier en question.
http://cjoint.com/?bvt0uGrAvr
Vous comprendrez peut être mieux ce que je veux dire.
J'ai mis plusieurs point d'arret, et en fait excel, dans le cas où ça ne
marche pas fait:
Execution complete de la fonction ble_dur
Execution complete de la procedure de coloration
Execution complete de la fonction ble_dur
???
Avec pour les deux executions de fonctions les même paramétres.
J'ai l'impression, qui concidère ma procédure au millieu comme une
fonction appelé depuis une cellule, et donc il m'interdit la
modification des cellules.
Vous comprendrez peut être mieux ce que je veux dire.
J'ai mis plusieurs point d'arret, et en fait excel, dans le cas où ça ne marche pas fait:
Execution complete de la fonction ble_dur Execution complete de la procedure de coloration Execution complete de la fonction ble_dur
???
Avec pour les deux executions de fonctions les même paramétres.
J'ai l'impression, qui concidère ma procédure au millieu comme une fonction appelé depuis une cellule, et donc il m'interdit la modification des cellules.
Francois
Bon je vous donne le fichier en question.
http://cjoint.com/?bvt0uGrAvr
Vous comprendrez peut être mieux ce que je veux dire. (...)
Bonjour BeN,
Je viens de tester ton classeur exemple et je ne comprend pas où est ton problème : si je change la cellule F5 par exemple, la coloration s'applique bien or cette cellule fait bien partie de la plage paramètre de ta fonction pour les cellules E75:E79
Testé sur XL2000. Est-ce que j'ai mal compris ton problème ?
-- François L
Bon je vous donne le fichier en question.
http://cjoint.com/?bvt0uGrAvr
Vous comprendrez peut être mieux ce que je veux dire.
(...)
Bonjour BeN,
Je viens de tester ton classeur exemple et je ne comprend pas où est ton
problème : si je change la cellule F5 par exemple, la coloration
s'applique bien or cette cellule fait bien partie de la plage paramètre
de ta fonction pour les cellules E75:E79
Testé sur XL2000. Est-ce que j'ai mal compris ton problème ?
Vous comprendrez peut être mieux ce que je veux dire. (...)
Bonjour BeN,
Je viens de tester ton classeur exemple et je ne comprend pas où est ton problème : si je change la cellule F5 par exemple, la coloration s'applique bien or cette cellule fait bien partie de la plage paramètre de ta fonction pour les cellules E75:E79
Testé sur XL2000. Est-ce que j'ai mal compris ton problème ?
-- François L
BeN
Alors la je pige pas, chez moi si je modifie la case F5, la coloration ne marche pas, j'ai excel XP. Es ce que dans un endroit d'excel, il y a une sorte de liste de fonction à executer, ou un truc du genre ?
Bon je vous donne le fichier en question.
http://cjoint.com/?bvt0uGrAvr
Vous comprendrez peut être mieux ce que je veux dire. (...)
Bonjour BeN,
Je viens de tester ton classeur exemple et je ne comprend pas où est ton problème : si je change la cellule F5 par exemple, la coloration s'applique bien or cette cellule fait bien partie de la plage paramètre de ta fonction pour les cellules E75:E79
Testé sur XL2000. Est-ce que j'ai mal compris ton problème
Alors la je pige pas, chez moi si je modifie la case F5, la coloration
ne marche pas, j'ai excel XP.
Es ce que dans un endroit d'excel, il y a une sorte de liste de fonction
à executer, ou un truc du genre ?
Bon je vous donne le fichier en question.
http://cjoint.com/?bvt0uGrAvr
Vous comprendrez peut être mieux ce que je veux dire.
(...)
Bonjour BeN,
Je viens de tester ton classeur exemple et je ne comprend pas où est ton
problème : si je change la cellule F5 par exemple, la coloration
s'applique bien or cette cellule fait bien partie de la plage paramètre
de ta fonction pour les cellules E75:E79
Testé sur XL2000. Est-ce que j'ai mal compris ton problème
Alors la je pige pas, chez moi si je modifie la case F5, la coloration ne marche pas, j'ai excel XP. Es ce que dans un endroit d'excel, il y a une sorte de liste de fonction à executer, ou un truc du genre ?
Bon je vous donne le fichier en question.
http://cjoint.com/?bvt0uGrAvr
Vous comprendrez peut être mieux ce que je veux dire. (...)
Bonjour BeN,
Je viens de tester ton classeur exemple et je ne comprend pas où est ton problème : si je change la cellule F5 par exemple, la coloration s'applique bien or cette cellule fait bien partie de la plage paramètre de ta fonction pour les cellules E75:E79
Testé sur XL2000. Est-ce que j'ai mal compris ton problème
BeN
J'ai testé sur un installe propre sur un autre pc, avec un excel XP, c'est pareil. Un amis avec un excel 2003 c'est pareil. Tu es sûr que les couleurs changent ? Chaque valeur de la liste doit avoir une couleur différente.
J'ai testé sur un installe propre sur un autre pc, avec un excel XP,
c'est pareil. Un amis avec un excel 2003 c'est pareil.
Tu es sûr que les couleurs changent ? Chaque valeur de la liste doit
avoir une couleur différente.
J'ai testé sur un installe propre sur un autre pc, avec un excel XP, c'est pareil. Un amis avec un excel 2003 c'est pareil. Tu es sûr que les couleurs changent ? Chaque valeur de la liste doit avoir une couleur différente.
Francois
J'ai testé sur un installe propre sur un autre pc, avec un excel XP, c'est pareil. Un amis avec un excel 2003 c'est pareil. Tu es sûr que les couleurs changent ? Chaque valeur de la liste doit avoir une couleur différente.
Re,
Si je met "Prairie" en F5, la cellule F5 devient bien "vert pomme", c'est bien ce qui doit se produire non ?
-- François L
J'ai testé sur un installe propre sur un autre pc, avec un excel XP,
c'est pareil. Un amis avec un excel 2003 c'est pareil.
Tu es sûr que les couleurs changent ? Chaque valeur de la liste doit
avoir une couleur différente.
Re,
Si je met "Prairie" en F5, la cellule F5 devient bien "vert pomme",
c'est bien ce qui doit se produire non ?
J'ai testé sur un installe propre sur un autre pc, avec un excel XP, c'est pareil. Un amis avec un excel 2003 c'est pareil. Tu es sûr que les couleurs changent ? Chaque valeur de la liste doit avoir une couleur différente.
Re,
Si je met "Prairie" en F5, la cellule F5 devient bien "vert pomme", c'est bien ce qui doit se produire non ?
-- François L
BeN
Euh oui sauf que je l'ai testé sur deux 2 XP, un 2003 et un 97, et que ça ne marche pas. Donc j'ai fais autrement. Mais jaimerais bien savoir pourquoi ça fait ça. Es ce que c'est normal que si je met ma fonction ble_dur dans une cellule, il m'execute deux fois le code entier de la fonction ?
En le traçant il me fait: fonction ble_dur procedure de coloration fonction ble_dur
Euh oui sauf que je l'ai testé sur deux 2 XP, un 2003 et un 97, et que
ça ne marche pas. Donc j'ai fais autrement.
Mais jaimerais bien savoir pourquoi ça fait ça.
Es ce que c'est normal que si je met ma fonction ble_dur dans une
cellule, il m'execute deux fois le code entier de la fonction ?
En le traçant il me fait:
fonction ble_dur
procedure de coloration
fonction ble_dur
Euh oui sauf que je l'ai testé sur deux 2 XP, un 2003 et un 97, et que ça ne marche pas. Donc j'ai fais autrement. Mais jaimerais bien savoir pourquoi ça fait ça. Es ce que c'est normal que si je met ma fonction ble_dur dans une cellule, il m'execute deux fois le code entier de la fonction ?
En le traçant il me fait: fonction ble_dur procedure de coloration fonction ble_dur
Francois
Euh oui sauf que je l'ai testé sur deux 2 XP, un 2003 et un 97, et que ça ne marche pas. Donc j'ai fais autrement. Mais jaimerais bien savoir pourquoi ça fait ça. Es ce que c'est normal que si je met ma fonction ble_dur dans une cellule, il m'execute deux fois le code entier de la fonction ?
En le traçant il me fait: fonction ble_dur procedure de coloration fonction ble_dur
Re,
Je suis perplexe... mais mes connaissances en XL et VBA ne sont pas celles des gourous de ce forum.
Dans le classeur qui ne marche pas, est-ce que tu n'as pas d'autres procédures ou fonctions qui viendraient interférer avec les deux qui sont dans ton exemple ?
Une autre question, je n'ai pas bien compris comment devait fonctionner ta fonction ble_dur : pourquoi le For each... puisque la fonction s'applique à une cellule, pourquoi ce double If imbriqué ?
Une remarque aussi, globalement je pense qu'il vaut mieux éviter les If sans Else.
-- François L
Euh oui sauf que je l'ai testé sur deux 2 XP, un 2003 et un 97, et que
ça ne marche pas. Donc j'ai fais autrement.
Mais jaimerais bien savoir pourquoi ça fait ça.
Es ce que c'est normal que si je met ma fonction ble_dur dans une
cellule, il m'execute deux fois le code entier de la fonction ?
En le traçant il me fait:
fonction ble_dur
procedure de coloration
fonction ble_dur
Re,
Je suis perplexe... mais mes connaissances en XL et VBA ne sont pas
celles des gourous de ce forum.
Dans le classeur qui ne marche pas, est-ce que tu n'as pas d'autres
procédures ou fonctions qui viendraient interférer avec les deux qui
sont dans ton exemple ?
Une autre question, je n'ai pas bien compris comment devait fonctionner
ta fonction ble_dur : pourquoi le For each... puisque la fonction
s'applique à une cellule, pourquoi ce double If imbriqué ?
Une remarque aussi, globalement je pense qu'il vaut mieux éviter les If
sans Else.
Euh oui sauf que je l'ai testé sur deux 2 XP, un 2003 et un 97, et que ça ne marche pas. Donc j'ai fais autrement. Mais jaimerais bien savoir pourquoi ça fait ça. Es ce que c'est normal que si je met ma fonction ble_dur dans une cellule, il m'execute deux fois le code entier de la fonction ?
En le traçant il me fait: fonction ble_dur procedure de coloration fonction ble_dur
Re,
Je suis perplexe... mais mes connaissances en XL et VBA ne sont pas celles des gourous de ce forum.
Dans le classeur qui ne marche pas, est-ce que tu n'as pas d'autres procédures ou fonctions qui viendraient interférer avec les deux qui sont dans ton exemple ?
Une autre question, je n'ai pas bien compris comment devait fonctionner ta fonction ble_dur : pourquoi le For each... puisque la fonction s'applique à une cellule, pourquoi ce double If imbriqué ?
Une remarque aussi, globalement je pense qu'il vaut mieux éviter les If sans Else.
-- François L
BeN
Ben justement non, mon exemple, j'ai supprimer le nom des parcelles. Mais niveau VBA, c'est la même chose. D'ailleurs, si je teste le fichier exemple, j'ai la même chose.
Alors pour ma fonction, le for each, c'est pour optimiser (j'ai lu ça, je sais plus trop où). Au debut j'avais un For ... Next. Et j'ai deux IF, car je dois vérifier deux condition, j'aurais peut être pu en faire un seul, mais bon. Je ne pense pas que le problème vient de là. Pour les else, je ne vais quand même pas en mettre un, si j'ai rien à faire si ma condition n'est pas vérifiée, non ?
Merci quand même d'avoir répondu.
Re,
Je suis perplexe... mais mes connaissances en XL et VBA ne sont pas celles des gourous de ce forum.
Dans le classeur qui ne marche pas, est-ce que tu n'as pas d'autres procédures ou fonctions qui viendraient interférer avec les deux qui sont dans ton exemple ?
Une autre question, je n'ai pas bien compris comment devait fonctionner ta fonction ble_dur : pourquoi le For each... puisque la fonction s'applique à une cellule, pourquoi ce double If imbriqué ?
Une remarque aussi, globalement je pense qu'il vaut mieux éviter les If sans Else.
Ben justement non, mon exemple, j'ai supprimer le nom des parcelles.
Mais niveau VBA, c'est la même chose. D'ailleurs, si je teste le fichier
exemple, j'ai la même chose.
Alors pour ma fonction, le for each, c'est pour optimiser (j'ai lu ça,
je sais plus trop où). Au debut j'avais un For ... Next. Et j'ai deux
IF, car je dois vérifier deux condition, j'aurais peut être pu en faire
un seul, mais bon. Je ne pense pas que le problème vient de là.
Pour les else, je ne vais quand même pas en mettre un, si j'ai rien à
faire si ma condition n'est pas vérifiée, non ?
Merci quand même d'avoir répondu.
Re,
Je suis perplexe... mais mes connaissances en XL et VBA ne sont pas
celles des gourous de ce forum.
Dans le classeur qui ne marche pas, est-ce que tu n'as pas d'autres
procédures ou fonctions qui viendraient interférer avec les deux qui
sont dans ton exemple ?
Une autre question, je n'ai pas bien compris comment devait fonctionner
ta fonction ble_dur : pourquoi le For each... puisque la fonction
s'applique à une cellule, pourquoi ce double If imbriqué ?
Une remarque aussi, globalement je pense qu'il vaut mieux éviter les If
sans Else.
Ben justement non, mon exemple, j'ai supprimer le nom des parcelles. Mais niveau VBA, c'est la même chose. D'ailleurs, si je teste le fichier exemple, j'ai la même chose.
Alors pour ma fonction, le for each, c'est pour optimiser (j'ai lu ça, je sais plus trop où). Au debut j'avais un For ... Next. Et j'ai deux IF, car je dois vérifier deux condition, j'aurais peut être pu en faire un seul, mais bon. Je ne pense pas que le problème vient de là. Pour les else, je ne vais quand même pas en mettre un, si j'ai rien à faire si ma condition n'est pas vérifiée, non ?
Merci quand même d'avoir répondu.
Re,
Je suis perplexe... mais mes connaissances en XL et VBA ne sont pas celles des gourous de ce forum.
Dans le classeur qui ne marche pas, est-ce que tu n'as pas d'autres procédures ou fonctions qui viendraient interférer avec les deux qui sont dans ton exemple ?
Une autre question, je n'ai pas bien compris comment devait fonctionner ta fonction ble_dur : pourquoi le For each... puisque la fonction s'applique à une cellule, pourquoi ce double If imbriqué ?
Une remarque aussi, globalement je pense qu'il vaut mieux éviter les If sans Else.