Sommeprod Annee Mois ne fonctionnent pas en VBA
Bonjour à tous,
Je sollicite humblement votre aide. J'ai un souci avec une formule : elle fonctionne très bien avec Excel mais quand je transpose en VBA (même en utilisant debug.print) j'ai un retour dans la cellule #valeur! au moment de l'exécution de la ligne sumproduct.
Je pense que j'ai bien déclaré mes variables et que la syntaxe est correcte, j'ai vérifié les formats des cellules (date, nombre, texte) ; j'ai testé avec et sans les plages déclarées.
Je suis agacée car je n'arrive pas à trouver, please...
Merci d'avance,
Très cordialement
Voici le code :
Option Explicit
Sub essai1()
Application.ScreenUpdating = False
Dim dFirst, dLast As Date, dl, dl1, M As Integer, A As Long, PlageDate, PlageU As Range
dl = Sheets("Indicateurs").Range("B" & Rows.Count).End(xlUp).Row
dLast = DateAdd("d", -1, CDate("1/" & Format(Date, "mm/yyyy")))
If Cells(dl, 2) <> dLast Then
Sheets("Indicateurs").Cells(dl + 1, 2) = dLast
Sheets("Indicateurs").Cells(dl + 1, 2).NumberFormat = "mmmm-yy;@"
A = Year(dLast)
M = Month(dLast)
'------------------------------------------------------------------------------------------------------------------------
'---------------------------------------------------Indicateurs en cours-------------------------------------------------
'------------------------------------------------------------------------------------------------------------------------
Workbooks.Open Filename:=ThisWorkbook.Path & "\5.9 DAC quater.xlsm"
With Sheets("")
.Range("H4").Copy
ThisWorkbook.Sheets("Indicateurs").Cells(dl + 1, 3).PasteSpecial xlPasteValues
.Range("N4").Copy
ThisWorkbook.Sheets("Indicateurs").Cells(dl + 1, 4).PasteSpecial xlPasteValues
.Range("M4").Copy
ThisWorkbook.Sheets("Indicateurs").Cells(dl + 1, 5).PasteSpecial xlPasteValues
End With
Workbooks("5.9 DAC quater.xlsm").Close False
'------------------------------------------------------------------------------------------------------------------------
'-------------------------------------------------Indicateurs en Archives------------------------------------------------
'------------------------------------------------------------------------------------------------------------------------
Workbooks.Open Filename:=ThisWorkbook.Path & "\Archives - Plan d'actions .xlsm"
dl1 = Sheets("-PDCA").Range("B" & Rows.Count).End(xlUp).Row
Set PlageDate = Range("K10:K" & dl1)
Set PlageU = Range("C10:C" & dl1)
With Sheets("-PDCA")
ThisWorkbook.Sheets("Indicateurs").Cells(dl + 1, 5).Value = Application.Evaluate("=SUMPRODUCT((Year(PlageDate)&Month(PlageDate)= A&M )*(PlageU=""WQ"")")
End With
Workbooks("Archives - Plan d'actions .xlsm").Close False
End If
Application.ScreenUpdating = True
End Sub
Bonjour,
A première vue, il faudrait tester ...
Application.Evaluate ("=SUMPRODUCT((Year(PlageDate)&Month(PlageDate)=" & A & M & " )*(PlageU=""WQ"")")
Bonjour James007,
Merci de m'avoir répondu. Malheureusement, j'ai toujours le même renvoi #valeur!.
Je reste patiente ; s'il y a d'autres suggestions, je suis preneuse.
A bientôt
Bonjour
Application.Evaluate ("=SUMPRODUCT((Year(PlageDate)=" & A & ")*(Month(PlageDate)=" & M & " )*(PlageU=""WQ"")")
Cordialement
Merci Amadéus de m'avoir mis sur la piste, il s'agit d'une incompatibilité entre les nombres, les dates et le texte. On est obligé de passer par une transformation en "nombre" pour que cela soit pris en compte : je fais une opération avec le "1*" !
J'ai dû retirer les variables plages pour alléger la génération d'erreurs.
J'ai modifié le code comme suit, pour ceux qui seraient intéressés à l'avenir
ThisWorkbook.Sheets("Indicateurs").Cells(dl + 1, 7).Value = Application.Evaluate("=SUMPRODUCT((1* Year(K10 :K" & dl1 & ")= " & A & ")*(1*Month(K10 :K" & dl1 & ")=" & M & ")*(1*(C10 :C" & dl1 & "=""WQ"")))")
Merci encore,
Très cordialement.