Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sommeprod dynamique

2 réponses
Avatar
ysalut
Bonjour,

J'utilise SOMMEPROD pour faire des calculs mutlicrit=E9res qui
fonctionne bien, mais je voudrais ne pas avoir a prolonger ma matrice
=E0 chaque fois que je sors des dimensions de la matrices d=E9clar=E9.
Auriez vous une solution pour =E9viter ce r=E9ajustement manuel d=E9s que j=
e
d=E9passe les 500 lignes ? Aussi pour des rapidit=E9s de calcul, je n'opte
pas pour =E9tendre la formule jusqu'=E0 65000 lignes.

Exemple :
=3DSOMMEPROD((B4=3DSORTIE!$K$2:$K$500)*SORTIE!$D$2:$D$500)

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

Merci d'avance

2 réponses

Avatar
michdenis
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" a écrit dans le message de groupe de discussion :

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
Avatar
Patrick
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
.