Private Sub BoutonTest_Click()
MsgBox compteVide(Range("A4:A2012").Cells)
End Sub
Private Function compteVide$(Plg As Range)
Dim oPlg As Range, vPlg As Range, vArs As Range, Msg$, n&, s$
Application.Volatile
Set oPlg = Intersect(Plg, Columns(Plg(1).Column).Resize(Cells(Me.Rows.Count, Plg(1).Column).End(xlUp).Row))
On Error Resume Next
If Not oPlg Is Nothing Then Set vPlg = Intersect(oPlg, oPlg.SpecialCells(xlCellTypeBlanks))
On Error GoTo 0
Set oPlg = Nothing
If vPlg Is Nothing Then
Msg = "Aucune cellule vide."
Else
For Each vArs In vPlg.Areas
n = n + vArs.Count
s = s & vArs.Address(0, 0) & ","
If Len(s) < 60 Then s = s & " " Else Msg = Msg & s & vbLf: s = ""
Next vArs
Msg = n & " cellule" & IIf(n > 1, "s", "") & " vide" & IIf(n > 1, "s", "") & " :" & vbLf & vbLf & Left$(Msg & s, Len(Msg & s) - 2) & "."
End If
Set vPlg = Nothing
compteVide = Msg
End Function