Utilisation de Offset dans une boucle

rudolphe

XLDnaute Nouveau
Bonjour
J'ai une plage de cellules ("A1:H1") '
et juste en dessous une autre plage ("A2:H2")
Je voudrai qu'une boucle parcourt la plage ("A2:H2") et lorsqu'elle lorsqu'elle rencontre une cellule vide
elle copie la valeur située juste au dessus et la colle .
dit autrement si A2 est vide alors copier A1 en A2 si A2 n'est pas vide , ne rien faire
et ainsi de suite avec B2, C2...........jusqu'à H2

Mon début de code

Sub boucle()

Dim ruru As Range
For Each ruru In Range("A2:H2")
If ruru.Value = "" Then
ActiveCell.Offset(-1,0).Select
Selection Copy
Active sheet .Paste
End If

Next ruru

End Sub

Et ça marche pas!

Merci à vous
Rudolphe
 

Efgé

XLDnaute Barbatruc
Bonjour rudolphe

Une proposition au plus simple, mais pas au plus rapide pour une grande quantité de cellules.
VB:
Sub ruru_2()
Dim i&, j& 'deux variables type Long pour les boucles
Dim Ligne& ' une variable pour la dernière ligne remplie

With Sheets("Feuil1") 'Nom de feuille à adapter
    'on trouve la ligne de la dernière cellule remplie de la feuille
    'Si tu connais la ligne (X) tu mets Ligne = X
    Ligne = .Cells.Find("*", .Cells(.Rows.Count, .Columns.Count), xlValues, , 1, 2, 0).Row
    For i = 2 To Ligne 'pour chaque ligne
        For j = 1 To 8 'pour les colonnes de A à H
            'Si la cellule ligne i colonne J est vide, on la remplie avec la valeur de la cellule au-dessus (ligne i-1
            If Cells(i, j).Value = "" Then Cells(i, j).Value = Cells(i - 1, j).Value
        Next j 'prochaine colonne
    Next i 'Prochaine ligne
End With
End Sub
Cordialement
 

rudolphe

XLDnaute Nouveau
Bonjour rudolphe

Une proposition au plus simple, mais pas au plus rapide pour une grande quantité de cellules.
VB:
Sub ruru_2()
Dim i&, j& 'deux variables type Long pour les boucles
Dim Ligne& ' une variable pour la dernière ligne remplie

With Sheets("Feuil1") 'Nom de feuille à adapter
    'on trouve la ligne de la dernière cellule remplie de la feuille
    'Si tu connais la ligne (X) tu mets Ligne = X
    Ligne = .Cells.Find("*", .Cells(.Rows.Count, .Columns.Count), xlValues, , 1, 2, 0).Row
    For i = 2 To Ligne 'pour chaque ligne
        For j = 1 To 8 'pour les colonnes de A à H
            'Si la cellule ligne i colonne J est vide, on la remplie avec la valeur de la cellule au-dessus (ligne i-1
            If Cells(i, j).Value = "" Then Cells(i, j).Value = Cells(i - 1, j).Value
        Next j 'prochaine colonne
    Next i 'Prochaine ligne
End With
End Sub
Cordialement

Çà marche du tonner !
Merci Efgé
 

Statistiques des forums

Discussions
312 164
Messages
2 085 869
Membres
103 007
dernier inscrit
salma_hayek