' ===============================================================
' RETOURNE L'INDEX NOMMé (HEADER RéEL) DE LA COLONNE EXCEL
' ----------------------
' GetColumnHeaderFromIndex et GetLetterFromNumber indissociables
' ===============================================================
Function GetColumnHeaderFromIndex(ByVal Index As Integer) As String
Dim iInt%, iRest%
If Index > 256 Then
GetColumnHeaderFromIndex = vbNullString
ElseIf Index < 27 Then
GetColumnHeaderFromIndex = GetLetterFromNumber(Index)
Else
iInt = Index \ 26: iRest = Index Mod 26
If iRest = 0 Then iInt = iInt - 1: iRest = 26
GetColumnHeaderFromIndex = GetLetterFromNumber(iInt) & GetLetterFromNumber(iRest)
End If
End Function
Function GetLetterFromNumber(ByVal Number As Integer) As String
If Number < 1 Or Number > 26 Then GetLetterFromNumber = vbNullString Else GetLetterFromNumber = Chr$(Number + 64)
End Function
' ===============================================================
' RETOURNE L'INDEX (VALEUR) DE LA COLONNE EXCEL
' ----------------------
' GetIndexFromColumnHeader et GetNumberFromLetter indissociables
' ===============================================================
Function GetIndexFromColumnHeader(ByVal Header As String) As Integer
Dim sL$, sR$, iLen%
iLen = LenB(Header)
If iLen = 2 Then
sL = Chr$(0): sR = Header
ElseIf iLen = 4 Then
sL = LeftB$(Header, 2): sR = RightB$(Header, 2)
Else
sL = Chr$(0): sR = Chr$(0)
End If
GetIndexFromColumnHeader = 26 * GetNumberFromLetter(sL) + GetNumberFromLetter(sR)
End Function
Function GetNumberFromLetter(ByVal Letter As String) As Integer
GetNumberFromLetter = Asc(Letter) - 64
If GetNumberFromLetter < 1 Or GetNumberFromLetter > 26 Then GetNumberFromLetter = 0
End Function
' EXEMPLE D'UTILISATION
Private Sub Form_Load()
Dim s As String
' numérique vers chaîne
s = " 1 = " & GetColumnHeaderFromIndex(1) & vbCrLf & _
" 26 = " & GetColumnHeaderFromIndex(26) & vbCrLf & _
" 30 = " & GetColumnHeaderFromIndex(30) & vbCrLf & _
" 52 = " & GetColumnHeaderFromIndex(52) & vbCrLf & _
" 59 = " & GetColumnHeaderFromIndex(59) & vbCrLf & _
" 78 = " & GetColumnHeaderFromIndex(78) & vbCrLf & _
"241 = " & GetColumnHeaderFromIndex(241) & vbCrLf & _
"256 = " & GetColumnHeaderFromIndex(256)
MsgBox s
' chaîne vers numérique
s = " A = " & GetIndexFromColumnHeader("A") & vbCrLf & _
" Z = " & GetIndexFromColumnHeader("Z") & vbCrLf & _
"AD = " & GetIndexFromColumnHeader("AD") & vbCrLf & _
"AZ = " & GetIndexFromColumnHeader("AZ") & vbCrLf & _
"BG = " & GetIndexFromColumnHeader("BG") & vbCrLf & _
"BZ = " & GetIndexFromColumnHeader("BZ") & vbCrLf & _
"IG = " & GetIndexFromColumnHeader("IG") & vbCrLf & _
"IV = " & GetIndexFromColumnHeader("IV")
MsgBox s
Unload Me
End Sub