synthétiser cette formule

  • Initiateur de la discussion Initiateur de la discussion fred94000
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

fred94000

XLDnaute Junior
Bonjour le forum,

je souhaiterais synthétiser la formule ci-dessous qui correspond a 1 colonne sachant qu'il y a 16 colonnes fois 12 lignes.
le chiffre en rouge correspond à un indice se trouvant dans BD (Base de donnée) et il y en a 16 autres.

sub MàJ()
Worksheets("Recap").Range("c3") = Application.Evaluate("sumproduct((MONTH(BD!b2:b65536)=MONTH(Recap!b3)*(YEAR(BD!b2:b65536)=YEAR(Recap!b1)))*(BD!g2:g65536=" & "69" & "))")
Worksheets("Recap").Range("c4") = Application.Evaluate("sumproduct((MONTH(BD!b2:b65536)=MONTH(Recap!b4)*(YEAR(BD!b2:b65536)=YEAR(Recap!b1)))*(BD!g2:g65536=" & "69" & "))")
Worksheets("Recap").Range("c5") = Application.Evaluate("sumproduct((MONTH(BD!b2:b65536)=MONTH(Recap!b5)*(YEAR(BD!b2:b65536)=YEAR(Recap!b1)))*(BD!g2:g65536=" & "69" & "))")
Worksheets("Recap").Range("c6") = Application.Evaluate("sumproduct((MONTH(BD!b2:b65536)=MONTH(Recap!b6)*(YEAR(BD!b2:b65536)=YEAR(Recap!b1)))*(BD!g2:g65536=" & "69" & "))")
Worksheets("Recap").Range("c7") = Application.Evaluate("sumproduct((MONTH(BD!b2:b65536)=MONTH(Recap!b7)*(YEAR(BD!b2:b65536)=YEAR(Recap!b1)))*(BD!g2:g65536=" & "69" & "))")
Worksheets("Recap").Range("c8") = Application.Evaluate("sumproduct((MONTH(BD!b2:b65536)=MONTH(Recap!b8)*(YEAR(BD!b2:b65536)=YEAR(Recap!b1)))*(BD!g2:g65536=" & "69" & "))")
Worksheets("Recap").Range("c9") = Application.Evaluate("sumproduct((MONTH(BD!b2:b65536)=MONTH(Recap!b9)*(YEAR(BD!b2:b65536)=YEAR(Recap!b1)))*(BD!g2:g65536=" & "69" & "))")
Worksheets("Recap").Range("c10") = Application.Evaluate("sumproduct((MONTH(BD!b2:b65536)=MONTH(Recap!b10)*(YEAR(BD!b2:b65536)=YEAR(Recap!b1)))*(BD!g2:g65536=" & "69" & "))")
Worksheets("Recap").Range("c11") = Application.Evaluate("sumproduct((MONTH(BD!b2:b65536)=MONTH(Recap!b11)*(YEAR(BD!b2:b65536)=YEAR(Recap!b1)))*(BD!g2:g65536=" & "69" & "))")
Worksheets("Recap").Range("c12") = Application.Evaluate("sumproduct((MONTH(BD!b2:b65536)=MONTH(Recap!b12)*(YEAR(BD!b2:b65536)=YEAR(Recap!b1)))*(BD!g2:g65536=" & "69" & "))")
Worksheets("Recap").Range("c13") = Application.Evaluate("sumproduct((MONTH(BD!b2:b65536)=MONTH(Recap!b13)*(YEAR(BD!b2:b65536)=YEAR(Recap!b1)))*(BD!g2:g65536=" & "69" & "))")
Worksheets("Recap").Range("c14") = Application.Evaluate("sumproduct((MONTH(BD!b2:b65536)=MONTH(Recap!b14)*(YEAR(BD!b2:b65536)=YEAR(Recap!b1)))*(BD!g2:g65536=" & "69" & "))")
end sub

dans l'attente merci
 
Re : synthétiser cette formule

Bonjour fred,

Et pourquoi ne pas mettre la formule dans toute la plage puis faire un copier/collage spécial valeurs, plutôt que de multiples Evaluate ?

Pour le 69, si on ne sait pas d'où il vient, on aura du mal à t'aider

un truc du genre, peut-être

Code:
Worksheets("Recap").Range("c3:C14").formula = "=sumproduct((MONTH(BD!$b$2:$b$65536)=MONTH(Recap!b3)*(YEAR(BD!$b$2:$b$65536)=YEAR(Recap!$b$1)))*(BD!$g$2:$g$65536=69))"
Worksheets("Recap").Range("c3:C14").value = Worksheets("Recap").Range("c3:C14").value
 
Re : synthétiser cette formule

bonjour le forum et toi tototiti2008,
j'ai posté ce message pour question de rapidité. Je pensais que passer par VBA le calcule se ferait plus vite, plutôt d'écrire dans toute les plages par .formula.

pour ce qui est du 69, cela correspond a la feuille BD (Base de données) en colonne G2:G65536. sachant qu'il a 16 autres valeurs
dans cette base.
je joins un fichier test.

dans l'attente
merci encore
 

Pièces jointes

Re : synthétiser cette formule

Bonjour fred,

Pas persuadé qu'Evaluate soit plus rapide que d'écrire la formule, mais si tu y tiens...

Code:
Sub MaJ()
Dim lig As Long, col As Long
With Worksheets("Recap")
    For lig = 4 To 15
        For col = 2 To 13
            .Range("c" & lig) = Application.Evaluate("sumproduct((MONTH(BD!b2:b65536)=MONTH(Recap!b" & lig & ")*(YEAR(BD!b2:b65536)=YEAR(Recap!a1)))*(BD!g2:g65536=" & .Cells(3, col).Value & "))")
        Next col
    Next lig
End With
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
1 K
Réponses
2
Affichages
868
Réponses
4
Affichages
1 K
M
Réponses
3
Affichages
822
A
A
Réponses
6
Affichages
2 K
A
D
Réponses
10
Affichages
2 K
J
Réponses
7
Affichages
2 K
Je débute
J
Retour