Calculer le cumule ( en VBA)

  • Initiateur de la discussion Initiateur de la discussion Ilino
  • 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 !

Ilino

XLDnaute Barbatruc
Bonsoir Forum,
J’ai un tableau ( de n ligne)qui est alimenté par un USF, Mon soucis est :
Exemple je saisie le Nom A (dernière ligne dans ce cas) je souhaiterai avoir un cumule dans les colonnes J&K pour chaque cas ( Avec Solde et Sans Solde) ci-joint mon fichier avec exemple
Grazie
 

Pièces jointes

Re : Calculer le cumule ( en VBA)

Bonjour,

Est-il forcément nécessaire de passer par du VBA ?
Je te joins un exemple avec des formules.
J'utilise la fonction SOMMEPROD.

A+

Re
ça fonctionne parfaitement mais elle est tres lente pour un tableau de 2013 ligne et pour un USF pour cette raison j'ai souhaité une reponse en VBA.
Merci encore
NB: ou bien convertir cette dernière en VBA😕
 
Dernière édition:
Re : Calculer le cumule ( en VBA)

Re,

Pour 2000 lignes, elle ne devrait pas être très lente...
Comment as-tu adapté la formule à ton fichier global ?
Il ne faut surtout pas étendre les plages de données à la colonne totale.

Par VBA, je laisse des personnes plus compétentes prendre la main. ^^

A+
 
Re : Calculer le cumule ( en VBA)

Bonjour,

J'ai regardé quelques topics sur le forum et je te propose une autre solution.
Je ne suis pas sûr quelle réponde vraiment à ton besoin (avoir un cumul en VBA) mais elle aborde le problème sous un autre angle.

Dans les colonnes A:I => tu rentres tes données
Dans la plage L2:N21 => tout est automatique (cette plage peut être augmentée en "tirant" les formules)

Colonne L : une formule matricielle permet d'extraire une liste triée sans doublon de ta base de données
Colonne M et N : la formule sommeprod déjà présentée ci-dessus
Il y a beaucoup moins de calcul avec cette présentation, le problème de la lenteur ne devrait pas être présent...

Je te joins le fichier.

A+
 

Pièces jointes

Re : Calculer le cumule ( en VBA)

Bonjour Ilino, Legolas,

Le problème c'est que, [Edit] sur le fichier du post #1, le tableau des résultats J2:K11 ne paraît pas cohérent à partir de J7.

Mais, si j'ai bien compris, créez cette fonction Macro en Module1 :

Code:
Function RECHVAL#(plage1 As Range, plage2 As Range, col As Byte)
'plage1 => 1 colonne, plage2 => 2 colonnes
Dim r As Range, lig As Range
Set r = plage1(plage1.Count)
Set lig = plage1.Find(r, r, xlValues, xlWhole, , xlPrevious).EntireRow
If lig.Row < r.Row Then RECHVAL = Intersect(lig, plage2)(1, col)
End Function
Puis entrez cette formule en J2, à copier à droite et vers le bas :

Code:
=RECHVAL($B$2:$B2;$J$2:$K2;COLONNES($J2:J2))+($G2=J$1)*RECHERCHEV($H2;$L$2:$M$4;2;0)
Bien noter le petit tableau L2:M4.

Fichier joint.

A+
 

Pièces jointes

Dernière édition:
Re : Calculer le cumule ( en VBA)

Bonsoir maitre😱, bonsoir forum, bonsoir Legolas,
merci pour les réponses et les solutions qui sont formidable et exploitable
après avoir testé la proposition de JOb sur mon fichier ( ci joint) j 'ai constaté que la lenteur de son exécution a Réduit, mais reste tjr lent ???🙁 What should I do?
grazie
 

Pièces jointes

Re : Calculer le cumule ( en VBA)

Bonjour Ilino, le forum,

Pour tester les solutions qu'on te donne il faut être cohérent Ilino.

Le fichier du post #12 n'a rien à voir avec celui du post #1 🙄

Alors j'ai complété la feuille Liste pour pouvoir tester :

- en revalidant la cellule F2 => durée 70 secondes sur Win XP - Excel 2003

- en revalidant la cellule F2011 => durée 0,11 seconde.

Dans le 1er cas toutes les formules (4020) sont recalculées, et seulement 2 dans le 2ème cas.

Je ne vois pas ce que l'on peut faire pour améliorer cette situation.

S'il y a juste à entrer de nouvelles données à la fin, il n'y a pas de problème.

Fichier joint.

A+
 

Pièces jointes

Re : Calculer le cumule ( en VBA)

Re,

J'ai réussi à diviser la durée du calcul par 2 (35 secondes avec modif en ligne 2).

La fonction est modifiée :

Code:
Function RECHVAL(plage1 As Range, plage2 As Range)
'plage1 => 1 colonne, plage2 => 2 colonnes
Dim r As Range, lig As Range
Set r = plage1(plage1.Count)
Set lig = plage1.Find(r, r, xlValues, xlWhole, , xlPrevious).EntireRow
If lig.Row < r.Row Then RECHVAL = Intersect(lig, plage2) 'matrice 2 valeurs
End Function
Sélectionner la plage G2:H2 et valider matriciellement (Ctrl+Maj+Entrée) cette formule :

Code:
=RECHVAL($A$2:$A2;$G$2:$H2)+($E2=$G$1:$H$1)/2^($F2<>"J")
Puis tirer la plage G2:H2 vers le bas.

Le calcul est 2 fois plus rapide car la fonction est calculée une seule fois pour 2 cellules.

Fichier (2).

A+
 

Pièces jointes

Dernière édition:
- 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

Réponses
10
Affichages
350
Réponses
40
Affichages
1 K
Réponses
25
Affichages
618
Réponses
6
Affichages
537
Réponses
15
Affichages
415
  • Question Question
Microsoft 365 Traitement
Réponses
7
Affichages
131
Réponses
6
Affichages
159
Réponses
12
Affichages
181
Réponses
6
Affichages
213
Retour