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

Le
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;"<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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #21640151
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
michdenis
Le #21640881
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" 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
HD
Le #21641071
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"
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" 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

HD
Le #21641061
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" %
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




Daniel.C
Le #21641251
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" %
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




Daniel.C
Le #21641301
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" %
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
michdenis
Le #21642951
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" 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"
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" 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

HD
Le #21652981
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
michdenis
Le #21653341
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" 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
michdenis
Le #21653911
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" 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
Publicité
Poster une réponse
Anonyme