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