J'utilise ce code pour obtenir la plage utilisée dans une colonne de table Listobject mais je me demandais s'il y avait une meilleure façon de faire cela avec Listobjects comme code est sujet aux erreurs.
Dim Lastrow As Integer
Dim rng as Range
Lastrow = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
Set rng = Range("B12:B" & Lastrow)
4 Réponses :
De cette manière, vous éviterez les erreurs car vos erreurs proviennent de la ActiveSheet qui peuvent être différentes si l'utilisateur interagit:
Dim Lastrow As Long 'don't use Integer is a Long cut to the integer
Dim rng As Range
With ThisWorkbook.Sheets("MySheet") 'Change MySheet to your working sheet name
Lastrow = .Cells(.Rows.Count, 2).End(xlUp).Row
Set rng = .Range("B12:B" & Lastrow)
End With
De cette façon, toutes vos données seront proviennent de la feuille MySheet à la fois le LastRow et le rng . Vous pouvez remarquer que j'utilise un point devant Cells , Rows.count et Range . Cela signifie qu'il fait référence à la feuille sur la ligne: With ThisWorkbook.Sheets ("MySheet")
Ce qui suit sélectionnera la plage de vos données dans la colonne 2 du tableau
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Selecting Areas Of A Table With VBA â
â âââââââââââââââââââââââââââââââââââââââ¦ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â Select â VBA Coding â
â âââââââââââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â Entire Table â ActiveSheet.ListObjects("Table1").Range.Select â
â âââââââââââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â Table Header Row â ActiveSheet.ListObjects("Table1").HeaderRowRange.Select â
â âââââââââââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â Table Data â ActiveSheet.ListObjects("Table1").DataBodyRange.Select â
â âââââââââââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â Third Column â ActiveSheet.ListObjects("Table1").ListColumns(3).Range.Select â
â âââââââââââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â Third Column (Data Only) â ActiveSheet.ListObjects("Table1").ListColumns(3).DataBodyRange.Select â
â âââââââââââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â Select Row 4 of Table Data â ActiveSheet.ListObjects("Table1").ListRows(4).Range.Select â
â âââââââââââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â Select 3rd Heading â ActiveSheet.ListObjects("Table1").HeaderRowRange(3).Select â
â âââââââââââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â Select Data point in Row 3, Column 2 â ActiveSheet.ListObjects("Table1").DataBodyRange(3, â
â â 2).Select â
â âââââââââââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â Subtotals â ActiveSheet.ListObjects("Table1").TotalsRowRange.Select â
â â â
ââââââââââââââââââââââââââââââââââââââââ©ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Il existe un guide très complet sur la façon de sélectionner différentes parties du ListObject ici
Dim tbl as ListObject
Dim rng as Range
set tbl = ActiveSheet.ListObjects("YourTableName")
set rng = tbl.ListColumns(2).DataBodyRange
Tom, je pense que cela sélectionne même les cellules vides dans la colonne 2 du tableau?
J'essaie de transmettre votre réponse à une liste combobox de formulaire utilisateur mais ne semble pas fonctionner
@JoannaMikalai Oui, ça ira - comme le vôtre ci-dessus. Si vous voulez des cellules non vides, vous pouvez essayer d'utiliser set rng = tbl.ListColumns (2) .DataBodyRange.SpecialCells (xlCellTypeCons tants) qui, selon la façon dont vos données sont, peuvent omettre les cellules vides. Comment le transmettez-vous à la ComboBox.List ? Cela peut être dû au fait que vous lui passez l'objet range. Essayez plutôt d'utiliser ComboBox.List = rng.Value2
Sub F()
Dim tbl As ListObject
Dim col As ListColumn
Set tbl = ActiveSheet.ListObjects("Table1")
Set col = tbl.ListColumns(2)
End Sub
J'utilise ceci:
Dim lastrow as Long, tbl As ListObject
With Sheets("Sheet1")
Set tbl = .ListObjects("MyTable")
With tbl
'Siddharth Rout, Feb 2018
'http://www.siddharthrout.com/index.php/2018/02/10/find-last-row-and-last-column/
'https://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba
lastrow = .ListColumns(1).Range.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
.DataBodyRange(lastrow, 1).Resize(1, 3) = Array(Date, "some text", "some text")
End With
Set tbl = Nothing
End With