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

Messages postés
116
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
26 mars 2019
- - Dernière réponse : Patrice33740
Messages postés
7719
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
19 avril 2019
- 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
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
7719
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
19 avril 2019
16
1
Merci
Bonjour,

1) Il ne faut pas utiliser Select dans une fonction !!!!
2) numcol n'est pas défini

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 115 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Patrice33740
Messages postés
116
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
26 mars 2019
0
Merci
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?

--
Lameche15
Messages postés
116
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
26 mars 2019
-
Autant pour moi, avec un algo un peu différent cela fonctionne très bien.
Merci infiniment pour ton aide

@ Bientôt
Patrice33740
Messages postés
7719
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
19 avril 2019
16 -
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
Commenter la réponse de Lameche15

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.