Il n'est parfois pas évident de trouver le numéro d'une colonne Excel (par ex. 45 pour la colonne "AS") ni d'extraire le nom de la colonne (par ex. "AS") à partir d'une adresse de cellule.
Surtout que depuis la version 2007 d'Excel (c'est à dire dans Excel 2007 à 2021/365), le nombre de colonnes a atteint le nombre impressionnant de 16.384 (détail de toutes les versions d'Excel). Pourtant, il s'agit d'une conversion très importante – pour l'utilisation des Range
et pour les itérations (loops) dans VBA.
Voici donc une série des fonctions VBA qui vous permettront de convertir facilement les noms de colonnes et leur numéros. Pour chacun des deux types de conversion (numéro -> nom; nom -> numéro), vous trouverez deux codes VBA: la fonction la plus simple pour faire la conversion en VBA et le code de l'algorithme (expression mathématique du calcul) qui vous permettra de transposer cette fonctionnalité dans d'autres langages de programmation.
Les colonnes et leur numéros dans Excel.
Sommaire
VBA: Trouver le nom de la colonne
Voici le code qui vous permettra de trouver le nom (donc la ou les lettres) de la colonne à partir d'un numéro. Par exemple: le nom de la 74ème colonne => "BV".
Code source VBA pour trouver le nom de la colonne
Cette fonction est très simple et utilise la propriété Address
de l'objet Range
dans Excel. C'est ainsi qu'il est possible de faire la conversion en une ligne de code (mais pour une meilleure lisibilité, je l'écris sur deux lignes)…
1 2 3 4 5 6 7 8 9 |
Public Function NomDeColonne(NumeroDeColonne As Integer) As String 'par: Excel-Malin.com ( https://excel-malin.com ) On Error GoTo NomDeColonneErreur NomDeColonne = Cells(1, NumeroDeColonne).Address(RowAbsolute:=False, ColumnAbsolute:=False) NomDeColonne = CStr(Left(NomDeColonne, Len(NomDeColonne) - 1)) Exit Function NomDeColonneErreur: NomDeColonne = CVErr(xlErrNA) End Function |
L'algorithme pour trouver le nom de la colonne (sans l'utilisation des fonctionnalités particulières d'Excel).
Cet algorithme va renvoyer exactement le même résultat que la fonction précédente mais sans faire appel aux fonctions spécifiques à VBA – vous pouvez donc le retranscrire librement dans d'autres langages de programmation.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Public Function NomDeColonneGeneral(NumeroDeColonne As Integer) As String 'par: Excel-Malin.com ( https://excel-malin.com ) On Error GoTo NomDeColonneGeneralErreur Dim i As Integer Dim m As Integer Dim NomTemporaire As String i = NumeroDeColonne NomTemporaire = "" Do While (i > 0) m = (i - 1) Mod 26 NomTemporaire = Chr(65 + m) + NomTemporaire i = Int((i - m) / 26) Loop NomDeColonneGeneral = NomTemporaire Exit Function NomDeColonneGeneralErreur: NomDeColonneGeneral = CVErr(xlErrNA) End Function |
VBA: Trouver le numéro de la colonne
Et voici la conversion contraire: comment trouver le numéro de colonne à partir de son nom. Par exemple: la colonne "BC" est la 55ème.
Code source VBA pour trouver le numéro de la colonne
Cette fonction peut être facilement utilisée dans vos applications Excel. Elle utilise comme argument le nom de la colonne et retourne son numéro.
1 2 3 4 5 6 7 8 |
Public Function NumeroDeColonne(NomDeColonne As String) As Integer 'par: Excel-Malin.com ( https://excel-malin.com ) On Error GoTo NumeroDeColonneErreur NumeroDeColonne = CInt(Range(NomDeColonne & "1").Column) Exit Function NumeroDeColonneErreur: NumeroDeColonne = CVErr(xlErrNA) End Function |
L'algorithme pour trouver le numéro de la colonne (sans l'utilisation des fonctionnalités particulières d'Excel).
Cet algorithme peut être transformé dans d'autres langages de programmation (Java, C#,…) car il n'utilise pas des fonctionnalités spécifiques à Excel (comme par ex. Range
)
En ce qui concerne VBA, cette fonction utilise comme paramètre un argument de type String
qui contient le nom de la colonne (e.g. "AT" ou "FRB"). La valeur renvoyée par cette fonction est le numéro de la colonne (en tant qu'Integer
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Public Function NumeroDeColonneGeneral(NomDeColonne As String) As Integer 'par: Excel-Malin.com ( https://excel-malin.com ) On Error GoTo NumeroDeColonneGeneralErreur For i = Len(NomDeColonne) To 1 Step -1 x = Asc(UCase(Mid(NomDeColonne, i, 1))) - 64 y = x * 26 ^ (Len(NomDeColonne) - i) + y Next i Debug.Print y Exit Function NumeroDeColonneGeneralErreur: NumeroDeColonneGeneral = CVErr(xlErrNA) End Function |
Conclusion
Avec ces fonctions VBA, vous pouvez très facilement naviguer entre les colonnes d'une Feuille Excel. Cela va rendre l'utilisation des itérations beaucoup plus facile! Ainsi que la sélection des plages pour par exemple exporter le fichier Excel comme PDF ou comme une image.
Pour aller plus loin en VBA…
Et pour finir, quelques autres articles qui pourraient vous servir pour rendre votre utilisation de VBA et d'Excel plus efficace:
- Liste de toutes les fonctions disponibles en VBA
- Gestion des fichiers en VBA
- Importer et exporter le code VBA
- Protéger le code VBA par un mot de passe
- Compresser et décompresser avec ZIP en VBA