Traitement des cellules vides

Exemple 1

À partir de ceci :

0021
 
006
 
005

Renvoie cela :

0021
0021
006
006
005
Sub RemplitVide()
Dim ligneFin
ligneFin = DetermineDerniereLigne(1)
ActiveSheet.Cells(1, 1).Select
For Each ColonneA In ActiveSheet.Range(Cells(1, 1), Cells(ligneFin, 1))
    If IsEmpty(ColonneA) Then
        ColonneA.NumberFormat = "@"
        ColonneA.Value = ColonneA.Offset(-1, 0).Value
    End If
Next
End Sub
Function DetermineDerniereLigne(Colonne As Integer)
    Dim ligneFin
    ligneFin = Columns(Colonne).Find("*", , , , xlByColumns, xlPrevious).Row
    DetermineDerniereLigne = ligneFin
End Function

Exemple 2

À partir de ceci :

a
b
 
c
d

Renvoie cela :

a
b
c
d
Sub CompacteColonne()
    Dim ligneFin, Colonne, Ligne, n
    Dim Cellule
    Colonne = 1
    Ligne = 1
    Tableau = Array()
    ligneFin = ActiveSheet.Columns(Colonne).Find("*", , , , xlByColumns, xlPrevious).Row
    For Each Cellule In ActiveSheet.Range(Cells(Ligne, Colonne), Cells(ligneFin, Colonne))
        If Not IsEmpty(Cellule) Then
            Push Cellule.Value, Tableau
            Cellule.Value = ""
        End If
    Next
    For n = 0 To UBound(Tableau)
        ActiveSheet.Cells(n + 1, 1).Value = Tableau(n)
    Next
End Sub
Function Push(Valeur As Variant, Tabl As Variant)
    If IsEmpty(Tabl) Then
        Tabl(0) = Valeur
    Else
        ReDim Preserve Tabl(UBound(Tabl) + 1)
        Tabl(UBound(Tabl)) = Valeur
    End If
End Function