OVH Cloud OVH Cloud

Fonction perso et mauvais rafraichissement (autre feuille)

4 réponses
Avatar
Trirème
:-) Mesdames
:-) Messieurs

J'ai créé une fonction perso qui retourne la somme de plusieurs cellules
même si l'une d'elles contient une erreur. Elle retourne #VALEUR! si l'une
d'elle contient du texte.
C'est son fonctionnement normal et voici son code (source MPFE, adapté, merci)

Function SSE(Plage As Range) As Double
'Somme Sans tenir compte des Erreurs
Application.Volatile
x = 0
For Each c In Plage
If IsError(c) Then x = x + 0 Else x = x + c.Value
Next
SSE = x
End Function

Les cellules à sommer étant disjointes, j'ai créé un nom décrivant ces
cellules disjointes et c'est ce nom que je passe en référence. Exemple
SSE(Total_Valo_2005).
Avec, Total_Valo_2005 faisant référence à
=Formulaire!$G$8;Formulaire!$G$13;Formulaire!$G$15;Formulaire!$G$17;Formulaire!$G$19;Formulaire!$G$21;Formulaire!$G$23;Formulaire!$G$25;Formulaire!$G$27;Formulaire!$G$28;Formulaire!$G$29
(Notez que le nom de la feuille - Formulaire - est précisé explicitement)

Avec Excel 2002 je n'ai pas de problème de mise à jour. Cela fonctionne avec
ou sans l'option Application.Volatile. L'erreur que j'ai également.

Lorsque je bascule dans un autre onglet -Machin- de mon classeur, que j'y
saisi des données et que je retourne à mon onglet Formulaire, le résultat de
ma fonction perso SSE est abusivement modifié et correspond à la somme des
cellules décrites dans le nom 'Total_Valo_2005' mais pour la feuille Machin :
=Machin!$G$8;Machin!$G$13;Machin!$G$15;Machin!$G$17...

Pourquoi et surtout comment l'éviter s'il vous plaît ?

Je précise que je n'ai pas ce problème si le nom 'Total_Valo_2005' fait
référence à une plage de cellules contigües. Notez alors que dans ce cas je
n'aurai pas eu la nécessité de créer ce nom, mais je ne sais pas passer à ma
fonction SSE(Plage) des références disjointes.

Merci pour un coup de pouce
Cordialement
Trirème

4 réponses

Avatar
michdenis
Bonjour Trirène,

J'ai tenté de reproduire ta problématique sur excel 2003. Je n'y ai pas réussi ! Une vraie chance !!! ;-))


Salutations!



"Trirème" a écrit dans le message de news:
:-) Mesdames
:-) Messieurs

J'ai créé une fonction perso qui retourne la somme de plusieurs cellules
même si l'une d'elles contient une erreur. Elle retourne #VALEUR! si l'une
d'elle contient du texte.
C'est son fonctionnement normal et voici son code (source MPFE, adapté, merci)

Function SSE(Plage As Range) As Double
'Somme Sans tenir compte des Erreurs
Application.Volatile
x = 0
For Each c In Plage
If IsError(c) Then x = x + 0 Else x = x + c.Value
Next
SSE = x
End Function

Les cellules à sommer étant disjointes, j'ai créé un nom décrivant ces
cellules disjointes et c'est ce nom que je passe en référence. Exemple
SSE(Total_Valo_2005).
Avec, Total_Valo_2005 faisant référence à
=Formulaire!$G$8;Formulaire!$G$13;Formulaire!$G$15;Formulaire!$G$17;Formulaire!$G$19;Formulaire!$G$21;Formulaire!$G$23;Formulaire!$G$25;Formulaire!$G$27;Formulaire!$G$28;Formulaire!$G$29
(Notez que le nom de la feuille - Formulaire - est précisé explicitement)

Avec Excel 2002 je n'ai pas de problème de mise à jour. Cela fonctionne avec
ou sans l'option Application.Volatile. L'erreur que j'ai également.

Lorsque je bascule dans un autre onglet -Machin- de mon classeur, que j'y
saisi des données et que je retourne à mon onglet Formulaire, le résultat de
ma fonction perso SSE est abusivement modifié et correspond à la somme des
cellules décrites dans le nom 'Total_Valo_2005' mais pour la feuille Machin :
=Machin!$G$8;Machin!$G$13;Machin!$G$15;Machin!$G$17...

Pourquoi et surtout comment l'éviter s'il vous plaît ?

Je précise que je n'ai pas ce problème si le nom 'Total_Valo_2005' fait
référence à une plage de cellules contigües. Notez alors que dans ce cas je
n'aurai pas eu la nécessité de créer ce nom, mais je ne sais pas passer à ma
fonction SSE(Plage) des références disjointes.

Merci pour un coup de pouce
Cordialement
Trirème
Avatar
Jacky
Bonjour Trirème

et avec:

If IsNumeric(c) Then x = x + c.Value

Cela donne quoi ??

JJ

"Trirème" a écrit dans le message de
news:
:-) Mesdames
:-) Messieurs

J'ai créé une fonction perso qui retourne la somme de plusieurs cellules
même si l'une d'elles contient une erreur. Elle retourne #VALEUR! si l'une
d'elle contient du texte.
C'est son fonctionnement normal et voici son code (source MPFE, adapté,
merci)


Function SSE(Plage As Range) As Double
'Somme Sans tenir compte des Erreurs
Application.Volatile
x = 0
For Each c In Plage
If IsError(c) Then x = x + 0 Else x = x + c.Value
Next
SSE = x
End Function

Les cellules à sommer étant disjointes, j'ai créé un nom décrivant ces
cellules disjointes et c'est ce nom que je passe en référence. Exemple
SSE(Total_Valo_2005).
Avec, Total_Valo_2005 faisant référence à

=Formulaire!$G$8;Formulaire!$G$13;Formulaire!$G$15;Formulaire!$G$17;Formulai

re!$G$19;Formulaire!$G$21;Formulaire!$G$23;Formulaire!$G$25;Formulaire!$G$27
;Formulaire!$G$28;Formulaire!$G$29
(Notez que le nom de la feuille - Formulaire - est précisé explicitement)

Avec Excel 2002 je n'ai pas de problème de mise à jour. Cela fonctionne
avec

ou sans l'option Application.Volatile. L'erreur que j'ai également.

Lorsque je bascule dans un autre onglet -Machin- de mon classeur, que j'y
saisi des données et que je retourne à mon onglet Formulaire, le résultat
de

ma fonction perso SSE est abusivement modifié et correspond à la somme des
cellules décrites dans le nom 'Total_Valo_2005' mais pour la feuille
Machin :

=Machin!$G$8;Machin!$G$13;Machin!$G$15;Machin!$G$17...

Pourquoi et surtout comment l'éviter s'il vous plaît ?

Je précise que je n'ai pas ce problème si le nom 'Total_Valo_2005' fait
référence à une plage de cellules contigües. Notez alors que dans ce cas
je

n'aurai pas eu la nécessité de créer ce nom, mais je ne sais pas passer à
ma

fonction SSE(Plage) des références disjointes.

Merci pour un coup de pouce
Cordialement
Trirème



Avatar
Trirème

Bonjour Trirène,

J'ai tenté de reproduire ta problématique sur excel 2003. Je n'y ai pas réussi ! Une vraie chance !!! ;-))


Et quid d'Excel 2002 ?
Merci mais tu comprendras que ça ne me réjouis qu'à moitié.

J'en profite pour préciser que depuis tout à l'heure je m'en sors en
écrivant
=sse(E8)+sse(E13)+sse(E15)+sse(E17)+sse(E19)+sse(E21)+sse(E23)+sse(E25)+sse(E27)+sse(E28)+sse(E29)
C'est une alternative efficace mais pas très propre quand même.

Je suis malgré tout à l'écoute de toute proposition.
A plus
Trirème

Avatar
Trirème
Bonjour Trirème

et avec:

If IsNumeric(c) Then x = x + c.Value

Cela donne quoi ??


Idem.
Je viens de vérifier, j'ai également ça avec Excel 2000

Donc Pb avec Ex 2000, Ex 2002 et pas Ex 2003.
Merci de ton intérêt.

Trirème