Identifier la position d'une colonne excel depuis son header, et vice versa

Soyez le premier à donner votre avis sur cette source.

Snippet vu 21 234 fois - Téléchargée 8 fois

Contenu du snippet

'  ===============================================================
'        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


Compatibilité : VB6, VBA

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.