Public Function NbVide2(Tableau As Range, NomColonne As String)
Dim Plage As Range, CellEnTete As Range, t, nbr As Long, x, i As Long
'définit la plage: que tableau soit une plage ordinaire ou bien un tableau structuré-
On Error Resume Next
Set x = Tableau.Cells(1, 1).ListObject
If x Is Nothing Then Set Plage = Tableau Else Set Plage = x.Range
'Recherche la position en terme de colonne de l'intitulé de colonne définie
Set CellEnTete = Plage.Rows(1).Find(What:=NomColonne, LookAt:=xlWhole)
On Error GoTo 0
If CellEnTete Is Nothing Then NbVide2 = CVErr(xlErrRef): Exit Function 'si en-tete non trouvée
'tableau des données de la colonne à considérer
t = Plage.Columns(CellEnTete.Column - Tableau.Column + 1) 'transfert des valeurs de la colonne dans un tableau de type type Array
'on passe les cellules vides du bas (on s'arrête à 2 => l'en-tête est excluse)
For i = UBound(t) To 2 Step -1
If t(i, 1) <> "" Then Exit For
Next i
'on compte les cellules non vides
For i = i To 2 Step -1: nbr = nbr + IIf(t(i, 1) = "", 1, 0): Next
NbVide2 = nbr
End Function