Sommeprod dynamique

Le
ysalut
Bonjour,

J'utilise SOMMEPROD pour faire des calculs mutlicritéres qui
fonctionne bien, mais je voudrais ne pas avoir a prolonger ma matrice
à chaque fois que je sors des dimensions de la matrices déclaré.
Auriez vous une solution pour éviter ce réajustement manuel dés que j=
e
dépasse les 500 lignes ? Aussi pour des rapidités de calcul, je n'opte
pas pour étendre la formule jusqu'à 65000 lignes.

Exemple :
=SOMMEPROD((B4=SORTIE!$K$2:$K$500)*SORTIE!$D$2:$D$500)

Mais cela ne parche pas :
=SOMMEPROD(B4=SORTIE!$K$2:$K$&NBVAL(SORTIE!K:K))*SORTIE!$D$2:$D
$&NBVAL(SORTIE!D:D))

Merci d'avance
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #21428211
Bonjour,

Une façon de faire :

Mettre cette procédure dans le module feuille "Sortie"
À chaque fois que tu vas saisir une nouvelle ligne de données
les 2 noms "toto" et "titi" vont se mettre à jour.

Dans ta formule, tu remplaces les plages de cellules par toto et titi
Évidemment, tu peux donner des noms plus explicites à tes plages nommées.
Exemple :
=SOMMEPROD((B4=toto)*titi)

'-----------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim DerLig As Long
If Not Intersect(Union(Range("D:D"), Range("K:K")), Target) Is Nothing Then
DerLig = Range("D:D,K:K").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

Range("D2:D" & DerLig).Name = "toto"
Range("K2:K" & DerLig).Name = "titi"
End If
End Sub
'-----------------------------------

Une autre façon est d'utiliser la fonction "Decaler" pour définir
tes 2 plages nommées et encore une fois, utiliser ces "noms"
dans tes formules.



"ysalut"
Bonjour,

J'utilise SOMMEPROD pour faire des calculs mutlicritéres qui
fonctionne bien, mais je voudrais ne pas avoir a prolonger ma matrice
à chaque fois que je sors des dimensions de la matrices déclaré.
Auriez vous une solution pour éviter ce réajustement manuel dés que je
dépasse les 500 lignes ? Aussi pour des rapidités de calcul, je n'opte
pas pour étendre la formule jusqu'à 65000 lignes.

Exemple :
=SOMMEPROD((B4=SORTIE!$K$2:$K$500)*SORTIE!$D$2:$D$500)

Mais cela ne parche pas :
=SOMMEPROD(B4=SORTIE!$K$2:$K$&NBVAL(SORTIE!K:K))*SORTIE!$D$2:$D
$&NBVAL(SORTIE!D:D))

Merci d'avance
Patrick
Le #21428311
Bonjour,

Voici quelques solutions :
- Soit tu utilises des noms de plage de cellules (à mon avis c'est le plus
efficace masi il faut que tu mettes à jour la référence des noms).
- Soit tu utilises la fonction INDIRECT
=SOMMEPROD(B4=INDIRECT("SORTIE!$K$2:$K$"&NBVAL(SORTIE!K:K))*INDIRECT("SORTIE!$D$2:$D
$"&NBVAL(SORTIE!D:D)))



Cordialement.

--
Patrick


"ysalut" wrote:

Bonjour,

J'utilise SOMMEPROD pour faire des calculs mutlicritéres qui
fonctionne bien, mais je voudrais ne pas avoir a prolonger ma matrice
à chaque fois que je sors des dimensions de la matrices déclaré.
Auriez vous une solution pour éviter ce réajustement manuel dés que je
dépasse les 500 lignes ? Aussi pour des rapidités de calcul, je n'opte
pas pour étendre la formule jusqu'à 65000 lignes.

Exemple :
=SOMMEPROD((B4=SORTIE!$K$2:$K$500)*SORTIE!$D$2:$D$500)

Mais cela ne parche pas :
=SOMMEPROD(B4=SORTIE!$K$2:$K$&NBVAL(SORTIE!K:K))*SORTIE!$D$2:$D
$&NBVAL(SORTIE!D:D))

Merci d'avance
.

Publicité
Poster une réponse
Anonyme