165 votes

Fonction pour convertir un numéro de colonne en lettre ?

Quelqu'un dispose-t-il d'une fonction Excel VBA permettant de retourner la ou les lettres de la colonne d'un nombre ?

Par exemple, en saisissant 100 devrait retourner CV .

1voto

cristobal Points 19

Une façon simple d'obtenir le nom de la colonne

Sub column()

cell=cells(1,1)
column = Replace(cell.Address(False, False), cell.Row, "")
msgbox column

End Sub

J'espère que cela vous aidera =)

1voto

Will Ediger Points 379

La solution de brettdj fonctionne à merveille, mais si vous y voyez une solution potentielle pour la même raison que moi, j'ai pensé vous proposer ma solution alternative.

Le problème que je rencontrais était le défilement vers une colonne spécifique en fonction de la sortie d'une fonction MATCH(). Au lieu de convertir le numéro de la colonne en sa lettre parallèle, j'ai choisi de faire basculer temporairement le style de référence de A1 à R1C1. De cette façon, je pouvais simplement faire défiler les colonnes jusqu'à leur numéro sans avoir à utiliser une fonction VBA. Pour basculer facilement entre les deux styles de référence, vous pouvez utiliser ce code VBA :

Sub toggle_reference_style()

If Application.ReferenceStyle = xlR1C1 Then
  Application.ReferenceStyle = xlA1
Else
  Application.ReferenceStyle = xlR1C1
End If

End Sub

1voto

Rosetta Points 1958

En complément de la réponse de brettdj, voici comment rendre l'entrée du numéro de colonne facultative. Si l'entrée du numéro de colonne est omise, la fonction renvoie la lettre de la colonne de la cellule qui appelle la fonction. Je sais que cela peut également être réalisé en utilisant simplement ColumnLetter(COLUMN()) mais je pensais que ce serait bien s'il pouvait le comprendre intelligemment.

Public Function ColumnLetter(Optional ColumnNumber As Long = 0) As String
    If ColumnNumber = 0 Then
        ColumnLetter = Split(Application.Caller.Address(True, False, xlA1), "$")(0)
    Else
        ColumnLetter = Split(Cells(1, ColumnNumber).Address(True, False, xlA1), "$")(0)
    End If
End Function

La contrepartie de cette fonction est qu'elle serait très très légèrement plus lente que la réponse de brettdj à cause de la fonction IF test. Mais cela peut se ressentir si la fonction est utilisée de manière répétée pour un très grand nombre de fois.

1voto

ib11 Points 1595

Voici une réponse tardive, juste pour une approche simpliste utilisant Int() y If dans le cas de colonnes de 1 à 3 caractères :

Function outColLetterFromNumber(i As Integer) As String

    If i < 27 Then       'one-letter
        col = Chr(64 + i)
    ElseIf i < 677 Then  'two-letter
        col = Chr(64 + Int(i / 26)) & Chr(64 + i - (Int(i / 26) * 26))
    Else                 'three-letter
        col = Chr(64 + Int(i / 676)) & Chr(64 + Int(i - Int(i / 676) * 676) / 26)) & Chr(64 + i - (Int(i - Int(i / 676) * 676) / 26) * 26))
    End If

    outColLetterFromNumber = col

End Function

1voto

Krzysztof Points 11
Function fColLetter(iCol As Integer) As String
  On Error GoTo errLabel
  fColLetter = Split(Columns(lngCol).Address(, False), ":")(1)
  Exit Function
errLabel:
  fColLetter = "%ERR%"
End Function

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