Quelle est la syntaxe de SOMME.SI.ENS en VBA?
Valentin
-
Gyrus Messages postés 3360 Statut Membre -
Gyrus Messages postés 3360 Statut Membre -
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!
Qu'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
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 Sub
Qu'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
A voir également:
- Quelle est la syntaxe de SOMME.SI.ENS en VBA?
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum Excel
- Syntaxe precise - Forum Mail
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
1 réponse
Bonjour,
Essaie après avoir modifié cette partie de code :
A+
Essaie après avoir modifié cette partie de code :
'Identification des variables de la formules SumIfs:
Set ValeursASommer = Worksheets("Base de données").Range(AdresseDébitEurosBDD_Colonne & ":" & AdresseDébitEurosBDD_Colonne)
Set RangeCriteria1 = Worksheets("Base de données").Range(AdresseMoisBDD_Colonne & ":" & AdresseMoisBDD_Colonne)
Set RangeCriteria2 = Worksheets("Base de données").Range(AdresseAnnéeBDD_Colonne & ":" & AdresseAnnéeBDD_Colonne)
Set 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")
A+