La recherche de la dernière cellule utilisée (ou la dernière cellule non-vide) dans une Feuille Excel est une des opérations clés en VBA. Trouver cette dernière cellule permet de limiter les itérations inutiles, d'optimiser les plages à copier ou formater, et d'améliorer la performance globale des macros.
Dans cet article, vous allez découvrir comment trouver la dernière cellule utilisée avec VBA, ainsi que les différentes interprétations de ce concept, car il peut varier selon votre contexte de travail.
Notion de la "dernière cellule utilisée"
L’expression "dernière cellule utilisée" peut avoir plusieurs interprétations en fonction de ce que vous cherchez à faire. Il est donc important de savoir quel type de dernière cellule vous voulez identifier avant de choisir le bon code VBA.
Voici les principales interprétations :
- La dernière cellule de la Feuille contenant une valeur ou une formule.
- La dernière cellule de la Feuille contenant uniquement une valeur (les formules renvoyant "" ne sont pas prises en compte).
- La dernière cellule utilisée dans une colonne spécifique.
- La dernière cellule utilisée dans une ligne spécifique.
VBA : trouver la dernière cellule utilisée
Le code suivant permet de trouver la dernière cellule utilisée dans une feuille, qu'elle contienne une valeur ou une formule (peu importe si la formule affiche un résultat vide).
1 |
DerniereCellule_Ligne = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlFormulas).Row |
1 |
DerniereCellule_Colonne = Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, LookIn:=xlFormulas).Column |
1 |
DerniereCellule_AdresseAbsolue = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlFormulas).Address |
1 |
DerniereCellule_Adresse = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlFormulas).Address(RowAbsolute:=False, ColumnAbsolute:=False) |
VBA : trouver la dernière cellule contenant une valeur
Pour trouver la dernière cellule qui contient une valeur non-vide (excluant les cellules avec des formules renvoyant des chaînes vides), utilisez cette variante. Cette méthode permet d’optimiser vos boucles et copier/coller uniquement les cellules pertinentes.
Le changement ici est dans l’argument LookIn
, qui sera xlValues
.
1 |
DerniereCellule_Ligne = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row |
1 |
DerniereCellule_Colonne = Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, LookIn:=xlValues).Column |
1 |
DerniereCellule_AdresseAbsolue = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Address |
1 |
DerniereCellule_Adresse = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Address(RowAbsolute:=False, ColumnAbsolute:=False) |
La dernière ligne utilisée dans une colonne donnée
Pour trouver la dernière ligne utilisée dans une colonne spécifique, voici deux méthodes :
1 |
DerniereLigneUtilisee = Range("X" & Rows.Count).End(xlUp).Row 'où X est la colonne donnée |
ou bien :
1 |
DerniereLigneUtilisee = Cells(Rows.Count, X).End(xlUp).Row 'où X est le numéro de la colonne donnée (ex : 3 pour la colonne "C") |
Vous trouverez aussi cette méthode sous forme :
DerniereLigneUtilisee = Range("A65536").End(xlUp).Row
Cette version est moins recommandée, car elle est dépendante du nombre de lignes d’Excel (qui peut varier selon la version). Préférez donc l’instruction suivante, compatible avec toutes les versions d’Excel :
DerniereLigneUtilisee = Range("A" & Rows.Count).End(xlUp).Row
Attention : si aucune cellule n’est utilisée dans la colonne, le résultat sera 1 et non 0.
La dernière colonne utilisée dans une ligne donnée
Le principe est identique à celui utilisé pour les lignes. Voici le code :
1 |
DerniereColonneUtilisee = Cells(X, Columns.Count).End(xlToLeft).Column 'où X est le numéro de la ligne |
Exemple pour la ligne 156 :
1 |
MaDerniereColonneUtilisee = Cells(156, Columns.Count).End(xlToLeft).Column |
Attention : si aucune cellule n’est utilisée dans la ligne, le résultat sera 1.
Utilisation de la méthode .Find
pour les commentaires
La méthode .Find
permet également de chercher des cellules contenant des commentaires en utilisant l’argument LookIn:=xlComments
.
1 |
DerniereCelluleAvecCommentaire = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlComments).Address |
Pour plus d’informations, vous pouvez consulter la documentation Microsoft.
Conclusion
Vous disposez désormais de plusieurs méthodes VBA pour trouver la dernière cellule utilisée ou non-vide, que ce soit dans une feuille, une colonne ou une ligne. Ces codes sont simples et efficaces, et peuvent facilement être intégrés dans vos macros pour optimiser vos traitements de données.
Ressources supplémentaires
Si vous avez apprécié ce tutoriel, voici quelques articles supplémentaires qui pourraient vous être utiles.
- Liste de toutes les fonctions dans VBA – bien pratique!
- Formation VBA en ligne: "VBA: droit au but" qui est tout à fait gratuite…
- Utiliser les fonctions Excel dans une macro VBA
- Travailler avec les dates en VBA
- VBA: Manipulation des fichiers de tout type
10 commentaires sur “VBA: trouver la dernière cellule utilisée”
Merci pour ces explications.
Salut,
Merci pour ces formules, elles m'ont bien aidé !
Cependant, je trouve que pour la dernière colonne, la formule :
DerniereCellule_Colonne = Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, LookIn:=xlValues).Column
Est plus adaptée ( On obtient ainsi la dernière colonne totale, pas la dernière colonne de la dernière ligne )
Bonne continuation
Bonjour,
vous avez tout à fait raison. C'était un copier/coller modifié seulement partiellement. Mea culpa.
J'ai corrigé le code.
Merci à vous pour cette remarque!
merci
Bonjour,
Je voudrais faire des recherches dans une boucle sur plusieurs feuilles néanmoins les éléments ne sont pas forcément présent sur toutes les feuilles et cela me renvoi une erreur, es possible de contourner cela ?
j'ai essayé on error mais sans succès :/
"l = Cells.Find(Sheets("test").Cells(10, j), SearchOrder:=xlByRows, SearchDirection:=xlNext, LookIn:=xlValues).Row"
l étant une variable integer
cordialement
Bonjour,
Je me permets de vous relancer, je suis en effet bloqué sur ce point pour le reste de mon projet.
Vous remerciant encore
Cordialement
Bonjour jeremy…
Voici le code qui fera l'affaire:
Comme je ne connais pas le reste du code, j'ai mis juste j = 8
Si la valeur n'est pas trouvé, j'ai mis "l = 0" Vous pouvez bien sûr le modifier selon vos besoins
A la fin, je mets un MsgBox pour afficher le "l" – là aussi, adaptez selon votre besoin
J'espère que cela répond à votre question et que cela va débloquer votre projet.
Cordialement, Martin
Bonjour,
Un grand merci, c'est parfait !
L'adaptation à mon code c'est faite immédiatement.
Cordialement,
Jérémy
Super… 😉
Avec plaisir…
Bonjour,
merci bcp pour ces explications très claires. Je débute en VBA et je cherchais cette information partout.
L'info est synthétique et très bien expliquée.
merci encore