Quelle est la syntaxe de SOMME.SI.ENS en VBA?
Valentin
-
Gyrus Messages postés 3334 Date d'inscription Statut Membre Dernière intervention -
Gyrus Messages postés 3334 Date d'inscription Statut Membre Dernière intervention -
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
- Trouver erreur de syntaxe fichier txt pix ✓ - Forum Programmation
- Dépassement de capacité vba ✓ - Forum Excel
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- L'indice n'appartient pas à la sélection vba ✓ - Forum Programmation
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+