Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Copier cellule jusqu'à prochaine cellule non vide sur la plage sélectionnée

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

CHL1234

XLDnaute Nouveau
Bonjour,
Je suis novice en VBA, et je cherche à créer une macro qui me permette de copier le contenu d'une cellule jusqu'à la prochaine cellule non vide (sur la même ligne), le tout sur une plage donnée : par exemple, si seules les cellules A1, A5 et A10 sont remplies, et que je sélectionne la plage A1:A20, je voudrais que A1 soit répété jusqu'en A4, A5 jusqu'en A9 et A10 jusqu'en A20.
J'ai trouvé plusieurs lignes de discussions similaires sur divers forums (https://www.excel-downloads.com/threads/recopie-cellule-jusqua-la-suivante-non-vide-vba.87912/ ou https://forum.excel-pratique.com/ex...a-la-derniere-non-vide-et-repeter-t61497.html pour n'en citer que deux). Toutefois, aucun ne me permet de faire agir la macro seulement sur la plage donnée.
Sauriez-vous m'aider ?
Merci d'avance pour vos retours !
 
bonjour,

A tester sur une sélection en colonne.

VB:
Sub RemplirBas2()
    Dim tbl As Variant
    Dim i As Integer
    tbl = Selection.Columns(1).Value ' Valeurs dans un tableau mémoire
    '
    ' Parcours de chaque valeur
    For i = 2 To UBound(tbl)
       '
       ' si la valeur est vide, prendre la précédente
        If IsEmpty(tbl(i, 1)) Then tbl(i, 1) = tbl(i - 1, 1)
    Next
    '
    'Recharger la sélection par les nouvelles valeurs
    Selection.Columns(1).Value = tbl
End Sub

Limitation : la première cellule de la sélection ne doit pas être vide.

Ou celle-ci avec les méthodes VBA
Code:
Sub RemplirBas()
    Dim plg As Range, c1 As Range, c2 As Range
    '
    ' Récupérer les cellules avec constantes
    On Error Resume Next
    Set plg = Selection.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0
    '
    ' si existent
    If Not plg Is Nothing Then
        '
        ' parcourir chacune d'entre elles
        For Each c1 In plg
            '
            ' récupérer la dernière cellule vide de la plage de c1
            Set c2 = c1.End(xlDown).Offset(-1)
            '
            ' Vérifiez qu'on a pas dépassé la sélection
            If c2.Row > Selection.Row + Selection.Rows.Count - 1 Then Set c2 = Selection.Cells(Selection.Cells.Count)
            '
            ' si la ligne de c2 est supérieure à la ligne de c1 alors on remplit
            If c2.Row > c1.Row Then Range(c1, c2).FillDown
        Next
    End If
End Sub




cordialement
 
Dernière édition:
Bonjour,
Merci beaucoup pour votre aide ! Le premier semble fonctionner, donc merci infiniment !
En revanche, le second ne fonctionne pas (la première valeur de la colonne écrase les suivantes).
J'ai une question complémentaire qui empêche la macro (donc le premier code) de fonctionner pleinement : pour reprendre l'exemple de mon premier mail, j'ai isolé les valeurs A1, A5 et A10 au moyen d'une formule de type Si B1 = quelque chose , alors B1, sinon "". Puis j'ai copié-collé la colonne A en valeurs. Pour la macro, il semble que "" veuille dire qu'il y a quelque chose dans la cellule, car la copie s'arrête. Sauriez-vous pourquoi ?
 
Bonjour,

Essayez le test suivant :

VB:
 If tbl(i, 1)="" Then tbl(i, 1) = tbl(i - 1, 1)

Et si cela ne fonctionne pas payez nous le luxe d'un classeur exemple !

Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…