OVH Cloud OVH Cloud

Fonction SOMME perso

6 réponses
Avatar
Claude BRIGUET
Bonsoir à tous les couche-tard et bonjour à tous les lève-tôt,

Pour différentes raisons, j'ai créé une fonction qui fait une somme des x
premières valeurs de la colonne 1.

Function MaSomme(ByRef NombreLignesUtilisees As Double) As Double
MaSomme = Application.WorksheetFunction.Sum(Range(Cells(1, 1),
Cells(NombreLignesUtilisees, 1)))
End Function

Quand je change la valeur du paramètre "NombreLignesUtilisees", Excel
recalcule le résultat de la fonction. Tout OK.
Mais quand je change un des chiffres de la colonne, il ne recalcule pas.
Même un F9 ne change pas le résultat.

Est-ce que quelqu'un sait pourquoi et surtout comment faire ?

Un grand merci d'avance pour vos idées et solutions.

Bonne soirée.

Claude

6 réponses

Avatar
michdenis
Bonjour Claude,

Function MaSomme(PlageDeCellules as Range) As Double
MaSomme = Application..Sum(PlageDeCellules)
End Function

Et dans ta cellule tu entres le nom de ta fonction suivi de ta plage de cellules.

=MaSomme(A1:A10)

ou

=MaSomme(A1:A10;B5;C5:C10)


Salutations!




"Claude BRIGUET" a écrit dans le message de news:4077271c$
Bonsoir à tous les couche-tard et bonjour à tous les lève-tôt,

Pour différentes raisons, j'ai créé une fonction qui fait une somme des x
premières valeurs de la colonne 1.

Function MaSomme(ByRef NombreLignesUtilisees As Double) As Double
MaSomme = Application.WorksheetFunction.Sum(Range(Cells(1, 1),
Cells(NombreLignesUtilisees, 1)))
End Function

Quand je change la valeur du paramètre "NombreLignesUtilisees", Excel
recalcule le résultat de la fonction. Tout OK.
Mais quand je change un des chiffres de la colonne, il ne recalcule pas.
Même un F9 ne change pas le résultat.

Est-ce que quelqu'un sait pourquoi et surtout comment faire ?

Un grand merci d'avance pour vos idées et solutions.

Bonne soirée.

Claude
Avatar
Claude BRIGUET
Merci michdenis,

Ta fonction est OK, mais je ne connais pas la zone que je vais utiliser pour
calculer.
Elle est dépendante d'une autre formule.
C'est pour cette raison que j'ai le paramètre "NombreLignesUtilisees".

Dans ce cas, ça ne marche pas.

Une autre idée ?

Merci d'avance et bonne journée.

Claude




"michdenis" a écrit dans le message de
news:
Bonjour Claude,

Function MaSomme(PlageDeCellules as Range) As Double
MaSomme = Application..Sum(PlageDeCellules)
End Function

Et dans ta cellule tu entres le nom de ta fonction suivi de ta plage de
cellules.


=MaSomme(A1:A10)

ou

=MaSomme(A1:A10;B5;C5:C10)


Salutations!




"Claude BRIGUET" a écrit dans le message de
news:4077271c$

Bonsoir à tous les couche-tard et bonjour à tous les lève-tôt,

Pour différentes raisons, j'ai créé une fonction qui fait une somme des x
premières valeurs de la colonne 1.

Function MaSomme(ByRef NombreLignesUtilisees As Double) As Double
MaSomme = Application.WorksheetFunction.Sum(Range(Cells(1, 1),
Cells(NombreLignesUtilisees, 1)))
End Function

Quand je change la valeur du paramètre "NombreLignesUtilisees", Excel
recalcule le résultat de la fonction. Tout OK.
Mais quand je change un des chiffres de la colonne, il ne recalcule pas.
Même un F9 ne change pas le résultat.

Est-ce que quelqu'un sait pourquoi et surtout comment faire ?

Un grand merci d'avance pour vos idées et solutions.

Bonne soirée.

Claude





Avatar
michdenis
Bonjour Claude,

'--------------------
Function MaSomme(PlageDeCellules As Range, NbLignes As Long, NbColonnes As Integer) As Double
Application.Volatile
MaSomme = Application.Sum(PlageDeCellules.Resize(NbLignes, NbColonnes))
End Function
'--------------------

Et dans la celllule :

La valeur minimum de NbLignes et NbColonnes est 1


=MaSomme(A1;NbLignes,NbColonnes)

Pour addtionner la plage A1;B5

=MaSomme(A1;5;2)



Salutations!




"Claude BRIGUET" a écrit dans le message de news:40779b4a$
Merci michdenis,

Ta fonction est OK, mais je ne connais pas la zone que je vais utiliser pour
calculer.
Elle est dépendante d'une autre formule.
C'est pour cette raison que j'ai le paramètre "NombreLignesUtilisees".

Dans ce cas, ça ne marche pas.

Une autre idée ?

Merci d'avance et bonne journée.

Claude




"michdenis" a écrit dans le message de
news:
Bonjour Claude,

Function MaSomme(PlageDeCellules as Range) As Double
MaSomme = Application..Sum(PlageDeCellules)
End Function

Et dans ta cellule tu entres le nom de ta fonction suivi de ta plage de
cellules.


=MaSomme(A1:A10)

ou

=MaSomme(A1:A10;B5;C5:C10)


Salutations!




"Claude BRIGUET" a écrit dans le message de
news:4077271c$

Bonsoir à tous les couche-tard et bonjour à tous les lève-tôt,

Pour différentes raisons, j'ai créé une fonction qui fait une somme des x
premières valeurs de la colonne 1.

Function MaSomme(ByRef NombreLignesUtilisees As Double) As Double
MaSomme = Application.WorksheetFunction.Sum(Range(Cells(1, 1),
Cells(NombreLignesUtilisees, 1)))
End Function

Quand je change la valeur du paramètre "NombreLignesUtilisees", Excel
recalcule le résultat de la fonction. Tout OK.
Mais quand je change un des chiffres de la colonne, il ne recalcule pas.
Même un F9 ne change pas le résultat.

Est-ce que quelqu'un sait pourquoi et surtout comment faire ?

Un grand merci d'avance pour vos idées et solutions.

Bonne soirée.

Claude





Avatar
Claude BRIGUET
Re-bonjour,

C'est super génial, ça marche !

Il me manquais juste le "Application.Volatile".

Un super grand merci pour ton aide.
Je te souhaite de joyeuses fêtes de pâques (et à tous les autres aussi).

Claude


"michdenis" a écrit dans le message de
news:
Bonjour Claude,

'--------------------
Function MaSomme(PlageDeCellules As Range, NbLignes As Long, NbColonnes As
Integer) As Double

Application.Volatile
MaSomme = Application.Sum(PlageDeCellules.Resize(NbLignes,
NbColonnes))

End Function
'--------------------

Et dans la celllule :

La valeur minimum de NbLignes et NbColonnes est 1


=MaSomme(A1;NbLignes,NbColonnes)

Pour addtionner la plage A1;B5

=MaSomme(A1;5;2)



Salutations!




"Claude BRIGUET" a écrit dans le message de
news:40779b4a$

Merci michdenis,

Ta fonction est OK, mais je ne connais pas la zone que je vais utiliser
pour

calculer.
Elle est dépendante d'une autre formule.
C'est pour cette raison que j'ai le paramètre "NombreLignesUtilisees".

Dans ce cas, ça ne marche pas.

Une autre idée ?

Merci d'avance et bonne journée.

Claude




"michdenis" a écrit dans le message de
news:
Bonjour Claude,

Function MaSomme(PlageDeCellules as Range) As Double
MaSomme = Application..Sum(PlageDeCellules)
End Function

Et dans ta cellule tu entres le nom de ta fonction suivi de ta plage de
cellules.


=MaSomme(A1:A10)

ou

=MaSomme(A1:A10;B5;C5:C10)


Salutations!




"Claude BRIGUET" a écrit dans le message
de


news:4077271c$
Bonsoir à tous les couche-tard et bonjour à tous les lève-tôt,

Pour différentes raisons, j'ai créé une fonction qui fait une somme des
x


premières valeurs de la colonne 1.

Function MaSomme(ByRef NombreLignesUtilisees As Double) As Double
MaSomme = Application.WorksheetFunction.Sum(Range(Cells(1, 1),
Cells(NombreLignesUtilisees, 1)))
End Function

Quand je change la valeur du paramètre "NombreLignesUtilisees", Excel
recalcule le résultat de la fonction. Tout OK.
Mais quand je change un des chiffres de la colonne, il ne recalcule pas.
Même un F9 ne change pas le résultat.

Est-ce que quelqu'un sait pourquoi et surtout comment faire ?

Un grand merci d'avance pour vos idées et solutions.

Bonne soirée.

Claude










Avatar
Daniel.M
Salut Claude,

Même si tu as trouvé ton bonheur, permets moi d'émettre quelques réserves pour
l'utilisation de Application.Volatile.

Dans des modèles de chiffrier le moindrement complexe, ça ralentit le machine en
provoquant des recalculs automatiques.

Mon conseil (tu en fais ce que tu veux) est de conserver la première
implantation VBA de MaSomme() (sans le App.Volatile) définie par Denis et de
l'utiliser ainsi:

=masomme(DECALER(A1;;;5;2))

Ou même (beaucoup plus rapide), de te passer complètement d'une fonction VBA et
d'y aller directement:

=SOMME(DECALER(A1;;;5;2))

Salutations,

Daniel M.

"Claude BRIGUET" wrote in message
news:4077dc8a$
Re-bonjour,

C'est super génial, ça marche !

Il me manquais juste le "Application.Volatile".

Un super grand merci pour ton aide.
Je te souhaite de joyeuses fêtes de pâques (et à tous les autres aussi).

Claude


"michdenis" a écrit dans le message de
news:
Bonjour Claude,

'--------------------
Function MaSomme(PlageDeCellules As Range, NbLignes As Long, NbColonnes As
Integer) As Double

Application.Volatile
MaSomme = Application.Sum(PlageDeCellules.Resize(NbLignes,
NbColonnes))

End Function
'--------------------

Et dans la celllule :

La valeur minimum de NbLignes et NbColonnes est 1


=MaSomme(A1;NbLignes,NbColonnes)

Pour addtionner la plage A1;B5

=MaSomme(A1;5;2)



Salutations!




"Claude BRIGUET" a écrit dans le message de
news:40779b4a$

Merci michdenis,

Ta fonction est OK, mais je ne connais pas la zone que je vais utiliser
pour

calculer.
Elle est dépendante d'une autre formule.
C'est pour cette raison que j'ai le paramètre "NombreLignesUtilisees".

Dans ce cas, ça ne marche pas.

Une autre idée ?

Merci d'avance et bonne journée.

Claude




"michdenis" a écrit dans le message de
news:
Bonjour Claude,

Function MaSomme(PlageDeCellules as Range) As Double
MaSomme = Application..Sum(PlageDeCellules)
End Function

Et dans ta cellule tu entres le nom de ta fonction suivi de ta plage de
cellules.


=MaSomme(A1:A10)

ou

=MaSomme(A1:A10;B5;C5:C10)


Salutations!




"Claude BRIGUET" a écrit dans le message
de


news:4077271c$
Bonsoir à tous les couche-tard et bonjour à tous les lève-tôt,

Pour différentes raisons, j'ai créé une fonction qui fait une somme des
x


premières valeurs de la colonne 1.

Function MaSomme(ByRef NombreLignesUtilisees As Double) As Double
MaSomme = Application.WorksheetFunction.Sum(Range(Cells(1, 1),
Cells(NombreLignesUtilisees, 1)))
End Function

Quand je change la valeur du paramètre "NombreLignesUtilisees", Excel
recalcule le résultat de la fonction. Tout OK.
Mais quand je change un des chiffres de la colonne, il ne recalcule pas.
Même un F9 ne change pas le résultat.

Est-ce que quelqu'un sait pourquoi et surtout comment faire ?

Un grand merci d'avance pour vos idées et solutions.

Bonne soirée.

Claude














Avatar
Claude BRIGUET
Salut Daniel,

J'avais besoin de cette fonction pour pouvoir supprimer des lignes sans
affecter mes fonctions SOMME et SOUS.TOTAL.

Mais ta dernière solution est exactement ce que j'ai besoin.

J'ai voulu réinventer la roue mais je n'ai réussi qu'à la faire hexagonale.
C'est un défaut très personnel.

Merci pour tes conseils, c'est vraiment sympa de ta part.

Bonne journée.

Claude



"Daniel.M" a écrit dans le message de
news:%
Salut Claude,

Même si tu as trouvé ton bonheur, permets moi d'émettre quelques réserves
pour

l'utilisation de Application.Volatile.

Dans des modèles de chiffrier le moindrement complexe, ça ralentit le
machine en

provoquant des recalculs automatiques.

Mon conseil (tu en fais ce que tu veux) est de conserver la première
implantation VBA de MaSomme() (sans le App.Volatile) définie par Denis et
de

l'utiliser ainsi:

=masomme(DECALER(A1;;;5;2))

Ou même (beaucoup plus rapide), de te passer complètement d'une fonction
VBA et

d'y aller directement:

=SOMME(DECALER(A1;;;5;2))

Salutations,

Daniel M.

"Claude BRIGUET" wrote in message
news:4077dc8a$
Re-bonjour,

C'est super génial, ça marche !

Il me manquais juste le "Application.Volatile".

Un super grand merci pour ton aide.
Je te souhaite de joyeuses fêtes de pâques (et à tous les autres aussi).

Claude


"michdenis" a écrit dans le message de
news:
Bonjour Claude,

'--------------------
Function MaSomme(PlageDeCellules As Range, NbLignes As Long,
NbColonnes As



Integer) As Double
Application.Volatile
MaSomme = Application.Sum(PlageDeCellules.Resize(NbLignes,
NbColonnes))

End Function
'--------------------

Et dans la celllule :

La valeur minimum de NbLignes et NbColonnes est 1


=MaSomme(A1;NbLignes,NbColonnes)

Pour addtionner la plage A1;B5

=MaSomme(A1;5;2)



Salutations!




"Claude BRIGUET" a écrit dans le message
de



news:40779b4a$
Merci michdenis,

Ta fonction est OK, mais je ne connais pas la zone que je vais
utiliser



pour
calculer.
Elle est dépendante d'une autre formule.
C'est pour cette raison que j'ai le paramètre "NombreLignesUtilisees".

Dans ce cas, ça ne marche pas.

Une autre idée ?

Merci d'avance et bonne journée.

Claude




"michdenis" a écrit dans le message de
news:
Bonjour Claude,

Function MaSomme(PlageDeCellules as Range) As Double
MaSomme = Application..Sum(PlageDeCellules)
End Function

Et dans ta cellule tu entres le nom de ta fonction suivi de ta plage
de




cellules.

=MaSomme(A1:A10)

ou

=MaSomme(A1:A10;B5;C5:C10)


Salutations!




"Claude BRIGUET" a écrit dans le
message




de
news:4077271c$
Bonsoir à tous les couche-tard et bonjour à tous les lève-tôt,

Pour différentes raisons, j'ai créé une fonction qui fait une somme
des




x
premières valeurs de la colonne 1.

Function MaSomme(ByRef NombreLignesUtilisees As Double) As Double
MaSomme = Application.WorksheetFunction.Sum(Range(Cells(1, 1),
Cells(NombreLignesUtilisees, 1)))
End Function

Quand je change la valeur du paramètre "NombreLignesUtilisees",
Excel




recalcule le résultat de la fonction. Tout OK.
Mais quand je change un des chiffres de la colonne, il ne recalcule
pas.




Même un F9 ne change pas le résultat.

Est-ce que quelqu'un sait pourquoi et surtout comment faire ?

Un grand merci d'avance pour vos idées et solutions.

Bonne soirée.

Claude