XL 2010 Compter Avec NB.SI.ENS Listobject

  • Initiateur de la discussion Initiateur de la discussion cp4
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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 🙂
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
 
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
 
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 🙂
 
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.
 
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.
comme à l'école;.il faut lire tout l'énnoncé avant de répondre à la question..
ici, faut lire toutes les réponses...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour