Fonction somme si en fonction du nom d'onglet

Résolu
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022 - 22 janv. 2019 à 15:37
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 20 févr. 2019 à 17:53
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

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 21
23 janv. 2019 à 09:55
Bonjour,

1) Il ne faut pas utiliser Select dans une fonction !!!!
2) numcol n'est pas défini
1
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
19 févr. 2019 à 09:34
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?

--
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
19 févr. 2019 à 16:50
Autant pour moi, avec un algo un peu différent cela fonctionne très bien.
Merci infiniment pour ton aide

@ Bientôt
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 21
20 févr. 2019 à 17:53
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
0
Rejoignez-nous