Il n'est parfois pas évident de trouver le numéro d'une colonne (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 – 2016), le nombre de colonnes a atteint le nombre 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 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.
VBA: Trouver le nom de la colonne
Voici le code qui vous permettra de trouver la lettre 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)…
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 fonctionalité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.
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.
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 fonctionalitées 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
)
Du point de vue d'Excel, 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
)
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