VBA: convertir le nom et le numéro de la colonne

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 – 2019/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.

Excel: Numéros et noms de colonnesLes colonnes et leur numéros dans Excel.

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

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.

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

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:

77 0