VBA: Compter les valeurs différentes


Le code VBA suivant vous permet de compter facilement le nombre de valeurs uniques (= différentes) dans une plage de cellules (Range), ce qui peut être très pratique lors de l'analyse des données. Je vous propose cette fonctionnalité sous forme d'une fonction facilement intégrable dans votre projet VBA.

Fonction VBA pour compter les valeurs différentes

Cette fonction (appelée ValeursUniquesDansPlage) utilise un seul argument (de type Range) qui représente la plage dont les valeurs différentes doivent être comptées. Ces plages peuvent se présenter sous la forme "A1:B100" ou avec les "plages nommées" (Named Ranges).

L'avantage de cette fonction est qu'elle peut être utilisée pour compter les valeurs uniques de tout type – chaînes de caractères, nombres, dates,… La valeur vide n'est pas incluse dans le résultat.

En pratique: la fonction appliquée à la plage de cellules suivante (A1:A7) aura pour résultat "5" car elle contient 5 valeurs différentes ("123", "test", "lundi", "mardi" et "11/16/2015")

VBA: compter les valeurs différentes

Code VBA de la Fonction de comptage des valeurs différentes

C'est ce code-ci que vous devez copier dans votre projet VBA pour pouvoir utiliser la fonction qui compte les valeurs différentes.

Public Function ValeursUniquesDansPlage(MaPlage As Range)
'par: http://excel-malin.com
    
    On Error GoTo ValeursUniquesDansPlageErreur
    'définition de variables
    Dim N As Long
    Dim Compteur As Long
    Dim Ligne As String
    Dim Valeur As String
    Dim NombreDeValeursUniques As Long
    Dim ValeursUniques() As String
    'valeurs par défaut
    N = 0
    Compteur = 0
    Ligne = ""
    Valeur = ""
    NombreDeValeursUniques = 0
    
    N = MaPlage.Count
    ReDim ValeursUniques(0 To N)
    'itération dans la Plage
    If (N > 0) Then
        For Compteur = 1 To N
            Valeur = CStr(MaPlage.Cells(Compteur).Value)
            If (Not (InStr(1, Ligne, Valeur, vbBinaryCompare) > 0)) Then
                Ligne = Ligne & ("[" & Valeur & "]")
                NombreDeValeursUniques = NombreDeValeursUniques + 1
                ValeursUniques(NombreDeValeursUniques) = Valeur
            End If
        Next Compteur
    End If
    'résultat final
    ValeursUniquesDansPlage = NombreDeValeursUniques
    Exit Function
ValeursUniquesDansPlageErreur:
    MsgBox "Une erreur s'est produite..."
    ValeursUniquesDansPlage = 0
End Function

 

Exemple d’utilisation de la fonction ValeursUniquesDansPlage()

Dans l'exemple qui suit, on utilise la fonction ValeursUniquesDansPlage pour compter les valeurs différentes dans la plage de cellules A1:B30 (donc une plage de 2 colonnes * 30 lignes). Le résultat est affiché dans une fenêtre pop-up (MsgBox).

Sub ExempleValeursUniques()
'par: http://excel-malin.com

    On Error GoTo TestErreur
    Dim MaPlage As Range
    
    Set MaPlage = ActiveSheet.Range("A1:B30") 'sélection de la plage de cellules - attention à ne pas oublier le "Set"
    ValeursUniques = ValeursUniquesDansPlage(MaPlage) 'appel de la fonction "ValeursUniquesDansPlage"
    
    MsgBox ValeursUniques 'affiche le nombre des valeurs uniques dans la plage des cellules
    Exit Sub
TestErreur:
    MsgBox "Une erreur s'est produite..."
End Sub

Calculer les valeurs différentes dans une colonne

Un cas plus particulier est le calcul des valeurs uniques (différentes) dans une colonne entière. Rien de plus simple! La fonction ValeursUniquesDansPlage fera l'affaire sans problème. Il suffit d'adapter la valeur de la plage de cellules. Donc par exemple: Pour compter les valeurs différentes dans la colonne B, l'argument à utiliser sera "B:B". L'exemple complet se trouve dans le code suivant.

Remarque: sachez que l'utilisation de cette formule avec des colonnes entières peut être gourmande en ressources – rien d'étonnant, vu qu'une colonne dans Excel 2007 et suivants contient 1.048.576 de cellules à vérifier

Sub ExempleValeursUniquesDansColonne()
'par: http://excel-malin.com

    On Error GoTo TestErreur
    Dim MaPlage As Range
    
    Set MaPlage = ActiveSheet.Range("B:B") 'le calcul se fera dans toute la colonne "B" - attention à ne pas oublier le "Set"
    ValeursUniques = ValeursUniquesDansPlage(MaPlage) 'appel de la fonction "ValeursUniquesDansPlage"
    
    MsgBox "La colonne ""B"" contient: " & ValeursUniques & " valeurs différentes" 'affiche le nombre des valeurs uniques dans la plage des cellules
    Exit Sub
TestErreur:
    MsgBox "Une erreur s'est produite..."
End Sub

Vous voici donc équipés pour une analyse de données rapide et efficace

Pour aller plus loin

12 0



Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.