Conflit entre 2 fonctions somme

Fermé
Mag86 - 29 janv. 2013 à 11:58
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 - 4 févr. 2013 à 00:26
Bonjour,

Jai créé 2 fonctions somme ci dessous chacune dans un module :

La 1ère fonction :

Private Function SommeX(PlageSomme As Range) As Variante
Application.Volatile
Dim Cellule As Range
Dim Somme As Double
For Each Cellule In PlageSomme
If Cellule.Interior.Pattern <> xlGray25 Then
Somme = Somme + Cellule
End If
Next
SommeX = Somme
End Function


La 2ème fonction :

Private Function SommeY(ValTxt, PlageSom As Range) As Variante
Application.Volatile
Dim Cel As Range
Dim Som As Double
For Each Cel In PlageSom
If Cel.Interior.Pattern <> xlGray25 And ActiveSheet.Cells(Cel.Row, 12) = ValTxt Then
Som = Som + Cel
End If
Next
SommeY = Som
End Function


Ces fonctions sont appelées chacune par une feuille différente (SommeX est utilisée dans Feuil1 et SommeY dans Feuil2).

Mon problème est : Si je mets à jour Feuil1 avec SommeX puis Feuil2 avec SommeY, si je réaffiche Feuil1 toutes les cellules contenant SommeX sont à zéro. Il faut que je double clic dans une cellule et fasse "entrer" pour qu'elles se mettent toutes à jour.

Mais si je fais l'inverse, c'est à dire je mets à jour Feuil2 avec SommeY puis Feuil1 avec SommeX pas de problème...

Merci pour votre aide
A voir également:

2 réponses

Re-bonjour à tous!
Apparemment je ne suis pas la seule à ne pas m'expliquer ce phénomène... ;)!
J'espère que tu trouveras ta réponse Mag86!
0
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 235
Modifié par eriiic le 4/02/2013 à 00:32
Bonjour,

comment peux-tu appeler une fonction personnalisée Private à partir d'une feuille ?
Si elle est Private elle ne peut être appelée que du module.

Tu as mis Application.Volatile, ta fonction est donc recalculée à chaque modification dans ton classeur.
Attention, ça peut devenir très lourd en ressources, parfois il vaut mieux ne pas le mettre et faire F9 sur la feuille quand on change les couleurs. Un changement de valeur dans PlageSom la ré-évaluera toujours.

Elle est donc recalculée sur une saisie en Feuil2.
Function SommeY()
....
... And ActiveSheet.Cells(Cel.Row, 12)

Avec ActiveSheet tu es sûre de regarder sur la feuille active : Feuil2 qui a sûrement d'autres valeurs que ValTxt en colonne K
Mettre Cells(Cel.Row, 12) n'est pas mieux puisque c'est par défaut la feuille active.

Il faut que tu utilises la colonne K de la feuille d'appel de la fonction, soit en la passant en paramètre, soit en la calculant en relatif par rapport à ta cellule d'appel.
Essaie avec :
Function SommeY(ValTxt, PlageSom As Range) As Double     
    Dim Cel As Range     
    Application.Volatile     
    For Each Cel In PlageSom     
        If Cel.Interior.Pattern <> xlGray25 And Cel.Offset(0, 12 - Cel.Column) = ValTxt Then  ' sh.Cells(Cel.Row, 12) = ValTxt Then     
            SommeY = SommeY + Cel     
        End If     
    Next     
End Function

Au passage déposer un classeur exemple pour tes questions...

eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0