web-dev-qa-db-fra.com

Excel VBA - Recherche de la dernière colonne avec des données

J'ai trouvé cette méthode pour trouver les dernières données contenant une ligne dans une feuille:

ws.Range("A65536").End(xlUp).row

Existe-t-il une méthode similaire pour rechercher la dernière donnée contenant une colonne dans une feuille?

Merci.

46
Neat Machine

Beaucoup de façons de le faire. Le plus fiable est trouver.

Dim rLastCell As Range

Set rLastCell = ws.Cells.Find(What:="*", After:=ws.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)

MsgBox ("The last used column is: " & rLastCell.Column)

Si vous voulez trouver la dernière colonne utilisée dans une ligne particulière, vous pouvez utiliser:

Dim lColumn As Long

lColumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column

Utilisation de la gamme utilisée (moins fiable):

Dim lColumn As Long

lColumn = ws.UsedRange.Columns.Count

L'utilisation de la plage utilisée ne fonctionnera pas si vous n'avez aucune donnée dans la colonne A. Vous trouverez ci-après un autre problème avec la plage utilisée:

Voir Ici concernant la réinitialisation de la plage utilisée.

84
Reafidy

Je sais que c'est vieux, mais j'ai testé cela de nombreuses façons et cela ne m'a pas encore laissé tomber, à moins que quelqu'un ne puisse me dire le contraire.

Numéro de ligne

Row = ws.Cells.Find(What:="*", After:=[A1] , SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

Lettre de colonne

ColumnLetter = Split(ws.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Cells.Address(1, 0), "$")(0)

Numéro de colonne

ColumnNumber = ws.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
13
xn1

Je pense que nous pouvons modifier le code UsedRange de @ Readify's ci-dessus pour obtenir la dernière colonne utilisée, même si les colonnes de départ sont vides ou non.

Donc, ce lColumn = ws.UsedRange.Columns.Count modifié pour

ce lColumn = ws.UsedRange.Column + ws.UsedRange.Columns.Count - 1 donnera toujours des résultats fiables

enter image description here

?Sheet1.UsedRange.Column + Sheet1.UsedRange.Columns.Count - 1

Au-dessus de la ligne, on obtient 9 dans la fenêtre immédiate.

2
Prison Mike

Essayez d’utiliser le code après avoir activé la feuille:

Dim J as integer
J = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

Si vous utilisez uniquement Cells.SpecialCells(xlCellTypeLastCell).Row, le problème sera que les informations xlCellTypeLastCell ne seront pas mises à jour à moins que vous ne fassiez une action "Enregistrer le fichier". Mais utiliser UsedRange mettra toujours à jour les informations en temps réel.

2
Peter

Voici quelque chose qui pourrait être utile. En sélectionnant la colonne entière en fonction d'une ligne contenant des données, dans ce cas, j'utilise la 5ème ligne:

Dim lColumn As Long

lColumn = ActiveSheet.Cells(5, Columns.Count).End(xlToLeft).Column
MsgBox ("The last used column is: " & lColumn)
0
dapaz