Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Re : Changement du format d'une cellule sur un event ne marche plus.

9 réponses
Avatar
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.

9 réponses

Avatar
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.
Avatar
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.


Avatar
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

Avatar
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



Avatar
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.
Avatar
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

Avatar
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
Avatar
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

Avatar
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.