[VBA] Fonction NB.SI_Plus

Dernière mise à jour le 4 novembre 2009 à 16:07 par marlalapocket
Publié par lermite222

Fonction NB.SI_Plus sans limitation



Cette fonction "Plus" permet d'appliquer la fonction NB.SI sans que l'on soit limité au nombre de paramètres imposés par Excel.


Introduction

  • C'est la plage de critères (sur une seule ligne) qui détermine le nombre de colonnes à balayer.
  • La plage de critères peut comporter des blancs.
  • Les cellules vides de la plage de critères permettent d'ignorer cette colonne dans le calcul.
  • Sélection de la hauteur du bloc (en ligne).
    • Automatique en ne sélectionnant que la première cellule Gauche/Haut de la plage de recherche.
    • Programmée en sélectionnant la première cellule Gauche/Haut et en étirant sur la ligne souhaitée.

Le classeur



L'emplacement de la plage de critères ne doit pas être obligatoirement à cet endroit ; elle peut être dans un coin perdu de la feuille.

Dans un module général


Coller le code ci-dessous
Function NbSi_Plus(PlageRech As Variant, PlageCritere1 As Range)
Dim i As Integer, e As Integer, N As Integer, C1 As Integer
Dim M As Long, Mcont As Integer, Tot As Long
Dim TBF
Dim Cell As Range
Dim DebL As Long, FinL As Long
Dim DebC As Long, FinC As Long
Dim Col()
Dim Crit()
    'Initialise les filtres
    i = 0
    For Each Cell In PlageRech
        ReDim Preserve Crit(1, i)
        If Cell <> "" Then
            Mcont = Mcont + 1
            Crit(1, i) = Asc(Cell) '60="<" 62=">"
            
            
            If Len(Cell) > 1 Then
                If Asc(Mid(Cell, 2, 1)) = 60 Or Asc(Mid(Cell, 2, 1)) = 62 Then
                    Crit(1, i) = 61
                End If
            End If
            Select Case Crit(1, i)
            Case 60, 62
                Crit(0, i) = Mid(Cell, 2)
            Case 61
                Crit(0, i) = Mid(Cell, 3)
            Case Else
                Crit(0, i) = Cell
            End Select
        Else
            Crit(1, i) = 0
        End If
        i = i + 1
    Next Cell
    
    'Rechercher si bloc ou toute la colonne
    TBF = Split(PlageCritere1.Address, ":")
    DebL = Range(TBF(0)).Row
    DebC = Range(TBF(0)).Column
    If UBound(TBF) > 0 Then
        FinL = Range(TBF(1)).Row
        
    End If
    If DebL = FinL Or FinL = 0 Then
        'faire le tri sur toute la hauteur de la colonne
        FinL = Cells(65536, Range(TBF(0)).Column).End(xlUp).Row
    End If
    FinC = DebC + UBound(Crit, 2)
    
    'Appliquer les filtres
    For i = DebL To FinL
        M = 0: C1 = 0
        For e = DebC To FinC
            If Crit(0, C1) <> "" Then
                'For N = 0 To UBound(Crit, 2)
                    Select Case Crit(1, C1)
                    Case 60
                        If Cells(i, e) < Val(Crit(0, C1)) Then M = M + 1
                    Case 61
                        If Cells(i, e) <> Val(Crit(0, C1)) Then M = M + 1
                    Case 62
                        If Cells(i, e) > Val(Crit(0, C1)) Then M = M + 1
                    Case Is <> 0
                        If Cells(i, e) = CStr(Crit(0, C1)) Then M = M + 1
                    End Select
                
            End If
            C1 = C1 + 1
        Next e
        If M = Mcont Then Tot = Tot + 1
    Next i

    NbSi_Plus = Tot
End Function

Télécharger le classeur


Sur CiJoint avant le 20/09/2008
Si plus sur Cijoint, vous pouvez m'envoyer un MP et je le remettrai.

Fin


Meilleures réponses pour « Fonction NB.SI_Plus » dans :
Faire fonctionner une application Windows sous Linux avec Wine VoirWine est un logiciel permettant de faire fonctionner certaines applications Windows sous Linux. Contrairement à VMWare ou VirtualBox, Wine n'émule pas un PC complet, mais seulement les API Win32 (appels système Windows). L'émulation n'est pas...
[PHP] Fonction mail() VoirLa fonction mail() est bloquée chez certains des hébergeurs gratuits pour des raisons de sécurité (afin d'éviter le spam notamment), l'adresse ip de la machine qui a demandé le script sera alors indiquée dans le header 'X-MM-Mail-From-IP'. renseignez...
Gérer les fonctionnalités sous vista VoirSous Vista, comme il est possible sous Xp, vous pouvez activer ou désactiver certaines fonctionnalités suivant si vous utilisez les jeux, une imprimante, etc... Accéder aux fonctionnalités de Windows Fonctionnalités Accéder aux...
Télécharger MOREFUNC (Macro complémentaire EXCEL) VoirMorefunc est une macro complémentaire proposant 67 nouvelles fonctions de feuille de calcul pour Excel. Ces fonctions sont compatibles avec Excel 95 à 2007. Elles ne sont pas portables sur d'autres plate-formes que Windows, ni sur d'autres...
Javascript - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Cette notion de sous-programme est généralement appelée fonction...
PHP - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
VBScript - Les fonctions de chaînes de caractères VoirLes fonctions de chaînes de caractères Fonction Description Filter(InputStrings, Value[, Include[, Compare]]) Sélectionne des chaînes de caractères parmi un tableau de chaînes...