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

sommeprod en vba

4 réponses
Avatar
-=lolol=-
Bonjour,

Dans un classeur, j'ai 2 feuilles (Reg et Cour par exemple) reprenant
environ 2500 lignes chacunes. Sachant que mes 2 feuilles ne sont pas
triées et afin de faire une recherche sur 2 critères, j'essaye
d'utiliser sommeprod.

Dans la feuille Cour, dans la colonne C, j'ai une formule (en C2)
SOMMEPROD((Reg!Reg_id=A2)*(Reg!Reg_date_fin>AUJOURDHUI());Reg!Reg_date_fin)
Ok, je pense obtenir le bon résultat.

Maintenant, plutôt que de passer par des formules, je souhaiterais
passer par vba en balayant la page Reg et écrire en dur dans la colonne
C de Reg le résultat de la même formule ... je n'y arrive pas, pouvez
vous m'aider ?


Par avance merci
@+lolo

4 réponses

Avatar
michdenis
D'abord je n'ai rien compris de ce que tu veux faire ...
mais à tout hasard, si tu veux obtenir le résultat dans
une variable en vba pour le copier dans une cellule, il y
a quelque chose comme ceci :

c = [SumProduct((Reg!Reg_id¢)*(Reg!Reg_date_fin >TODAY()),Reg!Reg_date_fin)]
Range("adresse de ta cellule") = c



"-=lolol=-" a écrit dans le message de groupe de
discussion :
Bonjour,

Dans un classeur, j'ai 2 feuilles (Reg et Cour par exemple) reprenant
environ 2500 lignes chacunes. Sachant que mes 2 feuilles ne sont pas
triées et afin de faire une recherche sur 2 critères, j'essaye
d'utiliser sommeprod.

Dans la feuille Cour, dans la colonne C, j'ai une formule (en C2)
SOMMEPROD((Reg!Reg_id¢)*(Reg!Reg_date_fin>AUJOURDHUI());Reg!Reg_date_fin)
Ok, je pense obtenir le bon résultat.

Maintenant, plutôt que de passer par des formules, je souhaiterais
passer par vba en balayant la page Reg et écrire en dur dans la colonne
C de Reg le résultat de la même formule ... je n'y arrive pas, pouvez
vous m'aider ?


Par avance merci
@+lolo
Avatar
-=lolol=-
Bonjour michdenis,

Pardonne moi cette question incomplète, mais le problème m'est
difficile à expliqué.

Dans la feuille Cour Dans la feuille Reg
ColA ColB ColA ColB
id Validation id date fin
1 1 27/02/2009
2 5 16/05/2008
5 2 25/12/1999
12 12 27/06/2010
6 2 25/03/2009
... ...

Dans la feuille Cour, dans la colonne validation, je voudrais écrire la
date de fin de l'id ColA qu'on peut trouver sur la feuille Reg:
- si elle existe
- et si la date de fin supérieure à aujourd'hui

Dans Reg, il peut y avoir plusieurs fois le même id avec des dates
différentes, je veux savoir s'il y a au moins une ligne avec le bon id
et une date supérieur à aujourd'hui.

Par exemple en B3,
SOMMEPROD((Reg!Reg_id£)*(Reg!Reg_date_fin>AUJOURDHUI());Reg!Reg_date_fin)


c = [SumProduct((Reg!Reg_id¢)*(Reg!Reg_date_fin
>TODAY()),Reg!Reg_date_fin)]
Range("adresse de ta cellule") = c



C'est un première bonne chose :-) mais lorsque je boucle sur les
valeurs de Cour, comment inclure NumLigne dans ta formule ?

For NumLigne = Range("A65536").End(xlUp).Row To 2 Step -1
Test = [SumProduct((Reg!Reg_id£0)*(Reg!Reg_date_fin
TODAY()),Reg!Reg_date_fin)]


....
Next NumLigne

J'ai essayé Test = [SumProduct((Reg!Reg_id=A& NumLigne
&30)*(Reg!Reg_date_fin >TODAY()),Reg!Reg_date_fin)] sans succès :-(

Peut être y a t'il moyen de faire plus élégament ... peut être avec un
for each ... j'y arrive pas :-(

Merci pour ton aide et ta patience
@+lolo
Avatar
michdenis
'Si tu connais la plage de cellules
'où tu veux copier la formule
'----------------------------------
Sub test()

Dim Rg As Range
'Détermine la plage où tu veux copier
'Attribution de la plage à une variable objet range
Set Rg = Range("G1:G5")
'Copie de la formule dans la plage
Rg.Formula = "=SumProduct((Reg!Reg_id=" & _
Rg(1).Address(0, 0) & _
")*(Reg!Reg_date_fin>TODAY()),Reg!Reg_date_fin)"
Set Rg = Nothing
End Sub
'----------------------------------

Si tu veux avoir le résultat d'une formule dans la fenêtre VBA
ou copier cette formule dans une cellule.
'--------------------------
Sub test()
Dim Ligne As Long, D as String, C
Ligne = 25 ' Tu détermine la valeur de la ligne
d = "=SumProduct((Reg!Reg_id=A" & Ligne & ")*(Reg!Reg_date_fin>TODAY()),Reg!Reg_date_fin)"

'Si tu veux avoir le résultat dans la variable C
c = Evaluate(d)

'Pour copier la formule dans la cellule G1
Range("g1").Formula = d

End Sub
'--------------------------



"-=lolol=-" a écrit dans le message de groupe de
discussion :
Bonjour michdenis,

Pardonne moi cette question incomplète, mais le problème m'est
difficile à expliqué.

Dans la feuille Cour Dans la feuille Reg
ColA ColB ColA ColB
id Validation id date fin
1 1 27/02/2009
2 5 16/05/2008
5 2 25/12/1999
12 12 27/06/2010
6 2 25/03/2009
... ...

Dans la feuille Cour, dans la colonne validation, je voudrais écrire la
date de fin de l'id ColA qu'on peut trouver sur la feuille Reg:
- si elle existe
- et si la date de fin supérieure à aujourd'hui

Dans Reg, il peut y avoir plusieurs fois le même id avec des dates
différentes, je veux savoir s'il y a au moins une ligne avec le bon id
et une date supérieur à aujourd'hui.

Par exemple en B3,
SOMMEPROD((Reg!Reg_id£)*(Reg!Reg_date_fin>AUJOURDHUI());Reg!Reg_date_fin)


c = [SumProduct((Reg!Reg_id¢)*(Reg!Reg_date_fin
>TODAY()),Reg!Reg_date_fin)]
Range("adresse de ta cellule") = c



C'est un première bonne chose :-) mais lorsque je boucle sur les
valeurs de Cour, comment inclure NumLigne dans ta formule ?

For NumLigne = Range("A65536").End(xlUp).Row To 2 Step -1
Test = [SumProduct((Reg!Reg_id£0)*(Reg!Reg_date_fin
TODAY()),Reg!Reg_date_fin)]


....
Next NumLigne

J'ai essayé Test = [SumProduct((Reg!Reg_id=A& NumLigne
&30)*(Reg!Reg_date_fin >TODAY()),Reg!Reg_date_fin)] sans succès :-(

Peut être y a t'il moyen de faire plus élégament ... peut être avec un
for each ... j'y arrive pas :-(

Merci pour ton aide et ta patience
@+lolo
Avatar
-=lolol=-
Bonsoir,

Super, je fais avec ça :-)

Mille mercis

@+lolo

...
Si tu veux avoir le résultat d'une formule dans la fenêtre VBA
ou copier cette formule dans une cellule.
'--------------------------
Sub test()
Dim Ligne As Long, D as String, C
Ligne = 25 ' Tu détermine la valeur de la ligne
d = "=SumProduct((Reg!Reg_id=A" & Ligne &
")*(Reg!Reg_date_fin>TODAY()),Reg!Reg_date_fin)"

'Si tu veux avoir le résultat dans la variable C
c = Evaluate(d)

'Pour copier la formule dans la cellule G1
Range("g1").Formula = d

End Sub
'--------------------------



"-=lolol=-" a écrit dans le message de
groupe de discussion :
Bonjour michdenis,

Pardonne moi cette question incomplète, mais le problème m'est
difficile à expliqué.

Dans la feuille Cour Dans la feuille Reg
ColA ColB ColA ColB
id Validation id date fin
1 1 27/02/2009
2 5 16/05/2008
5 2 25/12/1999
12 12 27/06/2010
6 2 25/03/2009
... ...

Dans la feuille Cour, dans la colonne validation, je voudrais écrire la
date de fin de l'id ColA qu'on peut trouver sur la feuille Reg:
- si elle existe
- et si la date de fin supérieure à aujourd'hui

Dans Reg, il peut y avoir plusieurs fois le même id avec des dates
différentes, je veux savoir s'il y a au moins une ligne avec le bon id
et une date supérieur à aujourd'hui.

Par exemple en B3,
SOMMEPROD((Reg!Reg_id£)*(Reg!Reg_date_fin>AUJOURDHUI());Reg!Reg_date_fin)


c = [SumProduct((Reg!Reg_id¢)*(Reg!Reg_date_fin
TODAY()),Reg!Reg_date_fin)]


Range("adresse de ta cellule") = c



C'est un première bonne chose :-) mais lorsque je boucle sur les
valeurs de Cour, comment inclure NumLigne dans ta formule ?

For NumLigne = Range("A65536").End(xlUp).Row To 2 Step -1
Test = [SumProduct((Reg!Reg_id£0)*(Reg!Reg_date_fin
TODAY()),Reg!Reg_date_fin)]


....
Next NumLigne

J'ai essayé Test = [SumProduct((Reg!Reg_id=A& NumLigne
&30)*(Reg!Reg_date_fin >TODAY()),Reg!Reg_date_fin)] sans succès :-(

Peut être y a t'il moyen de faire plus élégament ... peut être avec un
for each ... j'y arrive pas :-(

Merci pour ton aide et ta patience
@+lolo