Macro remplir cellule vide par la valeur précédente

David066

XLDnaute Nouveau
Bonjour à tous,


mon problème est simple, y aurait-il un moyen de remplir les
cellules vides d'un tableau par la valeur de la cellule qui précède?
Soit par macro ou formule, en sachant que mon fichier est assez important
faisant 750 colonnes et 264 lignes.


Cordialement
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Macro remplir cellule vide par la valeur précédente

Bonjour David,

avec ce code:
Code:
Dim cellule As Range
For Each cellule In Range("A2:ABV264")
If cellule.Value = "" Then
cellule.Value = cellule.Offset(-1, 0).Value
End If
Next cellule

à+
Philippe
 

Pierrot93

XLDnaute Barbatruc
Re : Macro remplir cellule vide par la valeur précédente

Bonjour David, Philippe:)

une autre approche :
Code:
Sub test()
On Error Resume Next
With Range("A2:ABV264")
    .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
    .Value = .Value
End With
On Error GoTo 0
End Sub

bonne soirée
@+
 

Jam

XLDnaute Accro
Re : Macro remplir cellule vide par la valeur précédente

Salut David, Philippe, Pierrot,

Une autre approche. Le code est plus long mais très efficace.
J'y ai intégré la possibilité de le faire dans les 2 sens (vers le bas ou vers le haut).
Il suffit juste de sélectionner la plage et de lancer la macro.

VB:
'********************************************************************
' Remplace les cellules vides par la valeur de la première
' cellule non vide immédiatement au-dessus ou au-dessous.
' Cette procédure parcours la sélection de HAUT en BAS et inversement
' ATTENTION : Cette procédure utilise la sélection en cours
'********************************************************************
Sub FillEmptyLinesWithValue()
Dim i As Long
Dim j As Long
Dim nbColonnes As Long
Dim Start As Long
Dim Finish As Long
Dim TopBot As Byte
Dim Direction As Integer
Dim MyArray, Valeur As Variant
Dim MyRange As Range
Dim Msg As String

On Error GoTo GestionErreur

With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With

Set MyRange = Selection
With MyRange
    nbColonnes = .Columns.Count
    MyArray = .Value
End With

Msg = "Pour effectuer un remplacement de " & vbCr
Msg = Msg & "HAUT en BAS cliquer sur le bouton OUI" & vbCr
Msg = Msg & "BAS en HAUT cliquer sur le bouton NON"
TopBot = MsgBox(Msg, vbYesNoCancel + vbQuestion, TITLE)
Select Case TopBot
    Case vbCancel
        End
    Case vbYes
        Start = 1: Finish = UBound(MyArray, 1): Direction = 1
    Case Else
        Start = UBound(MyArray, 1): Finish = 1: Direction = -1
End Select
For i = 1 To nbColonnes
    Valeur = ""
    For j = Start To Finish Step Direction
        Select Case VarType(MyArray(j, i))
            Case vbEmpty
                MyArray(j, i) = Valeur
            Case Else
                Valeur = MyArray(j, i)
        End Select
    Next
Next
MyRange.Value = MyArray
GestionErreur:
With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With
End Sub

A+

PS./ J'ai aussi une variante qui recopie les formules au cas où :)
 

Discussions similaires

Statistiques des forums

Discussions
312 427
Messages
2 088 307
Membres
103 813
dernier inscrit
mehdifr