Calculer le cumule ( en VBA)

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

  • ILINO SANS&AVEC SOLDE.xlsx
    11.7 KB · Affichages: 83

Legolas

XLDnaute Occasionnel
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+
 

Pièces jointes

  • ILINO_retour.xlsx
    10.6 KB · Affichages: 71

Ilino

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

Legolas

XLDnaute Occasionnel
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+
 

Legolas

XLDnaute Occasionnel
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

  • ILINO_retour.xlsm
    10.9 KB · Affichages: 70

job75

XLDnaute Barbatruc
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

  • ILINO SANS&AVEC SOLDE(1).xls
    48.5 KB · Affichages: 65
Dernière édition:

job75

XLDnaute Barbatruc
Re : Calculer le cumule ( en VBA)

Re,

Dans la mesure ou les valeurs données à J (1) M (0,5) AM (0,5) ne changent jamais, formule simplifiée en J2 :

Code:
=RECHVAL($B$2:$B2;$J$2:$K2;COLONNES($J2:J2))+($G2=J$1)/2^($H2<>"J")
Fichier (2).

A+
 

Pièces jointes

  • ILINO SANS&AVEC SOLDE(2).xls
    48 KB · Affichages: 65

Ilino

XLDnaute Barbatruc
Re : Calculer le cumule ( en VBA)

Bonsoir maitre:eek:, 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

  • CP ILINO FORUM 2013 04 07.xlsm
    209 KB · Affichages: 67

job75

XLDnaute Barbatruc
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 :rolleyes:

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

  • CP ILINO FORUM 2013 04 07(1).zip
    179.9 KB · Affichages: 85

job75

XLDnaute Barbatruc
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

  • CP ILINO FORUM 2013 04 07(2).zip
    164.1 KB · Affichages: 58
Dernière édition:

Discussions similaires

Réponses
18
Affichages
625

Statistiques des forums

Discussions
312 208
Messages
2 086 257
Membres
103 167
dernier inscrit
miriame