XL 2010 Fonction VBA de somme qui ne refresh pas

  • Initiateur de la discussion Initiateur de la discussion F22Raptor
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

F22Raptor

XLDnaute Impliqué
Hello
Ci-joint, une tentative de codage d'une fonction perso :
J'ai un tableau avec des dates, et des montants pos ou nég pour chaque date.

Je veux une fonction VBA (pas de fonction matricielle, ou d'ajout de colonne dans le tableau) qui me donne pour une année donnée, la somme des montants de cette année.

Ca marche, mais lorsque j'ajoute un montant à la liste, ça ne rafraîchit pas.
Je pourrais ajouter un événement CHANGE à ma feuille qui force un Calculate quand on ajoute une entrée, mais peut-être que c'est juste une erreur dans le code de ma fonction.

Merci pour votre expertise ! 🙂
 

Pièces jointes

Bonjour.
Le fond du problème c'est que Excel ne peut pas deviner que les colonnes A:B sont des antécédents de la formule si elles ne sont pas transmises en paramètre à la fonction. Aussi ne voit-il aucune raison directe de la réévaluer si elles changent.
 
Dernière édition:
Hello
Ci-joint, une tentative de codage d'une fonction perso :
J'ai un tableau avec des dates, et des montants pos ou nég pour chaque date.

Je veux une fonction VBA (pas de fonction matricielle, ou d'ajout de colonne dans le tableau) qui me donne pour une année donnée, la somme des montants de cette année.

Ca marche, mais lorsque j'ajoute un montant à la liste, ça ne rafraîchit pas.
Je pourrais ajouter un événement CHANGE à ma feuille qui force un Calculate quand on ajoute une entrée, mais peut-être que c'est juste une erreur dans le code de ma fonction.

Merci pour votre expertise ! 🙂

Bonsoir,
Essaye avec l'instruction:
Application.Volatile
en début de fonction

Mais pourquoi ré-inventer la poudre ???
=SOMMEPROD((ANNEE(A2:A500)=E2)*B2:B500)
Le fait nativement
 
Mais supposons que ça n'a été fait qu’à titre d'exercice.
Je l'écrirais comme ça :
VB:
Option Explicit
Function SommeAnnee(ByVal Annee As Integer, ByVal RngDon As Range) As Currency
   Dim TDon(), L As Long
   TDon = Intersect(RngDon, RngDon.Worksheet.UsedRange).Value
   For L = 2 To UBound(TDon, 1)
      If Year(TDon(L, 1)) = Annee Then SommeAnnee = SommeAnnee + TDon(L, 2)
      Next L
End Function
En F2, à propager sur 4 lignes :
Code:
=SommeAnnee(E2;A:B)
 
Hello
Ci-joint, une tentative de codage d'une fonction perso :
J'ai un tableau avec des dates, et des montants pos ou nég pour chaque date.

Je veux une fonction VBA (pas de fonction matricielle, ou d'ajout de colonne dans le tableau) qui me donne pour une année donnée, la somme des montants de cette année.

Ca marche, mais lorsque j'ajoute un montant à la liste, ça ne rafraîchit pas.
Je pourrais ajouter un événement CHANGE à ma feuille qui force un Calculate quand on ajoute une entrée, mais peut-être que c'est juste une erreur dans le code de ma fonction.

Merci pour votre expertise ! 🙂
sans formule, sans macro
un simple actualiser le TCD
upload_2018-8-24_21-13-13.png
 
@Dran : je bosse sur ta fonction
Tu n'as pas défini le type de ta variable tableau TDon()
Instinctivement, je l'ai mise en Range, mais ça ne marche pas !
Quel serait son type (autre que Variant, bien sûr !) ? Pour moi c'est une zone, au même titre que RngDon


@jacky : j'ai testé Volatile. Ca fonctionne, mais ça fait horriblement ramer la saisie !
 
Non, ce n'est pas la même chose: RngDon est un objet Range. Et la propriété Value d'un objet Range représentant une plage de cellules est un Variant contenant un tableau VBA basé 1 d'éléments de type Variant. Il n'y a pas à en sortir, c'est comme ça. Si vous tenez à typer TDon ça doit forcément être TDon() As Variant.
 
Dernière édition:
Question complémentaire : d'un point de vue des perfos (imaginons sur un très grand tableau), qu'est ce qui sera le plus efficace ?
Une formule matricielle comme le SommeProd proposé plus haut (qui marche très bien ! 🙂 ), ou une fonction perso de ce type ?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour