VBA dernière cellule non vide données en cascades

bonjour le forum,

je souhaiterais obtenir la dernière cellule non vide d'une plage de donné en vba. Actuellement j'utilise 2 fonctions directement dans le classeur (avec Max(si(estvide...)colonne(...)) )mais j'aimerais pouvoir avoir l'ensemble sur le code.

Je connais l'astuce en passant avec .end(xlup).row pour avoir le dernière ligne mais j'arrive à l'utiliser uniquement en renseignant la colonne ou se trouve la valeur, sauf que ici les données sont en cascade donc je ne connait pas à l'avance ni la colonne ni la ligne de la dernière valeur.

un code et fichier exemple:

Sub copy()
With Range([A2], Cells([A1].Value, [B1].Value)) 'cellules comprenant le numéro de la dernière ligne et colonne

    .Borders(xlEdgeTop).LineStyle = xlDash
    .Borders(xlEdgeBottom).LineStyle = xlDash
    .Borders(xlInsideHorizontal).LineStyle = xlDash
    .Font.Size = 1
    .copy
    For e = 0 To [D1].Value - 2
        Cells(2, [B1].Value + 1).Select
        ActiveSheet.Paste
    Next e
End With
End Sub
5fofo.xlsm (15.83 Ko)

Bonjour,

Un truc du genre ?

Sub copy()
With Range(Cells(2, 1), Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count)) 'cellules comprenant le numéro de la dernière ligne et colonne

    .Borders(xlEdgeTop).LineStyle = xlDash
    .Borders(xlEdgeBottom).LineStyle = xlDash
    .Borders(xlInsideHorizontal).LineStyle = xlDash
    .Font.Size = 1
    .copy
    For e = 0 To [D1].Value - 2
        Cells(2, [B1].Value + 1).Select
        ActiveSheet.Paste
    Next e
End With
End Sub

Bonjour,

Une autre méthode pour trouver la dernière ligne sans préciser la colonne via la méthode find de l'objet range :

Sub DER_L()
Dim LR%
LR = Cells.Find("*", [A1], xlFormulas, xlPart, xlByRows, xlPrevious, False).Row
End Sub

Cdlt,

Bonjour Joyeux noël, Ergotamine

Merci pour vos retour

@JoyeuxNoël: C'est pas mal, mais si j'ai bien comprit .UsedRange est utiliser pour détecter les cellules utilisées et étrangement il détecte + de lignes et + de colonne malgré quel soit vide (peut être précédemment remplis puis vidé). En bref je suis obligé de supprimer des lignes et des colonnes pour correctement l'adapter, ce qui est impossible sur mon fichier final.

@Ergotamine: Pas mal non plus, j'ai réussi à l'adapter à mon exemple, cependant dans mon fichier de base les cellules à copier ne commence pas en colonne A et je n'arrive pas à l'adapter correctement

Sub copy()
Dim LR%
LR = Cells.Find("*", [D2], xlFormulas, xlPart, xlByRows, xlPrevious, False).Row
With Range(Cells(2, 4), Cells(LR, Columns.Count).End(xlToLeft).Columns)
    .Borders(xlEdgeTop).LineStyle = xlDash
    .Borders(xlEdgeBottom).LineStyle = xlDash
    .Borders(xlInsideHorizontal).LineStyle = xlDash
    .Font.Size = 1
    .copy
    For e = 0 To [G1].Value - 2
    Cells(LR, Columns.Count).End(xlToLeft).Select
        Cells(2, ActiveCell.Column + 1).Select
        ActiveSheet.Paste
    Next e
End With
End Sub

Ci-joint l'exemple modifier plus représentatif de mon fichier original:

3fofo.xlsm (14.70 Ko)

Bonjour,

Dans ce cas il faut restreindre la plage de recherche de l'objet range, par exemple pour renvoyer la 8ème ligne, il faut exclure les colonnes A et B donc :

Dim LR%
LR = Columns("D:W").Find("*", [D1], xlFormulas, xlPart, xlByRows, xlPrevious, False).Row

Cdlt,

Ok nickel, ça fonctionne bien et en plus je peut adapter la plage facilement. Merci bien !

Rechercher des sujets similaires à "vba derniere vide donnees cascades"