Quelle est la syntaxe de SOMME.SI.ENS en VBA?

Fermé
Valentin - 4 mai 2014 à 09:48
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 - 5 mai 2014 à 09:17
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 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

1 réponse

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
5 mai 2014 à 09:17
Bonjour,

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+
0