Comment trouver le nombre de colonnes utilisées dans une feuille Excel avec VBA?
Dim lastRow As Long
lastRow = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
MsgBox lastRow
En utilisant le VBA ci-dessus, je suis capable de trouver le nombre de lignes. Mais comment trouver le nombre de colonnes dans mon fichier Excel?
Votre exemple de code obtient le numéro de ligne de la dernière cellule non vide de la colonne actuelle et peut être récrit comme suit:
Dim lastRow As Long
lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
MsgBox lastRow
Il est alors facile de voir que le code équivalent pour obtenir le numéro de colonne de la dernière cellule non vide de la ligne en cours est:
Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox lastColumn
Cela peut aussi vous être utile:
With Sheet1.UsedRange
MsgBox .Rows.Count & " rows and " & .Columns.Count & " columns"
End With
mais sachez que si la colonne A et/ou la ligne 1 sont vides, cela ne donnera pas le même résultat que les autres exemples précédents. Pour plus d'informations, consultez la propriété UsedRange
.
La réponse de Jean-François Corbett est parfaite. Pour être exhaustif, je voudrais juste ajouter que avec certaines restrictions vous pouvez également utiliser UsedRange.Columns.Count
ou UsedRange.Rows.Count
.
Le problème est que UsedRange n'est pas toujours mis à jour lors de la suppression de lignes/colonnes (au moins jusqu'à la réouverture du classeur).
Il est possible que vous ayez oublié un sheet1
à chaque fois quelque part avant le columns.count
ou il comptera les colonnes activesheet
et non les sheet1
.
En outre, ne devrait-il pas être xltoleft au lieu de xltoright? (Ok il est très tard ici, mais je pense connaître ma droite de gauche à droite) Je l’ai vérifiée, vous devez écrire xltoleft.
lastColumn = Sheet1.Cells(1, sheet1.Columns.Count).End(xlToleft).Column
Le résultat est indiqué dans le code suivant par numéro de colonne (8,9 etc.):
Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox lastColumn
Le résultat est indiqué dans le code suivant par lettre (H, I, etc.):
Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox Split(Sheet1.Cells(1, lastColumn).Address, "$")(1)