OVH Cloud OVH Cloud

Fonction personnelle

6 réponses
Avatar
Patrick Bastard
Bonjour à tous.

Je désire créer une fonction personnalisée appelée"sommois"disponible sur
l' onglet "Total" d'un classeur.

Le but : insérer cette fonction comme n'importe laquelle des fonctions
natives pour effectuer la somme 3D sur la cellule sélectionnée (valeur par
défaut) ou définie par l'utilisateur (argument?) entre Feuil1 et Feuil12.

Première question : où écrire cette fonction? (module, feuille Total,
ThisWorkbook)?

Deuxième question : Quelle serait la syntaxe ?

J'ai fait un premier essai dans un module, après recherches sur Excelabo,
mais :
*Application.WorksheetFunction.sommois()=SUM(Feuil1:Feuil12!A1)*
me donne : Erreur de compilation, Attendu séparateur de liste

Merci d'avance pour votre coup de main (neurone) ;-)


--
Bien cordialement,
=====================================
P. Bastard.
Pour me contacter, remplacez "Chez" par @ dans l'adresse

Une foule de conseils utiles sur le site de Misange :
http://www.excelabo.net

6 réponses

Avatar
michdenis
Bonjour Patrick,


à copier dans un module standard
'------------------
Function sommois()

Application.Volatile

sommois = [Sum(Feuil1:Feuil12!A1)]

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

Et dans la cellule de ton choix , tu inscris : =sommois()

P.S. Attention, avec ce type de formule, il est sage que tu protège ton classeur pour empêcher que l'usager puisse
déplacer les feuilles car dans une formule 3D, la somme se fera sur toutes les feuilles entre la feuil1 et la feuil12
... d'où l'importance de ne pas déplacer les feuilles !


Salutations!



"Patrick Bastard" <bastardp"chez"free.fr> a écrit dans le message de news: %
Bonjour à tous.

Je désire créer une fonction personnalisée appelée"sommois"disponible sur
l' onglet "Total" d'un classeur.

Le but : insérer cette fonction comme n'importe laquelle des fonctions
natives pour effectuer la somme 3D sur la cellule sélectionnée (valeur par
défaut) ou définie par l'utilisateur (argument?) entre Feuil1 et Feuil12.

Première question : où écrire cette fonction? (module, feuille Total,
ThisWorkbook)?

Deuxième question : Quelle serait la syntaxe ?

J'ai fait un premier essai dans un module, après recherches sur Excelabo,
mais :
*Application.WorksheetFunction.sommois()=SUM(Feuil1:Feuil12!A1)*
me donne : Erreur de compilation, Attendu séparateur de liste

Merci d'avance pour votre coup de main (neurone) ;-)


--
Bien cordialement,
==================================== P. Bastard.
Pour me contacter, remplacez "Chez" par @ dans l'adresse

Une foule de conseils utiles sur le site de Misange :
http://www.excelabo.net
Avatar
Patrick Bastard
Bonsoir, *Denis*.

Ca faisait plus de deux heures que je recherchais la solution. :-(

J'avais essayé de copier la formule dans une macro intl MS Excel 4.0 pour
avoir la traduction, mais en vain.
Plein d'exemples sur le site de misange, mais que je n'ai pas pû adapter.

Je te remercie mille et une fois.

Bien cordialement,

Patrick.



Bonjour Patrick,


à copier dans un module standard
'------------------
Function sommois()

Application.Volatile

sommois = [Sum(Feuil1:Feuil12!A1)]

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

Et dans la cellule de ton choix , tu inscris : =sommois()

P.S. Attention, avec ce type de formule, il est sage que tu protège
ton classeur pour empêcher que l'usager puisse déplacer les feuilles
car dans une formule 3D, la somme se fera sur toutes les feuilles
entre la feuil1 et la feuil12 ... d'où l'importance de ne pas
déplacer les feuilles !


Salutations!


Avatar
Patrick Bastard
Bonjour à toi aussi, *michdenis*.
*Pour reprendre les termes de ton intervention* -voir en fin de message :

J'ai crié Victoire!!! trop vite :
Message d'erreur quand j'entre =sommois() ou = sommois(A1) :
Impossible de traiter...
"Cette fonction ne possède pas d'argument".
J'ai essayé Function sommois(range)
sans succès.

Des idées ?

Merci d'avance en tous cas.

Patrick.

Bonjour Patrick,


à copier dans un module standard
'------------------
Function sommois()

Application.Volatile

sommois = [Sum(Feuil1:Feuil12!A1)]

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

Et dans la cellule de ton choix , tu inscris : =sommois()

P.S. Attention, avec ce type de formule, il est sage que tu protège
ton classeur pour empêcher que l'usager puisse déplacer les feuilles
car dans une formule 3D, la somme se fera sur toutes les feuilles
entre la feuil1 et la feuil12 ... d'où l'importance de ne pas
déplacer les feuilles !


Salutations!


Avatar
michdenis
Bonjour Patrick,

Cette fonction roule correctement seulement si :

A ) Tu as copié la fonction personnalisée dans un module standard.

B ) Que dans ton application, tu as obligatoirement une feuille qui se nomme "Feuil1" et "Feuil12"

C ) que dans toutes les feuilles en cellule A1 , il n'ait pas de formule retournant une valeur d'erreur comme "#Na!"...

D ) Tu as écrit dans la cellule (évidemment autre que la cellule A1) devant recevoir le résultat la formule suivante : =
sommois()


C'était une version simple de la fonction que tu avais présentée... il est possible d'utiliser des paramètres à la
fonction pour que tu puisses définir le nom des feuilles et l'adresse de la cellule à sommer. Évidemment cela coûtera
plus cher ! ;-))


Salutations!



"Patrick Bastard" <bastardp"chez"free.fr> a écrit dans le message de news:
Bonjour à toi aussi, *michdenis*.
*Pour reprendre les termes de ton intervention* -voir en fin de message :

J'ai crié Victoire!!! trop vite :
Message d'erreur quand j'entre =sommois() ou = sommois(A1) :
Impossible de traiter...
"Cette fonction ne possède pas d'argument".
J'ai essayé Function sommois(range)
sans succès.

Des idées ?

Merci d'avance en tous cas.

Patrick.

Bonjour Patrick,


à copier dans un module standard
'------------------
Function sommois()

Application.Volatile

sommois = [Sum(Feuil1:Feuil12!A1)]

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

Et dans la cellule de ton choix , tu inscris : =sommois()

P.S. Attention, avec ce type de formule, il est sage que tu protège
ton classeur pour empêcher que l'usager puisse déplacer les feuilles
car dans une formule 3D, la somme se fera sur toutes les feuilles
entre la feuil1 et la feuil12 ... d'où l'importance de ne pas
déplacer les feuilles !


Salutations!


Avatar
michdenis
Bonjour Patrick,

Tu peux si tu le désires utiliser ceci :


'--------------------------
Function sommois(FirstSheet As String, _
LastSheet As String, Rg As Range)

sommois = Evaluate("sum(" & FirstSheet & ":" & _
LastSheet & "!" & Rg.Address(0, 0))

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

Et dans la formule que tu inscriras dans ta cellule :

=sommois("Feuil1";"Feuil3";A1:A4)
Feuil1 = la première feuille
Feuil3 = la dernière feuille
A1:A4= La plage à additionner sur chacune des feuilles.


Salutations!




"Patrick Bastard" <bastardp"chez"free.fr> a écrit dans le message de news:
Bonjour à toi aussi, *michdenis*.
*Pour reprendre les termes de ton intervention* -voir en fin de message :

J'ai crié Victoire!!! trop vite :
Message d'erreur quand j'entre =sommois() ou = sommois(A1) :
Impossible de traiter...
"Cette fonction ne possède pas d'argument".
J'ai essayé Function sommois(range)
sans succès.

Des idées ?

Merci d'avance en tous cas.

Patrick.

Bonjour Patrick,


à copier dans un module standard
'------------------
Function sommois()

Application.Volatile

sommois = [Sum(Feuil1:Feuil12!A1)]

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

Et dans la cellule de ton choix , tu inscris : =sommois()

P.S. Attention, avec ce type de formule, il est sage que tu protège
ton classeur pour empêcher que l'usager puisse déplacer les feuilles
car dans une formule 3D, la somme se fera sur toutes les feuilles
entre la feuil1 et la feuil12 ... d'où l'importance de ne pas
déplacer les feuilles !


Salutations!


Avatar
Patrick Bastard
Bonsoir, *Denis*.

Chacune de tes propositions fonctionne :
;-)

L'âne bâté que je suis avait confondu name avec (name)
:-(
Mais j'ai des excuses : je continue à débuter en VBA.

Encore merci,

Bien cordialement,

Patrick


Bonjour Patrick,

Tu peux si tu le désires utiliser ceci :


'--------------------------
Function sommois(FirstSheet As String, _
LastSheet As String, Rg As Range)

sommois = Evaluate("sum(" & FirstSheet & ":" & _
LastSheet & "!" & Rg.Address(0, 0))

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

Et dans la formule que tu inscriras dans ta cellule :

=sommois("Feuil1";"Feuil3";A1:A4)
Feuil1 = la première feuille
Feuil3 = la dernière feuille
A1:A4= La plage à additionner sur chacune des feuilles.


Salutations!




"Patrick Bastard" <bastardp"chez"free.fr> a écrit dans le message de
news: Bonjour à toi aussi,
*michdenis*. *Pour reprendre les termes de ton intervention* -voir en
fin de message :

J'ai crié Victoire!!! trop vite :
Message d'erreur quand j'entre =sommois() ou = sommois(A1) :
Impossible de traiter...
"Cette fonction ne possède pas d'argument".
J'ai essayé Function sommois(range)
sans succès.

Des idées ?

Merci d'avance en tous cas.

Patrick.

Bonjour Patrick,


à copier dans un module standard
'------------------
Function sommois()

Application.Volatile

sommois = [Sum(Feuil1:Feuil12!A1)]

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

Et dans la cellule de ton choix , tu inscris : =sommois()

P.S. Attention, avec ce type de formule, il est sage que tu protège
ton classeur pour empêcher que l'usager puisse déplacer les feuilles
car dans une formule 3D, la somme se fera sur toutes les feuilles
entre la feuil1 et la feuil12 ... d'où l'importance de ne pas
déplacer les feuilles !


Salutations!