OVH Cloud OVH Cloud

Fonction personnalisée

3 réponses
Avatar
Jero
Bonjour à tous,

J'ai écrit une fonction - classique - du genre
SommeSiCouleur(Plage,Couleur).
Function SommeSiCouleur(PlageEntree As Range, Couleur As Byte) As Double
Dim Cell As Range, TempSum As Double
TempSum = 0
On Error Resume Next
For Each Cell In PlageEntree.Cells
If Cell.Font.ColorIndex = Couleur Then TempSum = TempSum +
Cell.Value
Next Cell
On Error GoTo 0
Set Cell = Nothing
SommeSiCouleur = TempSum
End Function

ça fonctionne à ceci près que le re-calcul ne s'effectue pas à chaque
modification ; par exemple si la fonction appelée dans la feuille est
SommeSiCouleur("A1:B10",5) - 5=>bleu - et que je change la couleur de
certaines cellule de la plage, la somme n'est pas modifiée...
J'ai essayé en créant une macro complémentaire => même chose. J'ai ajouté
Calculate => même pb.

Une idée ?
D'avance merci,
Jero

3 réponses

Avatar
JB
Bonjour,

Il faut:
- ajouter Application.Volatile
et

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate ' ou Range("resultat").Calculate
End Sub

http://cjoint.com/?coikeLSVWo

Function SommeCouleurTexte(champ As Range, couleurTexte)
Application.Volatile
Dim c, temp
temp = 0
For Each c In champ
If c.Font.ColorIndex = couleurTexte Then
temp = temp + c.Value
End If
Next c
SommeCouleurTexte = temp
End Function

Cordialement JB
Avatar
Jero
Merci, c'est OK !
"JB" a écrit dans le message de news:

Bonjour,

Il faut:
- ajouter Application.Volatile
et

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate ' ou Range("resultat").Calculate
End Sub

http://cjoint.com/?coikeLSVWo

Function SommeCouleurTexte(champ As Range, couleurTexte)
Application.Volatile
Dim c, temp
temp = 0
For Each c In champ
If c.Font.ColorIndex = couleurTexte Then
temp = temp + c.Value
End If
Next c
SommeCouleurTexte = temp
End Function

Cordialement JB



Avatar
Jero
...et merci pour le classeur...
Jero
"JB" a écrit dans le message de news:

Bonjour,

Il faut:
- ajouter Application.Volatile
et

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate ' ou Range("resultat").Calculate
End Sub

http://cjoint.com/?coikeLSVWo

Function SommeCouleurTexte(champ As Range, couleurTexte)
Application.Volatile
Dim c, temp
temp = 0
For Each c In champ
If c.Font.ColorIndex = couleurTexte Then
temp = temp + c.Value
End If
Next c
SommeCouleurTexte = temp
End Function

Cordialement JB