Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Compter Avec NB.SI.ENS Listobject

cp4

XLDnaute Barbatruc
Bonjour,

Dans le fichier joint, je voudrais d'abord utiliser nb.si.ens sur un tableau structuré et avoir une fonction personnalisée VBA.
Et ce, pour compter les occurrences des années précédentes à l'année en cours (ne pas compter ceux de l'année en cours).
J'ai écrit une formule mais j'ai message m'indiquant que ma formule est fausse.
Merci.
 

Pièces jointes

  • Compte_des_précedentes_années.xlsm
    16 KB · Affichages: 5
Solution
la première fonction deviendrait donc
VB:
Public Function Compter(Critère1 As Range, critère2 As Range) As Integer
    With ActiveSheet.ListObjects("Tablo")
        For i = 1 To .ListRows.Count
            If .DataBodyRange(i, 2) = Critère1 And .DataBodyRange(i, 3) = critère2 And Year(.DataBodyRange(i, 1)) < Year(Now) Then
                Compter = Compter + 1
            End If
        Next i
    End With
End Function

et pour la fonction evaluate.. bah.. cp4 va travailler un peu quand meme

vgendron

XLDnaute Barbatruc
et une fonction perso

VB:
Public Function Compter(Critère1 As Range, critère2 As Range) As Integer
    With ActiveSheet.ListObjects("Tablo")
        For i = 1 To .ListRows.Count
            If .DataBodyRange(i, 2) = Critère1 And .DataBodyRange(i, 3) = critère2 Then
                Compter = Compter + 1
            End If
        Next i
    End With
End Function
 

vgendron

XLDnaute Barbatruc
ou encore
VB:
Public Function compter2(Critère1 As Range, critère2 As Range) As Integer
    compter2 = Evaluate("sumproduct((Tablo[[Critère1]:[Critère1]]=""" & Critère1 & """)*(Tablo[[Critère2]:[Critère2]]=""" & critère2 & """))")
End Function
 

vgendron

XLDnaute Barbatruc
la première fonction deviendrait donc
VB:
Public Function Compter(Critère1 As Range, critère2 As Range) As Integer
    With ActiveSheet.ListObjects("Tablo")
        For i = 1 To .ListRows.Count
            If .DataBodyRange(i, 2) = Critère1 And .DataBodyRange(i, 3) = critère2 And Year(.DataBodyRange(i, 1)) < Year(Now) Then
                Compter = Compter + 1
            End If
        Next i
    End With
End Function

et pour la fonction evaluate.. bah.. cp4 va travailler un peu quand meme
 

cp4

XLDnaute Barbatruc
Désolé, pour mon retard. J'ai dû sortir chez l'épicier du coin.

@vgendron : Je te remercie mais tu n'as pas tenu compte de la condition sur les années.
Il fallait compter uniquement pour les années antérieures. Tu as raison, il va falloir que je mette la main à la pâte. Même si le résultat escompté n'est pas au RDV, je te remercie.

@TooFatBoy : je te remercie ta formule donne tout bon. Une suggestion pour une fonction?!

Merci beaucoup.
 

vgendron

XLDnaute Barbatruc
comme à l'école;.il faut lire tout l'énnoncé avant de répondre à la question..
ici, faut lire toutes les réponses...
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…