OVH Cloud OVH Cloud

SommeParCouleur()

2 réponses
Avatar
Eddy Maue
Salut vous tous,
Je suis un p'tit nouveau sur cette news et aussi un p'tit nouveau en
Vba sur exel

Dans la cellule D1 = SommeParCouleur("D3:D300",35)

Function SommeParCouleur(cRANGE As String, nColorValue As Long)
Dim A As Long, B As Integer, total As Double
Dim Rang, rg As RANGE
Set Rang = Worksheets("Feuil1").RANGE(cRANGE)

For Each rg In Rang
If rg.Interior.ColorIndex = nColorValue Then
total = total + rg.Value
End If
Next
SommeParCouleur = total
End Function


La fonction fonctionne bien sauf que
comment on fait pour que les valeurs s'actualisent automatiquement
lorsque je modifie une données dans la colonne

Comme exemple si j'ai la cellule a1 = à Somme(A2:A20) et que je modifie
une donnée entre les cellules a2:a20, ma cellule a1 s'actualise
automatiquement
mais ca ne se produit pas avec ma fonction

De plus je dois écrire -- > SommeParCouleur("D3:D300",35)
se qui fait que ci je déplace la cellue en draguant ou par un
copie/collé, D3:D300 dans la rangée F3:F300, ca ne se produit pas
cela est du à ma façon de programmer ma fonction

alors comment écrire SommeParCouleur(D3:D300,35) au lieu de
SommeParCouleur("D3:D300",35) pour que ca fonctionne avec ma macro ?

Eddy Maue a+

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net

2 réponses

Avatar
PMO
Bonjour,

Essayez la fonction modifiée suivante

'*********************
Function SommeParCouleur(Rang As Range, _
nColorValue As Long) As Double
Dim total As Double
Dim rg As Range
For Each rg In Rang
If rg.Interior.ColorIndex = nColorValue And _
IsNumeric(rg) Then
total = total + rg.Value
End If
Next
SommeParCouleur = total
End Function
'*********************

1) J'ai changé le 1er paramètre cRANGE As String par Rang As Range
Ainsi, lorsque vous tapez votre fonction au niveau du 1er
paramètre ne faites pas
=SommeParCouleur("D3:D300",35)
mais faites
=SommeParCouleur(D3:D300,35)

2) La condition IsNumeric(rg) évitera une erreur si la cellule
concernée contient du texte. Elle sera invalidée pour le calcul.

Cordialement.
--
PMO
Patrick Morange



Salut vous tous,
Je suis un p'tit nouveau sur cette news et aussi un p'tit nouveau en
Vba sur exel

Dans la cellule D1 = SommeParCouleur("D3:D300",35)

Function SommeParCouleur(cRANGE As String, nColorValue As Long)
Dim A As Long, B As Integer, total As Double
Dim Rang, rg As RANGE
Set Rang = Worksheets("Feuil1").RANGE(cRANGE)

For Each rg In Rang
If rg.Interior.ColorIndex = nColorValue Then
total = total + rg.Value
End If
Next
SommeParCouleur = total
End Function


La fonction fonctionne bien sauf que
comment on fait pour que les valeurs s'actualisent automatiquement
lorsque je modifie une données dans la colonne

Comme exemple si j'ai la cellule a1 = à Somme(A2:A20) et que je modifie
une donnée entre les cellules a2:a20, ma cellule a1 s'actualise
automatiquement
mais ca ne se produit pas avec ma fonction

De plus je dois écrire -- > SommeParCouleur("D3:D300",35)
se qui fait que ci je déplace la cellue en draguant ou par un
copie/collé, D3:D300 dans la rangée F3:F300, ca ne se produit pas
cela est du à ma façon de programmer ma fonction

alors comment écrire SommeParCouleur(D3:D300,35) au lieu de
SommeParCouleur("D3:D300",35) pour que ca fonctionne avec ma macro ?

Eddy Maue a+

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net




Avatar
papou
Bonjour
Sinon autre fonction trouvée sur ce forum :
Function AddParCouleurFond(Plage As Range, Couleur As Long) As Long
Application.Volatile
Dim LstPlg
LstPlg = Plage
For i = 1 To UBound(LstPlg, 1)
For y = 1 To UBound(LstPlg, 2)
If Plage(i, y).Interior.ColorIndex = Couleur Then _
CompterParCouleurFond = CompterParCouleurFond + Plage(i, y)
Next y
Next i
End Function

Cordialement
Pascal


"Eddy Maue" <eddymaue@@hotmail.com> a écrit dans le message de news:

Salut vous tous,
Je suis un p'tit nouveau sur cette news et aussi un p'tit nouveau en Vba
sur exel

Dans la cellule D1 = SommeParCouleur("D3:D300",35)

Function SommeParCouleur(cRANGE As String, nColorValue As Long)
Dim A As Long, B As Integer, total As Double
Dim Rang, rg As RANGE
Set Rang = Worksheets("Feuil1").RANGE(cRANGE)

For Each rg In Rang
If rg.Interior.ColorIndex = nColorValue Then
total = total + rg.Value
End If
Next
SommeParCouleur = total
End Function


La fonction fonctionne bien sauf que
comment on fait pour que les valeurs s'actualisent automatiquement
lorsque je modifie une données dans la colonne

Comme exemple si j'ai la cellule a1 = à Somme(A2:A20) et que je modifie
une donnée entre les cellules a2:a20, ma cellule a1 s'actualise
automatiquement
mais ca ne se produit pas avec ma fonction

De plus je dois écrire -- > SommeParCouleur("D3:D300",35)
se qui fait que ci je déplace la cellue en draguant ou par un copie/collé,
D3:D300 dans la rangée F3:F300, ca ne se produit pas
cela est du à ma façon de programmer ma fonction

alors comment écrire SommeParCouleur(D3:D300,35) au lieu de
SommeParCouleur("D3:D300",35) pour que ca fonctionne avec ma macro ?

Eddy Maue a+

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net