27 votes

Trouver le nombre de colonnes non vides dans une feuille Excel en utilisant VBA

Comment trouver le nombre de colonnes utilisées dans une feuille Excel à l'aide de VBA ?

Dim lastRow As Long
lastRow = Feuil1.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 donné ?

51voto

Jean-François Corbett Points 16957

Votre code d'exemple obtient le numéro de ligne de la dernière cellule non vide dans la colonne actuelle, et peut être réécrit comme suit :

Dim lastRow As Long
lastRow = Feuil1.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 dans la ligne actuelle est :

Dim lastColumn As Long
lastColumn = Feuil1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox lastColumn

Cela pourrait également vous être utile :

With Feuil1.UsedRange
    MsgBox .Rows.Count & " lignes et " & .Columns.Count & " colonnes"

mais sachez que si la colonne A et/ou la ligne 1 sont vides, alors cela ne donnera pas le même résultat que les autres exemples ci-dessus. Pour en savoir plus, consultez la propriété UsedRange.

8voto

iDevlop Points 9770

La réponse de Jean-François Corbett est parfaite. Pour être exhaustif, j'aimerais juste ajouter que avec certaines restrictions vous pourriez é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 (du moins jusqu'à ce que vous rouvriez le classeur).

3voto

Il est possible que vous ayez oublié une balise feuille1 quelque part avant le columns.count, sinon il comptera les colonnes de la feuille active et non de la feuille1.

Aussi, ne devrait-il pas être xltoleft au lieu de xltoright? (D'accord, il est très tard ici, mais je pense savoir ma droite de ma gauche) Je l'ai vérifié, vous devez écrire xltoleft.

lastColumn = Feuille1.Cells(1, feuille1.Columns.Count).End(xlToleft).Column

3voto

Noel Cole Points 21

C'est la réponse:

numCols = objSheet.UsedRange.Columns.count

Documentation de la propriété UsedRange

0voto

kadrleyn Points 31

Résultat est affiché dans le code suivant comme numéro de colonne (8,9, etc.) :

Dim lastColumn As Long
lastColumn = Feuil1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox lastColumn

Résultat est affiché dans le code suivant comme lettre (H,I, etc.) :

Dim lastColumn As Long
lastColumn = Feuil1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox Split(Feuil1.Cells(1, lastColumn).Address, "$")(1)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X