correspondance: 1=A ; 2=B ; 27=AA ; etc...

Fusky

XLDnaute Junior
Bonjour,


Existe-t-il une fonction qui permette de transformer un nombre en lettre dans cette suite logique :

1=A
2=B
3=C
...
26=Z
27=AA
28=AB
...
52=AZ
53=BA
et ainsi de suite

Pour l'instant j'ai une formule qui ressemble a ca : =IF(I455<26,CHAR(I455+64),IF(AND(26<I455,I455<52),CONCATENATE("A",CHAR(I455-26+64)))), un peu usine a gaz, et qui ne pourra pas aller tres loin (pour l'instant AZ).

Sinon j'ai la solution de creer un tableau avec un colonne chiffre de 1 a 600 ou plus, et une colonne avec les lettres de A a MZ et plus ... et d'utiliser la fonction RECHERCHE ... mais bon, si une fonction existe !
 

Monique

Nous a quitté
Repose en paix
Re : correspondance: 1=A ; 2=B ; 27=AA ; etc...

Re,

à essayer :
=SI(A1<27;"";CAR(ENT((A1-1)/26)+64))&CAR(MOD(A1+51;26)+65)

En angliche :
=IF(A1<27,"",CHAR(INT((A1-1)/26)+64))&CHAR(MOD(A1+51,26)+65)

Mais il doit y avoir plus court
 

kiki29

XLDnaute Barbatruc
Re : correspondance: 1=A ; 2=B ; 27=AA ; etc...

Soir Bon
sous forme de fonctions personnalisées ( donc à placer dans un Module )
limites A à FXSHRXW | 1 à 2147483647
Code:
Public Function Lettre2NumCol(ByVal Chaine As String) As Long 
Dim i As Long, ValeurCh As Long, v As Long 
Const ChaineAlpha As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
    For i = 1 To Len(Chaine) 
        ValeurCh = InStr(1, ChaineAlpha, Mid(UCase(Chaine), i, 1)) 
        v = v * 26 + ValeurCh 
    Next i
    Lettre2NumCol = v 
End Function 
   
Public Function NumCol2Lettre(ByVal NumCol As Long) As String 
Dim i As Long, x As Long, s As String 
    For i = 6 To 0 Step -1 
        x = (26 ^ (i + 1) - 1) / 25 - 1 
        If NumCol > x Then 
            s = s & Chr(((NumCol - x - 1) \ 26 ^ i) Mod 26 + 65) 
        End If 
    Next i 
    NumCol2Lettre = s 
End Function
 

Pièces jointes

  • Num2Lettre_Lettre2Num.zip
    6.9 KB · Affichages: 101
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : correspondance: 1=A ; 2=B ; 27=AA ; etc...

Bonjour à tous,
s'il s'agit d'avoir les numéros de colonne correspondant 1 à 255

Sub LettreSelonNoColon()
NoLig = 1 '< toujours=1 !!!
NoCol = 225 '< entrer le no désiré 1 à 256 maxi sous Excel 2003 !
' fonction + traitement de la chaine L$ pour supprimer le"1" de NoLig

L$ = Cells(NoLig, NoCol).Address(ColumnAbsolute:=False, Rowabsolute:=False) ' False pour ne pas avoir exp $A$1
Lettre$ = Left(L$, Len(L$) - 1)
MsgBox Lettre$ ' pour voir
'No 1 = A ... No 26 = Z ... No 27 = AA ... No 225 = HK ...
End Sub
 

Eric 45

XLDnaute Occasionnel
Re : correspondance: 1=A ; 2=B ; 27=AA ; etc...

Bonjour à tous
Bonjour Fusky

J'ai bien lu "fonction", mais en VBA pour avoir l'adresse d'une cellule, par transformation de nombre en lettre :
Code:
sub adresse()
ligne = 3
colonne = 255
adresse = Cells(ligne, colonne).Address
End Sub
avec toutes ces réponses tu devrais trouver ton bonheur
Dis nous
Eric
 

Monique

Nous a quitté
Repose en paix
Re : correspondance: 1=A ; 2=B ; 27=AA ; etc...

Bonjour,

3 fois rien plus court qu'hier :
=SI(A2<27;"";CAR(ENT((A2-1)/26)+64))&CAR(MOD(A2-1;26)+65)

En angliche :
=IF(A2<27,"",CHAR(INT((A2-1)/26)+64))&CHAR(MOD(A2-1,26)+65)

Limite 702 (27 fois 26)
 

Catrice

XLDnaute Barbatruc
Re : correspondance: 1=A ; 2=B ; 27=AA ; etc...

Bonjour à tous,

Merci JeanMarie, effectivement tres court ;)
Ce qui donne =SUBSTITUE(ADRESSE(1;A1;4);1;"") où A1 contient une valeur de 1 à 256...
(On peut enlever les "" c'est pour ne pas aficher le smiley)
 

Fusky

XLDnaute Junior
Re : correspondance: 1=A ; 2=B ; 27=AA ; etc...

Merci pour toutes ces contributions ! J'ai l'embarras du choix !

Je ne suis familier de VBA que par les macro, et a un modeste niveau, donc je choisit une formule simple. Celle de Monique semble etre la plus puissante (quasiment illimitee), c'est celle que j'utiliserais.

Merci encore
 

heriss

XLDnaute Junior
Re : correspondance: 1=A ; 2=B ; 27=AA ; etc...

Bonsoir le forum,

Allez une de plus,

Function GetColumn(aValue As Long) As String
If aValue > 26 Then
If aValue Mod 26 <> 0 Then
GetColumn = Chr(64 + (aValue \ 26)) & GetColumn(aValue Mod 26)
Else
GetColumn = Chr(64 + (aValue \ 26) - 1) & GetColumn(26)
End If
Else
GetColumn = Chr(64 + aValue)

End If
End Function

ciao,
Heriss
 

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 017
dernier inscrit
annboi19