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

[VBA] SOMME.SI.ENS avec date inférieure

18 réponses
Avatar
HD
Bonjour,

J'ai un souci avec la fonction "SOMME.SI.ENS". Je souhaite l'utiliser en VBA
(par souci de rapidité d'exécution) j'ai donc la ligne suivant :
Application.WorksheetFunction.SumIfs(Sheets(NomD).Columns(ColCredit),
Sheets(NomD).Columns(ColCpt1), nCpt1, Sheets(NomD).Columns(ColDate), "<=" &
Da2)

Je n'obtiens rien... alors que si je tape la fonction à la main :
=SOMME.SI.ENS(Sheet1!AO2:AO11414;Sheet1!AY2:AY11414;I16;Sheet1!AE2:AE11414;"<=30/6/2008")

Là j'obtiens bien une valeur... Le souci se pose donc vraissemblablement
avec les quote ". Mais même si j'ajoute des chr(34) de chaque côté du
critère je n'ai toujours rien.

Auriez vous une solution ?

Merci d'avance pour votre aide
--
@+
HD

10 réponses

1 2
Avatar
Daniel.C
Bonjour.
Comment as-tu défini la variable Da2 ?
Cordialement.
Daniel

Bonjour,

J'ai un souci avec la fonction "SOMME.SI.ENS". Je souhaite l'utiliser en VBA
(par souci de rapidité d'exécution) j'ai donc la ligne suivant :
Application.WorksheetFunction.SumIfs(Sheets(NomD).Columns(ColCredit),
Sheets(NomD).Columns(ColCpt1), nCpt1, Sheets(NomD).Columns(ColDate), "<=" &
Da2)

Je n'obtiens rien... alors que si je tape la fonction à la main :
=SOMME.SI.ENS(Sheet1!AO2:AO11414;Sheet1!AY2:AY11414;I16;Sheet1!AE2:AE11414;"<0/6/2008")

Là j'obtiens bien une valeur... Le souci se pose donc vraissemblablement avec
les quote ". Mais même si j'ajoute des chr(34) de chaque côté du critère je
n'ai toujours rien.

Auriez vous une solution ?

Merci d'avance pour votre aide
Avatar
michdenis
Bonjour,

As-tu essayé quelque chose comme ceci :

Dim MaDate As Date
MaDate = DateSerial(2010, 27, 4) 'La date que tu veux !

MsgBox Evaluate("SUMIFS(Sheet1!AO2:AO11414," & _
"Sheet1!AY2:AY11414,I16,Sheet1!" & _
"AE2:AE11414,""<=" & MaDate & """)")




"HD" a écrit dans le message de groupe de discussion :
hr6k5v$2cg2$
Bonjour,

J'ai un souci avec la fonction "SOMME.SI.ENS". Je souhaite l'utiliser en VBA
(par souci de rapidité d'exécution) j'ai donc la ligne suivant :
Application.WorksheetFunction.SumIfs(Sheets(NomD).Columns(ColCredit),
Sheets(NomD).Columns(ColCpt1), nCpt1, Sheets(NomD).Columns(ColDate), "<=" &
Da2)

Je n'obtiens rien... alors que si je tape la fonction à la main :
=SOMME.SI.ENS(Sheet1!AO2:AO11414;Sheet1!AY2:AY11414;I16;Sheet1!AE2:AE11414;"<0/6/2008")

Là j'obtiens bien une valeur... Le souci se pose donc vraissemblablement
avec les quote ". Mais même si j'ajoute des chr(34) de chaque côté du
critère je n'ai toujours rien.

Auriez vous une solution ?

Merci d'avance pour votre aide
--
@+
HD
Avatar
HD
Bonjour MichDenis,

J'ai essayé ta solution mais cela me renvoi 0. Alors que la même formule
tapée dans une cellule me ressort un montant...

--
@+
HD

"michdenis" a écrit dans le message de news:

Bonjour,

As-tu essayé quelque chose comme ceci :

Dim MaDate As Date
MaDate = DateSerial(2010, 27, 4) 'La date que tu veux !

MsgBox Evaluate("SUMIFS(Sheet1!AO2:AO11414," & _
"Sheet1!AY2:AY11414,I16,Sheet1!" & _
"AE2:AE11414,""<=" & MaDate & """)")




"HD" a écrit dans le message de groupe de discussion :
hr6k5v$2cg2$
Bonjour,

J'ai un souci avec la fonction "SOMME.SI.ENS". Je souhaite l'utiliser en
VBA
(par souci de rapidité d'exécution) j'ai donc la ligne suivant :
Application.WorksheetFunction.SumIfs(Sheets(NomD).Columns(ColCredit),
Sheets(NomD).Columns(ColCpt1), nCpt1, Sheets(NomD).Columns(ColDate), "<="
&
Da2)

Je n'obtiens rien... alors que si je tape la fonction à la main :
=SOMME.SI.ENS(Sheet1!AO2:AO11414;Sheet1!AY2:AY11414;I16;Sheet1!AE2:AE11414;"<0/6/2008")

Là j'obtiens bien une valeur... Le souci se pose donc vraissemblablement
avec les quote ". Mais même si j'ajoute des chr(34) de chaque côté du
critère je n'ai toujours rien.

Auriez vous une solution ?

Merci d'avance pour votre aide
--
@+
HD

Avatar
HD
Bonjour Daniel.C,

J'ai en fait fait plusieurs essais avec Da2... Da2 étant défini comme une
variable Date.

J'ai testé:
Da2 = CDate(a2)
Ce qui me renvoi 0

J'ai aussi essayé de définir la date autrement via
Da2 = DateSerial (2008,6,30)
Mais j'obtiens toujours 0

--
@+
HD

"Daniel.C" a écrit dans le message de news:
%
Bonjour.
Comment as-tu défini la variable Da2 ?
Cordialement.
Daniel

Bonjour,

J'ai un souci avec la fonction "SOMME.SI.ENS". Je souhaite l'utiliser en
VBA (par souci de rapidité d'exécution) j'ai donc la ligne suivant :
Application.WorksheetFunction.SumIfs(Sheets(NomD).Columns(ColCredit),
Sheets(NomD).Columns(ColCpt1), nCpt1, Sheets(NomD).Columns(ColDate), "<="
& Da2)

Je n'obtiens rien... alors que si je tape la fonction à la main :
=SOMME.SI.ENS(Sheet1!AO2:AO11414;Sheet1!AY2:AY11414;I16;Sheet1!AE2:AE11414;"<0/6/2008")

Là j'obtiens bien une valeur... Le souci se pose donc vraissemblablement
avec les quote ". Mais même si j'ajoute des chr(34) de chaque côté du
critère je n'ai toujours rien.

Auriez vous une solution ?

Merci d'avance pour votre aide




Avatar
Daniel.C
Essaie comme string, format mm/dd/yyyy
Daniel

Bonjour Daniel.C,

J'ai en fait fait plusieurs essais avec Da2... Da2 étant défini comme une
variable Date.

J'ai testé:
Da2 = CDate(a2)
Ce qui me renvoi 0

J'ai aussi essayé de définir la date autrement via
Da2 = DateSerial (2008,6,30)
Mais j'obtiens toujours 0

--
@+
HD

"Daniel.C" a écrit dans le message de news:
%
Bonjour.
Comment as-tu défini la variable Da2 ?
Cordialement.
Daniel

Bonjour,

J'ai un souci avec la fonction "SOMME.SI.ENS". Je souhaite l'utiliser en
VBA (par souci de rapidité d'exécution) j'ai donc la ligne suivant :
Application.WorksheetFunction.SumIfs(Sheets(NomD).Columns(ColCredit),
Sheets(NomD).Columns(ColCpt1), nCpt1, Sheets(NomD).Columns(ColDate), "<="
& Da2)

Je n'obtiens rien... alors que si je tape la fonction à la main :
=SOMME.SI.ENS(Sheet1!AO2:AO11414;Sheet1!AY2:AY11414;I16;Sheet1!AE2:AE11414;"<0/6/2008")

Là j'obtiens bien une valeur... Le souci se pose donc vraissemblablement
avec les quote ". Mais même si j'ajoute des chr(34) de chaque côté du
critère je n'ai toujours rien.

Auriez vous une solution ?

Merci d'avance pour votre aide




Avatar
Daniel.C
Cette ligne fonctionne pour moi :
Var = Application.SumIfs([B1:B16], [A1:A16], "<" & DateSerial(2010, 1,
5) * 1)
Daniel

Essaie comme string, format mm/dd/yyyy
Daniel

Bonjour Daniel.C,

J'ai en fait fait plusieurs essais avec Da2... Da2 étant défini comme une
variable Date.

J'ai testé:
Da2 = CDate(a2)
Ce qui me renvoi 0

J'ai aussi essayé de définir la date autrement via
Da2 = DateSerial (2008,6,30)
Mais j'obtiens toujours 0

--
@+
HD

"Daniel.C" a écrit dans le message de news:
%
Bonjour.
Comment as-tu défini la variable Da2 ?
Cordialement.
Daniel

Bonjour,

J'ai un souci avec la fonction "SOMME.SI.ENS". Je souhaite l'utiliser en
VBA (par souci de rapidité d'exécution) j'ai donc la ligne suivant :
Application.WorksheetFunction.SumIfs(Sheets(NomD).Columns(ColCredit),
Sheets(NomD).Columns(ColCpt1), nCpt1, Sheets(NomD).Columns(ColDate), "<="
& Da2)

Je n'obtiens rien... alors que si je tape la fonction à la main :
=SOMME.SI.ENS(Sheet1!AO2:AO11414;Sheet1!AY2:AY11414;I16;Sheet1!AE2:AE11414;"<0/6/2008")

Là j'obtiens bien une valeur... Le souci se pose donc vraissemblablement
avec les quote ". Mais même si j'ajoute des chr(34) de chaque côté du
critère je n'ai toujours rien.

Auriez vous une solution ?

Merci d'avance pour votre aide
Avatar
michdenis
En vba, Excel utilise le format date américain...

MsgBox Evaluate("SUMIFS(Sheet1!AO2:AO11414," & _
"Sheet1!AY2:AY11414,I16,Sheet1!" & _
"AE2:AE11414,""<=" & Format(MaDate, "m/d/yy") & """)")




"HD" a écrit dans le message de groupe de discussion :
hr6tvk$2g9m$
Bonjour MichDenis,

J'ai essayé ta solution mais cela me renvoi 0. Alors que la même formule
tapée dans une cellule me ressort un montant...

--
@+
HD

"michdenis" a écrit dans le message de news:

Bonjour,

As-tu essayé quelque chose comme ceci :

Dim MaDate As Date
MaDate = DateSerial(2010, 27, 4) 'La date que tu veux !

MsgBox Evaluate("SUMIFS(Sheet1!AO2:AO11414," & _
"Sheet1!AY2:AY11414,I16,Sheet1!" & _
"AE2:AE11414,""<=" & MaDate & """)")




"HD" a écrit dans le message de groupe de discussion :
hr6k5v$2cg2$
Bonjour,

J'ai un souci avec la fonction "SOMME.SI.ENS". Je souhaite l'utiliser en
VBA
(par souci de rapidité d'exécution) j'ai donc la ligne suivant :
Application.WorksheetFunction.SumIfs(Sheets(NomD).Columns(ColCredit),
Sheets(NomD).Columns(ColCpt1), nCpt1, Sheets(NomD).Columns(ColDate), "<="
&
Da2)

Je n'obtiens rien... alors que si je tape la fonction à la main :
=SOMME.SI.ENS(Sheet1!AO2:AO11414;Sheet1!AY2:AY11414;I16;Sheet1!AE2:AE11414;"<0/6/2008")

Là j'obtiens bien une valeur... Le souci se pose donc vraissemblablement
avec les quote ". Mais même si j'ajoute des chr(34) de chaque côté du
critère je n'ai toujours rien.

Auriez vous une solution ?

Merci d'avance pour votre aide
--
@+
HD

Avatar
HD
Alors... Lorsque je lance :

Sub test()
Dim MaDate As Date
MaDate = DateSerial(2008, 6, 30) 'La date que tu veux !

MsgBox
Evaluate("SUMIFS(Sheet1!AO2:AO11414,Sheet1!AY2:AY11414,I16,Sheet1!AE2:AE11414,""<="
& Format(MaDate, "m/d/yy") & """)")
End Sub

J'obtiens bien l'affichage de la valeur attendue... mais lorsque je lance :

1 Public Function MasseCrédit(a1 As Range, a2 As String, nCpt1 As String)
2 On Error Resume Next
3 Application.EnableEvents = False
4 Dim i As Long
5 Dim Da2 As Date
6 Application.Volatile False
7
8 i = 1
9 If IsDate(a2) Then
10 Da2 = CDate(a2)
11 MasseCrédit = Evaluate("SUMIFS(" & Sheets(NomD).Columns(ColCredit) &
"," & Sheets(NomD).Columns(ColCpt1) & "," & nCpt1 & "," &
Sheets(NomD).Columns(ColDate) & ",""<=" & Format(Da2, "m/d/yy") & """)")
12 MsgBox "ColCpt1=" & ColCpt1 & vbCrLf & "NomD=" & NomD & vbCrLf &
"ColCredit=" & ColCredit & vbCrLf & "ColDate=" & ColDate & vbCrLf & "Da2=" &
Format(Da2, "m/d/yy")
13 MsgBox Evaluate("SUMIFS(" & Sheets(NomD).Columns(ColCredit) & ","
& Sheets(NomD).Columns(ColCpt1) & "," & nCpt1 & "," &
Sheets(NomD).Columns(ColDate) & ",""<=" & Format(Da2, "m/d/yy") & """)")
14 End If
15 Application.EnableEvents = True
16 End Function

Je n'ai pas la MasseCrédit qui se calcul (ligne 11), toutes mes variables
qui s'affichent et me montrent que tout est bien initialisé (ligne 12), et
l'affichage de mon Evaluate ne se fait même pas (ligne 13)...

--
@+
HD
Avatar
michdenis
Ta ligne de déclaration de ta fonction
Public Function MasseCrédit(a1 As Range, a2 As String, nCpt1 As String)

Que représente la valeur A1 ? A2 ? nCpt1 ?
Donne un exemple réel comment tu passes tes valeurs à la fonction
x = MasseCrédit(A1, A2, nCpt1)

N.B- Ce n'est JAMAIS une bonne idée d'utiliser comme nom d'un paramètre
ou d'une variable, une chaîne de caractère identique (A1, A2) à ce qui pourrait
être une adresse de cellule d'une feuille de calcul.



"HD" a écrit dans le message de groupe de discussion :
hrbmss$19i1$
Alors... Lorsque je lance :

Sub test()
Dim MaDate As Date
MaDate = DateSerial(2008, 6, 30) 'La date que tu veux !

MsgBox
Evaluate("SUMIFS(Sheet1!AO2:AO11414,Sheet1!AY2:AY11414,I16,Sheet1!AE2:AE11414,""<="
& Format(MaDate, "m/d/yy") & """)")
End Sub

J'obtiens bien l'affichage de la valeur attendue... mais lorsque je lance :

1 Public Function MasseCrédit(a1 As Range, a2 As String, nCpt1 As String)
2 On Error Resume Next
3 Application.EnableEvents = False
4 Dim i As Long
5 Dim Da2 As Date
6 Application.Volatile False
7
8 i = 1
9 If IsDate(a2) Then
10 Da2 = CDate(a2)
11 MasseCrédit = Evaluate("SUMIFS(" & Sheets(NomD).Columns(ColCredit) &
"," & Sheets(NomD).Columns(ColCpt1) & "," & nCpt1 & "," &
Sheets(NomD).Columns(ColDate) & ",""<=" & Format(Da2, "m/d/yy") & """)")
12 MsgBox "ColCpt1=" & ColCpt1 & vbCrLf & "NomD=" & NomD & vbCrLf &
"ColCredit=" & ColCredit & vbCrLf & "ColDate=" & ColDate & vbCrLf & "Da2=" &
Format(Da2, "m/d/yy")
13 MsgBox Evaluate("SUMIFS(" & Sheets(NomD).Columns(ColCredit) & ","
& Sheets(NomD).Columns(ColCpt1) & "," & nCpt1 & "," &
Sheets(NomD).Columns(ColDate) & ",""<=" & Format(Da2, "m/d/yy") & """)")
14 End If
15 Application.EnableEvents = True
16 End Function

Je n'ai pas la MasseCrédit qui se calcul (ligne 11), toutes mes variables
qui s'affichent et me montrent que tout est bien initialisé (ligne 12), et
l'affichage de mon Evaluate ne se fait même pas (ligne 13)...

--
@+
HD
Avatar
michdenis
Quelques remarques sur ta fonction personnalisée :

A ) si le paramètre A2 est une date dans une cellule, pourquoi utiliser
A2 As String dans la déclaration de ta fonction au lieu de As Range ?

B ) Dans ta fonction, plusieurs variables sont non renseignées comme
ColCredit, ColCpt1, ColDate ... Quelles sont leurs valeurs ? Comment
les renseignes-tu ?

C ) Quel rôle ces lignes de code : "Application.EnableEvents = True" doit
jouer dans la fonction ? Une fonction a pour but de retourner un
résultat d'opération. La valeur retournée peut être une chaîne de
caractère, un nombre, une valeur booléenne ou une valeur d'erreur.

D ) La gestion d'erreur de ce genre : On Error Resume Next n'est pas vraiment
appropriée pour une fonction personnalisée. De toute façon, si la fonction
ne réussit pas à évaluer la proposition, elle va retourner elle-même une valeur
d'erreur. Par contre, cette ligne de code peut masquer une erreur de
programmation qui n'a rien à voir avec l'objectif de la fonction et là, tu auras
de la difficulté à trouver pourquoi ta fonction ne renvoie pas la valeur désirée.
Lors de tes tests, utilise des points d'arrêt dès le début de la fonction... et
utilise
le pas à pas pour déterminer la ligne de code problème.

E ) La disposition du code aide (au moins dans mon cas) à lire, comprendre et
déceler plus facilement les erreurs...

Da2 = CDate(a2)
MasseCrédit = Evaluate("SUMIFS(" & Sheets(NomD).Columns(ColCredit) & _
"," & Sheets(NomD).Columns(ColCpt1) & "," & nCpt1 & _
"," & Sheets(NomD).Columns(ColDate) & ",""<=" & _
Format(Da2, "m/d/yy") & """)")

MsgBox "ColCpt1=" & ColCpt1 & vbCrLf & "NomD=" & NomD & vbCrLf & _
"ColCredit=" & ColCredit & vbCrLf & "ColDate=" & ColDate & _
vbCrLf & "Da2=" & Format(Da2, "m/d/yy")

MsgBox Evaluate("SUMIFS(" & Sheets(NomD).Columns(ColCredit) & _
"," & Sheets(NomD).Columns(ColCpt1) & "," & nCpt1 & _
"," & Sheets(NomD).Columns(ColDate) & ",""<=" & _
Format(Da2, "m/d/yy") & """)")


Afin de s'aider à construire une chaîne de caractères d'une fonction, il ne
faut pas hésiter à utiliser des variables intermédiaires. Je te donne un
exemple... bien que ce ne soit pas une fonction, le principe demeure
le même.
'-----------------------------------------
Sub FormuleEnVBA()

Dim Adr As String, Adr1 As String
Dim Adr2 As String, Adr3 As String
Dim Rg As Range, A As Variant
Dim Crit As String, Crit1 As String, Crit2 As String

With Worksheets("Feuil1") 'à déterminer
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Crit = "MonModèle"
Crit1 = "Diamètre"
Crit2 = "Espacement"

With Rg
Adr = .Parent.Name & "!" & .Address
Adr1 = .Offset(, 1).Parent.Name & "!" & .Offset(, 1).Address
Adr2 = .Offset(, 2).Parent.Name & "!" & .Offset(, 2).Address
Adr3 = .Offset(, 3).Parent.Name & "!" & .Offset(, 3).Address
End With

MaFormule = "SumProduct((" & Adr & "=""" & Crit & """)*" & _
"(" & Adr1 & "=""" & Crit & """)*" & _
"(" & Adr2 & "=""" & Crit2 & """)*" & _
"(" & Adr3 & "))"

A = Evaluate(" & maformule & ")
MsgBox A
End Sub
'-----------------------------------------


"HD" a écrit dans le message de groupe de discussion :
hrbmss$19i1$
Alors... Lorsque je lance :

Sub test()
Dim MaDate As Date
MaDate = DateSerial(2008, 6, 30) 'La date que tu veux !

MsgBox
Evaluate("SUMIFS(Sheet1!AO2:AO11414,Sheet1!AY2:AY11414,I16,Sheet1!AE2:AE11414,""<="
& Format(MaDate, "m/d/yy") & """)")
End Sub

J'obtiens bien l'affichage de la valeur attendue... mais lorsque je lance :

1 Public Function MasseCrédit(a1 As Range, a2 As String, nCpt1 As String)
2 On Error Resume Next
3 Application.EnableEvents = False
4 Dim i As Long
5 Dim Da2 As Date
6 Application.Volatile False
7
8 i = 1
9 If IsDate(a2) Then
10 Da2 = CDate(a2)
11 MasseCrédit = Evaluate("SUMIFS(" & Sheets(NomD).Columns(ColCredit) &
"," & Sheets(NomD).Columns(ColCpt1) & "," & nCpt1 & "," &
Sheets(NomD).Columns(ColDate) & ",""<=" & Format(Da2, "m/d/yy") & """)")
12 MsgBox "ColCpt1=" & ColCpt1 & vbCrLf & "NomD=" & NomD & vbCrLf &
"ColCredit=" & ColCredit & vbCrLf & "ColDate=" & ColDate & vbCrLf & "Da2=" &
Format(Da2, "m/d/yy")
13 MsgBox Evaluate("SUMIFS(" & Sheets(NomD).Columns(ColCredit) & ","
& Sheets(NomD).Columns(ColCpt1) & "," & nCpt1 & "," &
Sheets(NomD).Columns(ColDate) & ",""<=" & Format(Da2, "m/d/yy") & """)")
14 End If
15 Application.EnableEvents = True
16 End Function

Je n'ai pas la MasseCrédit qui se calcul (ligne 11), toutes mes variables
qui s'affichent et me montrent que tout est bien initialisé (ligne 12), et
l'affichage de mon Evaluate ne se fait même pas (ligne 13)...

--
@+
HD
1 2