web-dev-qa-db-fra.com

Recherche du nombre de colonnes non vides dans une feuille Excel à l'aide de VBA

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? 

20
niko

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.

37

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).

8
Patrick Honorez

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
2
Patrick Lepelletier

Voici la réponse:

numCols = objSheet.UsedRange.Columns.count

Documentation de la propriété UsedRange

2
Noel Cole

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)
0
kadrleyn