Créer une fonction Excel avec 'for'
Résolu
Hydre
-
lermite222 Messages postés 9042 Statut Contributeur -
lermite222 Messages postés 9042 Statut Contributeur -
Salut,
Je voudrais créer une fonction dans Excel 2003 (SP3) qui me permette de sommer des cellules d'une même couleur de fond.
J'ai déjà la fonctin qui teste la couleur d'une cellule :
=ColorCell(#cellule)
qui renvoie le numéro de la couleur de fond de la cellule.
Ce que je voudrais faire, c'est en fait une boucle qui teste ça pour un grand nombre de cellules.
Je m'explique : je voudrais une fonction qui s'utilise comme ça
SOMMECOULEUR( #plage_de_cellules_à_sommer ; #plage_de_cellules_à_tester ; #numéro_de_la_couleur )
C'est sûrement très facile, mais je ne connais absolument rien en VB, mon langage de "prédilection" étant le Java ^^
Je vous remercie d'avance pour votre aide !
Je voudrais créer une fonction dans Excel 2003 (SP3) qui me permette de sommer des cellules d'une même couleur de fond.
J'ai déjà la fonctin qui teste la couleur d'une cellule :
=ColorCell(#cellule)
qui renvoie le numéro de la couleur de fond de la cellule.
Ce que je voudrais faire, c'est en fait une boucle qui teste ça pour un grand nombre de cellules.
Je m'explique : je voudrais une fonction qui s'utilise comme ça
SOMMECOULEUR( #plage_de_cellules_à_sommer ; #plage_de_cellules_à_tester ; #numéro_de_la_couleur )
C'est sûrement très facile, mais je ne connais absolument rien en VB, mon langage de "prédilection" étant le Java ^^
Je vous remercie d'avance pour votre aide !
A voir également:
- Créer une fonction Excel avec 'for'
- Créer une liste déroulante excel - Guide
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Fonction si et excel - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
7 réponses
Function SOMMECOULEUR(PLtest As Range, PLcoul As Range) As Long
Dim cel As Range
Dim T As Double
On Error Resume Next
For Each cel In PLtest
If cel.Interior.ColorIndex = PLcoul.Interior.ColorIndex Then
T = T + cel.Offset(0, 2).Value
End If
Next cel
SOMMECOULEUR = T
End Function
Faut bien sur adapter Offset à ta configuration
l'exemple: plage de test = colonne B et plage des cellules à additionner en colonne D soit 2 colonne plus loin.
Tu dit
Bonjour,
La fonction à mettre dans un module général, par exemple Module1
Et dans Excel, dans la cellule où tu veux le résultat..
1ére plage la plage de teste 2ém plage une celule qui a la bonne couleur.
A+
Edit, j'ai ajouter détection d'erreur parce que quand c'est une formule ça plantait.
La fonction à mettre dans un module général, par exemple Module1
Function SOMMECOULEUR(PLtest As Range, PLcoul As Range) As Double
Dim cel As Range
Dim T As Double
On Error Resume Next
For Each cel In PLtest
If cel.Interior.ColorIndex = PLcoul.Interior.ColorIndex Then
T = T + cel.Value
End If
Next cel
SOMMECOULEUR = T
End Function
Et dans Excel, dans la cellule où tu veux le résultat..
=SOMMECOULEUR(A6:F21;C18)
1ére plage la plage de teste 2ém plage une celule qui a la bonne couleur.
A+
Edit, j'ai ajouter détection d'erreur parce que quand c'est une formule ça plantait.
La solution est bonne, mais ce n'est pas exactement ce que je voulais.
En fait je veux tester la couleur d'une cellule, par exemple A(i), et si cette couleur est la même que la cellule X (fixe), alors j'additionne la valeur de la cellule B(i), où i est le numéro de la ligne.
L'indice de ligne de la plage à tester et l'indice de ligne de la plage à sommer évoluent simultanément.
Vu la manière dont c'est écrit, je ne vois pas exactement ce qu'il faudrait changer...
En fait je veux tester la couleur d'une cellule, par exemple A(i), et si cette couleur est la même que la cellule X (fixe), alors j'additionne la valeur de la cellule B(i), où i est le numéro de la ligne.
L'indice de ligne de la plage à tester et l'indice de ligne de la plage à sommer évoluent simultanément.
Vu la manière dont c'est écrit, je ne vois pas exactement ce qu'il faudrait changer...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bien compris,
ta plage de test prend plus qu'une colonne ?
genre A1:A200 ou bien A1:C200
et est-ce que les cellules à aditionner sont toujours sur la même colonne ?
Tu dit
ta plage de test prend plus qu'une colonne ?
genre A1:A200 ou bien A1:C200
et est-ce que les cellules à aditionner sont toujours sur la même colonne ?
Tu dit
Ça marche parfaitement !
Juste une précision pour ceux qui voudraient utiliser ça : j'ai modifié la valeur de sortie de la fonction en Double car sinon elle arrondissait le résultat.
Merci encore lermite222 ! ;-)
Content d'avoir pu t'aider.
A+