Quelle est la syntaxe de SOMME.SI.ENS en VBA?
Bonjour à tous,
Mon problème réside dans le nom du topic. En effet, j'essaie de coder cette fonction que je sais très bien utiliser or application macro, mais qui me pose de sérieux problèmes pour la comprendre comment elle fonctionne sous VBA.
La seule chose que je sais c'est qu'il faut utiliser SUMIFS, après ça se corse puisque, dans mon cas, les critères varient ainsi que la plage à sommer.
Donc imaginez-vous deux feuilles excel:
La première est "Base de données"
La seconde est "Analyse"
Voici le code que j'ai édité pour essayer de répondre à mon problème mais cela ne semble pas fonctionner :S!
Sub Bouton17_Cliquer()
'Objectifs de ce bouton:
'1- Calculer la somme en euro (€) des montants des libellés affectés à la catégories "Alimentaire" pour une année donnée et un mois donné
'Références nécessaires à la macro
'---------------
'La cellule "Débit Euros" de la feuille "Base de données"
RefDébitEurosBDD_Ligne = Worksheets("Base de données").Cells.Find("Débit Euros").Row
RefDébitEurosBDD_Colonne = Worksheets("Base de données").Cells.Find("débit Euros").Column
'Adressage de la colonne correspondante:
AdresseDébitEurosBDD_Colonne = Left(Worksheets("Base de données").Cells(RefDébitEurosBDD_Ligne, RefDébitEurosBDD_Colonne).Address(0, 0), 1)
'La cellule "Mois" de la feuille "Base de données"
RefMoisBDD_Ligne = Worksheets("Base de données").Cells.Find("Mois").Row
RefMoisBDD_Colonne = Worksheets("Base de données").Cells.Find("Mois").Column
'Mémorisation de la colonne correspondante:
AdresseMoisBDD_Colonne = Left(Worksheets("Base de données").Cells(RefMoisBDD_Ligne, RefMoisBDD_Colonne).Address(0, 0), 1)
'La cellule "Année" de la feuille "Base de données"
RefAnnéeBDD_Ligne = Worksheets("Base de données").Cells.Find("Année").Row
RefAnnéeBDD_Colonne = Worksheets("Base de données").Cells.Find("Année").Column
'Mémorisation de la colonne correspondante:
AdresseAnnéeBDD_Colonne = Left(Worksheets("Base de données").Cells(RefAnnéeBDD_Ligne, RefAnnéeBDD_Colonne).Address(0, 0), 1)
'La cellule "Catégories" de la feuille "Base de données
RefCatégoriesBDD_Ligne = Worksheets("Base de données").Cells.Find("Catégories").Row
RefCatégoriesBDD_Colonne = Worksheets("Base de données").Cells.Find("Catégories").Column
'Mémorisation de la valeur de l'année
AdresseCatégoriesBDD_Colonne = Left(Worksheets("Base de données").Cells(RefCatégoriesBDD_Ligne, RefCatégoriesBDD_Colonne).Address(0, 0), 1)
'---------------
'La cellule "Année" de la feuille "Analyse"
RefAnnéeAnalyse_Ligne = Worksheets(NomCetteFeuille).Cells.Find("Année").Row
RefAnnéeAnalyse_Colonne = Worksheets(NomCetteFeuille).Cells.Find("Année").Column
'Mémorisation de la valeur de l'année
Année = Worksheets(NomCetteFeuille).Cells(RefAnnéeAnalyse_Ligne + 1, RefAnnéeAnalyse_Colonne).Value
'La valeur de cette cellule ne doit pas être vide
If Année = "" Then
MsgBox "Veuillez indiquer l'année associée à l'analyse de vos données", vbCritical, "Information complémentaire nécessaire"
Exit Sub
End If
'Le mois ciblé: Le mois de janvier en l'occurence
MoisCible = Worksheets("Analyse").Cells(RefAnnéeAnalyse_Ligne + 1, RefAnnéeAnalyse_Colonne + 1).Value
'Identification des variables de la formules SumIfs:
ValeursASommer = Worksheets("Base de données").Range(AdresseDébitEurosBDD_Colonne & ":" & AdresseDébitEurosBDD_Colonne)
RangeCriteria1 = Worksheets("Base de données").Range(AdresseMoisBDD_Colonne & ":" & AdresseMoisBDD_Colonne)
RangeCriteria2 = Worksheets("Base de données").Range(AdresseAnnéeBDD_Colonne & ":" & AdresseAnnéeBDD_Colonne)
RangeCriteria3 = Worksheets("Base de données").Range(AdresseCatégoriesBDD_Colonne & ":" & AdresseCatégoriesBDD_Colonne)
'Calcul de la somme
Worksheets("Analyse").Range("C23").Value = "= Application.SUMIFS(ValeursASommer, RangeCriteria1, MoisCible, RangeCriteria2, ""2014"", RangeCriteria3, ""Alimentaire"")"
End SubQu'est ce qu'il me manque pour que cela fonctionne?
Merci encore
Si mes infos sont insuffisantes je pourrai éventuellement faire un fichier exemple.
Cordialement
Bonjour,
L'envoi d'un fichier serait effectivement un plus.
Merci d'avoir répondu à mon appel en tout cas
Je te laisse en pièce jointe un fichier modèle qui est une petite partie de l'original.
Merci encore à tous
Bonjour
Proposition sans VBA avec une formule somme.si.ens après avoir transformé ta base en tableau dynamique
A tester
Cordialement
FINDRH
Bonsoir FINDRH,
J'aime bien ta solution ceci dit j'aimerai vraiment pouvoir le réaliser sous VBA. C'est mon seul critère en fait :S!
Bonsoir
Pour le fun pourquoi pas
As tu enregistré la saisie de la formule en macro, cela doit par comparaison avec la formule classique, te permettre de repérer les variables et notamment de voir quelles cellules sont figées en ligne et/ou colonnes
Cordialement
FINDRH