Fonction somme si en fonction du nom d'onglet [Résolu]

Signaler
Messages postés
126
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2019
-
Messages postés
8210
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
21 octobre 2020
-
Bonjour,

Je butte depuis plusieurs jours sur une macro simple de calcul de somme si en fonction de la couleur de fond et du nom d'un onglet.

J'ai un onglet "Récapitulatif" ou je souhaite utiliser mes fonctions.
De la cellule B7 à la cellule AI7, figurent mes numéros de semaine.

De la cellule B22 à la cellule AI22, j'y appelle ma fonction:

B22=RecupNbHeuresInsertionArg(B$7) C22= RecupNbHeuresInsertionArg(C$7)....

Ma fonction qui pose problème est la suivante:

Function RecupNbHeuresInsertionArg(ByRef Cellule As Range) As Long
Dim numcol As Integer
Dim cell As Range
Application.Volatile True
numcol = Cellule.Value
Dim som As Long
som = 0


Sheets("Sem " & numcol).Range("B25:F44").Select

For Each cell In Selection

If cell.Interior.ColorIndex = 6 Then
som = som + cell.Value

End If

Next cell

RecupNbHeuresInsertionArg = som



End Function




Je souhaite que cette fonction calcule la somme par couleur (ColorIndex = 6 est jaune) de l'onglet sélectionné par la variable d'entrée de ma fonction (cellule) sur une plage précise (ici B25:F44) de cet onglet.


Peut-être quelque chose d'évident m'échappe? Cette fonction me retourne une erreur #Valeur
J'espère être clair, merci d'avance pour votre aide précieuse

Alain

2 réponses

Messages postés
8210
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
21 octobre 2020
19
Bonjour,

1) Il ne faut pas utiliser Select dans une fonction !!!!
2) numcol n'est pas défini
Messages postés
126
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2019

Merci pour ton aide, je ne vois pas bien comment je peux faire autrement qu'utiliser la méthode Select.
Peut-etre une idée?

--
Messages postés
126
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2019

Autant pour moi, avec un algo un peu différent cela fonctionne très bien.
Merci infiniment pour ton aide

@ Bientôt
Messages postés
8210
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
21 octobre 2020
19
Pour l'exemple :
Sub Test()
  MsgBox RecupNbHeuresInsertionArg(Worksheets("Sem 1").Range("B25:F44"))
End Sub

Function RecupNbHeuresInsertionArg(ByRef Plage As Range) As Long
Dim cel As Range
Dim som As Long
  Application.Volatile True
  For Each cel In Plage.Cells
    If cel.Interior.ColorIndex = 6 Then som = som + Val(cel.Value)
  Next cel
  RecupNbHeuresInsertionArg = som
End Function