Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Tu peux coller cette fonction personnalisée dans un module standard
Et dans une cellule, tu indiques la plage à additionner : =SumNoWhite(B1:B7)
Le problème avec l'intervention d'un format pour sommer, si tu modifies la
couleur d'une cellule, la fonction ne se mettre pas à jour automatiquement, tu
devras appuyer sur la touche F9 pour provoquer son calcul.
Function SumNoWhite(Rg As Range) As Double
Dim C As Range
For Each C In Rg
If C.Interior.Color = vbWhite Then
If IsNumeric(C) Then
SumNoWhite = SumNoWhite + C.Value
End If
End If
Next
End Function
MichD : Et avec l'ajout d'un Application.Volatile ?
VB:
Option Explicit
Function SumNoWhite(Rg As Range) As Double
Application.Volatile
Dim C As Range
For Each C In Rg
If C.Interior.Color = vbWhite Then
If IsNumeric(C) Then
SumNoWhite = SumNoWhite + C.Value
End If
End If
Next
End Function
Si tu veux, mais il n'en demeure pas moins que si une ou des cellules de la plage à sommer
change de couleur, la mise à jour ne sera pas automatique, mais avec Application.Volatile.
Cela étant dit, cela aide j'en conviens, mais la prudence reste de mise!
En fait tu as loupé un minuscule détail ou je me suis mal exprimé.
Mais la tu fais la somme des case jaune (+ d'autres conditions). Regarde j'ai mi ton exemple dans une piece jointe. En fait ce n'est pas ce qui est a sommer en jaune mais une colonne parallele
Question d'apporter quelques précisions sur la fonction,
A ) Si tu as plusieurs couleurs dans la plage que tu veux additionner, l'exemple
additionne toutes les cellules qui ne sont pas "blanches", en l'occurrence les "jaune"
puisque c'est la seule couleur. (autre que blanche) Dans le code, tu as cette ligne :
If C.Interior.Color <> vbWhite Then
B ) Si tu veux une couleur particulière parmi un groupe de couleurs, je te suggère
d'utiliser cette fonction :
La fonction SumNoWhite() a 2 arguments. Le premier Rg est la plage de cellules
dont tu veux vérifier la couleur, le deuxième paramètre "ColorCell" est une cellule
dont le fond de celle-ci affiche déjà la couleur désirée.
Exemple : Lorsque tu saisis la fonction dans une cellule : SumNoWhite(A1:A10;G25)
A1:A10 -> Plage dont tu veux vérifier la couleur
G25 -> Cellule dont la propriété "interior" affiche la couleur qui servira de comparaison
VB:
Function SumNoWhite(Rg As Range, ColorCell As Range) As Variant
Application.Volatile
Dim C As Range, T(), A As Integer
ReDim T(1 To Rg.Cells.Count)
For Each C In Rg
A = A + 1
If C.Interior.Color = ColorCell.Interior.Color Then
T(A) = True
Else
T(A) = False
End If
Next
SumNoWhite = Application.Transpose(T)
End Function
C ) Si tu utilises cette fonction comme paramètre à une fonction SommeProd(), cette dernière ne requiert pas
une validation matricielle. Sommeprod() est déjà une fonction matricielle.
MichD : J'apprécie beaucoup tes codes mais je trouve qu'il sont "imbuvables" tels que tu les présentes... Et en espérant que "ma remarque" sera bien prise...
Ton dernier code avec les balises proposées nativement et une non référencée :
Ton tien sans balise :
Function SumNoWhite(Rg As Range, ColorCell As Range) As Variant
Application.Volatile
Dim C As Range, T(), A As Integer
ReDim T(1 To Rg.Cells.Count)
For Each C In Rg
A = A + 1
If C.Interior.Color = ColorCell.Interior.Color Then
T(A) = True
Else
T(A) = False
End If
Next
SumNoWhite = Application.Transpose(T)
End Function
Avec balise Citation (Quote)
Function SumNoWhite(Rg As Range, ColorCell As Range) As Variant
Application.Volatile
Dim C As Range, T(), A As Integer
ReDim T(1 To Rg.Cells.Count)
For Each C In Rg
A = A + 1
If C.Interior.Color = ColorCell.Interior.Color Then
T(A) = True
Else
T(A) = False
End If
Next
SumNoWhite = Application.Transpose(T)
End Function
Function SumNoWhite(Rg As Range, ColorCell As Range) As Variant
Application.Volatile[/COLOR]
Dim C As Range, T(), A As Integer
ReDim T(1 To Rg.Cells.Count)
For Each C In Rg
A = A + 1[/COLOR]
If C.Interior.Color = ColorCell.Interior.Color Then
T(A) = True
Else
T(A) = False
End If
Next
SumNoWhite = Application.Transpose(T)
End Function
Avec balise HTML :
HTML:
Function SumNoWhite(Rg As Range, ColorCell As Range) As Variant
Application.Volatile
Dim C As Range, T(), A As Integer
ReDim T(1 To Rg.Cells.Count)
For Each C In Rg
A = A + 1
If C.Interior.Color = ColorCell.Interior.Color Then
T(A) = True
Else
T(A) = False
End If
Next
SumNoWhite = Application.Transpose(T)
End Function
Avec balise PHP
PHP:
Function SumNoWhite(Rg As Range, ColorCell As Range) As Variant
Application.Volatile
Dim C As Range, T(), A As Integer
ReDim T(1 To Rg.Cells.Count)
For Each C In Rg
A = A + 1
If C.Interior.Color = ColorCell.Interior.Color Then
T(A) = True
Else
T(A) = False
End If
Next
SumNoWhite = Application.Transpose(T)
End Function
Avec highlight=VBA et highlight plus les crochets qui vont bien :
VB:
Function SumNoWhite(Rg As Range, ColorCell As Range) As Variant
Application.Volatile
Dim C As Range, T(), A As Integer
ReDim T(1 To Rg.Cells.Count)
For Each C In Rg
A = A + 1
If C.Interior.Color = ColorCell.Interior.Color Then
T(A) = True
Else
T(A) = False
End If
Next
SumNoWhite = Application.Transpose(T)
End Function
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.