Conflit entre 2 fonctions somme
Mag86
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Jai créé 2 fonctions somme ci dessous chacune dans un module :
La 1ère fonction :
La 2ème fonction :
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
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:
- Conflit entre 2 fonctions somme
- Supercopier 2 - Télécharger - Gestion de fichiers
- Formule somme excel colonne - Guide
- Somme si couleur - Guide
- 2 ecran pc - Guide
- Somme en anglais excel - Guide
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!
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!
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 :
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.
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.