je desire faire une fonction qui permettrai de numeroter de la meme facon que
le fait excell pour les entetes de colonne
(1=A....26=Z...27=AA.........104=CZ)
j'ai une fonction qui marche moyen car elle plante a chaque fois qu'elle
tombe sur "Z" :/
'Decimal vers Hexavigesimal windows
Function DecToB26(ByVal Value As String) As String
If Not IsNumeric(Value) Then Return Value
Dim v1 As Long
Dim Resultat As String = ""
Do While (Value > 0)
v1 = (Value Mod 26)
Value = Int(Value / 26)
Resultat = Mid$(Chaine26, 0 + v1, 1) & Resultat
Loop
Return Resultat
End Function
Par contre la fonction inverse fonctionne impec
'Hexavigesimal windows vers Decimal
Function B26ToDec(ByVal MyString As String) As Decimal
If IsNumeric(MyString) Then Return MyString
Dim v2 As Decimal
Dim i As Integer
Dim j As Byte
Dim Resultat As Decimal
'Virer les Espaces
Dim MyString2 As String = MyString.Replace(" ", "").ToUpper
For i = Len(MyString2) To 1 Step -1
v2 = InStr(1, Chaine26, Mid$(MyString2, i, 1))
If v2 < 1 Then Return Resultat
If v2 >= 27 Then Return Resultat
For j = 1 To (Len(MyString2) - i)
v2 = v2 * 26
Next
Resultat = Resultat + v2
Next
Return Resultat
End Function
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
jm
"percyval" wrote in message news:
je desire faire une fonction qui permettrai de numeroter de la meme facon que le fait excell pour les entetes de colonne (1=A....26=Z...27ª.........104=CZ)
j'ai une fonction qui marche moyen car elle plante a chaque fois qu'elle tombe sur "Z" :/
'Decimal vers Hexavigesimal windows Function DecToB26(ByVal Value As String) As String If Not IsNumeric(Value) Then Return Value Dim v1 As Long Dim Resultat As String = "" Do While (Value > 0) v1 = (Value Mod 26) Value = Int(Value / 26) Resultat = Mid$(Chaine26, 0 + v1, 1) & Resultat Loop Return Resultat End Function
Hello,
j'ai réécrit en VB6, mais tu n'auras pas de mal à adapter.
Il faut faire un modulo 27, sinon tu ne vois jamais le 26eme D'autre part, il faut tester explicitement le cas v1=0 pour justement repasser à 1, car le premier caractère d'une chaine en VB est à l'offset 1.
En C, c'est plus commode car les chaines commencent à l'offset 0. Tu aurais pu aussi t'en sortir en utilisant un tableau commençant à 0 pour stocker tes lettres, au lieu d'une chaine.
Bref, voici la chose, testée et tout ça:
Function DecToB26(ByVal Value As Long) As String Dim v1 As Long Dim Resultat As String
Do While (Value > 0) v1 = (Value Mod 27) If v1 = 0 Then v1 = 1 Value = Int(Value / 27) Resultat = Mid$(Chaine26, v1, 1) & Resultat Loop DecToB26 = Resultat End Function
"percyval" <percyval@discussions.microsoft.com> wrote in message
news:82D34209-0895-4BAB-9DBE-86933FC07901@microsoft.com...
je desire faire une fonction qui permettrai de numeroter de la meme facon
que
le fait excell pour les entetes de colonne
(1=A....26=Z...27ª.........104=CZ)
j'ai une fonction qui marche moyen car elle plante a chaque fois qu'elle
tombe sur "Z" :/
'Decimal vers Hexavigesimal windows
Function DecToB26(ByVal Value As String) As String
If Not IsNumeric(Value) Then Return Value
Dim v1 As Long
Dim Resultat As String = ""
Do While (Value > 0)
v1 = (Value Mod 26)
Value = Int(Value / 26)
Resultat = Mid$(Chaine26, 0 + v1, 1) & Resultat
Loop
Return Resultat
End Function
Hello,
j'ai réécrit en VB6, mais tu n'auras pas de mal à
adapter.
Il faut faire un modulo 27, sinon tu ne vois jamais le 26eme
D'autre part, il faut tester explicitement le cas v1=0 pour
justement repasser à 1, car le premier caractère d'une chaine
en VB est à l'offset 1.
En C, c'est plus commode car les chaines commencent à l'offset 0.
Tu aurais pu aussi t'en sortir en utilisant un tableau commençant à
0 pour stocker tes lettres, au lieu d'une chaine.
Bref, voici la chose, testée et tout ça:
Function DecToB26(ByVal Value As Long) As String
Dim v1 As Long
Dim Resultat As String
Do While (Value > 0)
v1 = (Value Mod 27)
If v1 = 0 Then v1 = 1
Value = Int(Value / 27)
Resultat = Mid$(Chaine26, v1, 1) & Resultat
Loop
DecToB26 = Resultat
End Function
je desire faire une fonction qui permettrai de numeroter de la meme facon que le fait excell pour les entetes de colonne (1=A....26=Z...27ª.........104=CZ)
j'ai une fonction qui marche moyen car elle plante a chaque fois qu'elle tombe sur "Z" :/
'Decimal vers Hexavigesimal windows Function DecToB26(ByVal Value As String) As String If Not IsNumeric(Value) Then Return Value Dim v1 As Long Dim Resultat As String = "" Do While (Value > 0) v1 = (Value Mod 26) Value = Int(Value / 26) Resultat = Mid$(Chaine26, 0 + v1, 1) & Resultat Loop Return Resultat End Function
Hello,
j'ai réécrit en VB6, mais tu n'auras pas de mal à adapter.
Il faut faire un modulo 27, sinon tu ne vois jamais le 26eme D'autre part, il faut tester explicitement le cas v1=0 pour justement repasser à 1, car le premier caractère d'une chaine en VB est à l'offset 1.
En C, c'est plus commode car les chaines commencent à l'offset 0. Tu aurais pu aussi t'en sortir en utilisant un tableau commençant à 0 pour stocker tes lettres, au lieu d'une chaine.
Bref, voici la chose, testée et tout ça:
Function DecToB26(ByVal Value As Long) As String Dim v1 As Long Dim Resultat As String
Do While (Value > 0) v1 = (Value Mod 27) If v1 = 0 Then v1 = 1 Value = Int(Value / 27) Resultat = Mid$(Chaine26, v1, 1) & Resultat Loop DecToB26 = Resultat End Function
"percyval" wrote in message news: > je desire faire une fonction qui permettrai de numeroter de la meme facon > que > le fait excell pour les entetes de colonne > (1=A....26=Z...27ª.........104=CZ) > > j'ai une fonction qui marche moyen car elle plante a chaque fois qu'elle > tombe sur "Z" :/ > > si un de vous peu me filer un coup de main > > Private Const Chaine26 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" > > 'Decimal vers Hexavigesimal windows > Function DecToB26(ByVal Value As String) As String > If Not IsNumeric(Value) Then Return Value > Dim v1 As Long > Dim Resultat As String = "" > Do While (Value > 0) > v1 = (Value Mod 26) > Value = Int(Value / 26) > Resultat = Mid$(Chaine26, 0 + v1, 1) & Resultat > Loop > Return Resultat > End Function
Hello,
j'ai réécrit en VB6, mais tu n'auras pas de mal à adapter.
Il faut faire un modulo 27, sinon tu ne vois jamais le 26eme D'autre part, il faut tester explicitement le cas v1=0 pour justement repasser à 1, car le premier caractère d'une chaine en VB est à l'offset 1.
En C, c'est plus commode car les chaines commencent à l'offset 0. Tu aurais pu aussi t'en sortir en utilisant un tableau commençant à 0 pour stocker tes lettres, au lieu d'une chaine.
Bref, voici la chose, testée et tout ça:
Function DecToB26(ByVal Value As Long) As String Dim v1 As Long Dim Resultat As String
Do While (Value > 0) v1 = (Value Mod 27) If v1 = 0 Then v1 = 1 Value = Int(Value / 27) Resultat = Mid$(Chaine26, v1, 1) & Resultat Loop DecToB26 = Resultat End Function
Merci pour ta reponse rapide :)
mais .... a marche juste un peu plus loin que la mienne
26 = Z 27 = AA 28 = AA !! 29 = AB
v tester avec un tableau comme tu disait plus haut
"jm" a écrit :
"percyval" <percyval@discussions.microsoft.com> wrote in message
news:82D34209-0895-4BAB-9DBE-86933FC07901@microsoft.com...
> je desire faire une fonction qui permettrai de numeroter de la meme facon
> que
> le fait excell pour les entetes de colonne
> (1=A....26=Z...27ª.........104=CZ)
>
> j'ai une fonction qui marche moyen car elle plante a chaque fois qu'elle
> tombe sur "Z" :/
>
> si un de vous peu me filer un coup de main
>
> Private Const Chaine26 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
>
> 'Decimal vers Hexavigesimal windows
> Function DecToB26(ByVal Value As String) As String
> If Not IsNumeric(Value) Then Return Value
> Dim v1 As Long
> Dim Resultat As String = ""
> Do While (Value > 0)
> v1 = (Value Mod 26)
> Value = Int(Value / 26)
> Resultat = Mid$(Chaine26, 0 + v1, 1) & Resultat
> Loop
> Return Resultat
> End Function
Hello,
j'ai réécrit en VB6, mais tu n'auras pas de mal à
adapter.
Il faut faire un modulo 27, sinon tu ne vois jamais le 26eme
D'autre part, il faut tester explicitement le cas v1=0 pour
justement repasser à 1, car le premier caractère d'une chaine
en VB est à l'offset 1.
En C, c'est plus commode car les chaines commencent à l'offset 0.
Tu aurais pu aussi t'en sortir en utilisant un tableau commençant à
0 pour stocker tes lettres, au lieu d'une chaine.
Bref, voici la chose, testée et tout ça:
Function DecToB26(ByVal Value As Long) As String
Dim v1 As Long
Dim Resultat As String
Do While (Value > 0)
v1 = (Value Mod 27)
If v1 = 0 Then v1 = 1
Value = Int(Value / 27)
Resultat = Mid$(Chaine26, v1, 1) & Resultat
Loop
DecToB26 = Resultat
End Function
Merci pour ta reponse rapide :)
mais .... a marche juste un peu plus loin que la mienne
26 = Z
27 = AA
28 = AA !!
29 = AB
v tester avec un tableau comme tu disait plus haut
"percyval" wrote in message news: > je desire faire une fonction qui permettrai de numeroter de la meme facon > que > le fait excell pour les entetes de colonne > (1=A....26=Z...27ª.........104=CZ) > > j'ai une fonction qui marche moyen car elle plante a chaque fois qu'elle > tombe sur "Z" :/ > > si un de vous peu me filer un coup de main > > Private Const Chaine26 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" > > 'Decimal vers Hexavigesimal windows > Function DecToB26(ByVal Value As String) As String > If Not IsNumeric(Value) Then Return Value > Dim v1 As Long > Dim Resultat As String = "" > Do While (Value > 0) > v1 = (Value Mod 26) > Value = Int(Value / 26) > Resultat = Mid$(Chaine26, 0 + v1, 1) & Resultat > Loop > Return Resultat > End Function
Hello,
j'ai réécrit en VB6, mais tu n'auras pas de mal à adapter.
Il faut faire un modulo 27, sinon tu ne vois jamais le 26eme D'autre part, il faut tester explicitement le cas v1=0 pour justement repasser à 1, car le premier caractère d'une chaine en VB est à l'offset 1.
En C, c'est plus commode car les chaines commencent à l'offset 0. Tu aurais pu aussi t'en sortir en utilisant un tableau commençant à 0 pour stocker tes lettres, au lieu d'une chaine.
Bref, voici la chose, testée et tout ça:
Function DecToB26(ByVal Value As Long) As String Dim v1 As Long Dim Resultat As String
Do While (Value > 0) v1 = (Value Mod 27) If v1 = 0 Then v1 = 1 Value = Int(Value / 27) Resultat = Mid$(Chaine26, v1, 1) & Resultat Loop DecToB26 = Resultat End Function
Merci pour ta reponse rapide :)
mais .... a marche juste un peu plus loin que la mienne
26 = Z 27 = AA 28 = AA !! 29 = AB
v tester avec un tableau comme tu disait plus haut
jm
"percyval" wrote in message news:
"jm" a écrit :
"percyval" wrote in message news: > je desire faire une fonction qui permettrai de numeroter de la meme > facon > que > le fait excell pour les entetes de colonne > (1=A....26=Z...27ª.........104=CZ)
Merci pour ta reponse rapide :)
mais .... a marche juste un peu plus loin que la mienne
26 = Z 27 = AA 28 = AA !! 29 = AB
v tester avec un tableau comme tu disait plus haut
arf oui tu as raison, j'ai posté trop vite. un petit ajustement s'impose, car c'est le Value = Int(Value / 27) qui n'est pas correct. Il faut tenir compte du cas particulier ou on a forcé v1 à 1.
-- jean-marc
"percyval" <percyval@discussions.microsoft.com> wrote in message
news:E69085FF-3C61-427C-B817-6229F922F243@microsoft.com...
"jm" a écrit :
"percyval" <percyval@discussions.microsoft.com> wrote in message
news:82D34209-0895-4BAB-9DBE-86933FC07901@microsoft.com...
> je desire faire une fonction qui permettrai de numeroter de la meme
> facon
> que
> le fait excell pour les entetes de colonne
> (1=A....26=Z...27ª.........104=CZ)
Merci pour ta reponse rapide :)
mais .... a marche juste un peu plus loin que la mienne
26 = Z
27 = AA
28 = AA !!
29 = AB
v tester avec un tableau comme tu disait plus haut
arf oui tu as raison, j'ai posté trop vite. un petit ajustement s'impose,
car c'est le
Value = Int(Value / 27)
qui n'est pas correct. Il faut tenir compte du cas particulier ou on a forcé
v1 à 1.
"percyval" wrote in message news: > je desire faire une fonction qui permettrai de numeroter de la meme > facon > que > le fait excell pour les entetes de colonne > (1=A....26=Z...27ª.........104=CZ)
Merci pour ta reponse rapide :)
mais .... a marche juste un peu plus loin que la mienne
26 = Z 27 = AA 28 = AA !! 29 = AB
v tester avec un tableau comme tu disait plus haut
arf oui tu as raison, j'ai posté trop vite. un petit ajustement s'impose, car c'est le Value = Int(Value / 27) qui n'est pas correct. Il faut tenir compte du cas particulier ou on a forcé v1 à 1.
-- jean-marc
percyval
"jm" a écrit :
"percyval" wrote in message news: > > > "jm" a écrit : > >> "percyval" wrote in message >> news: >> > je desire faire une fonction qui permettrai de numeroter de la meme >> > facon >> > que >> > le fait excell pour les entetes de colonne >> > (1=A....26=Z...27ª.........104=CZ) >> >> > Merci pour ta reponse rapide :) > > mais .... a marche juste un peu plus loin que la mienne > > 26 = Z > 27 = AA > 28 = AA !! > 29 = AB > > v tester avec un tableau comme tu disait plus haut
arf oui tu as raison, j'ai posté trop vite. un petit ajustement s'impose, car c'est le Value = Int(Value / 27) qui n'est pas correct. Il faut tenir compte du cas particulier ou on a forcé v1 à 1.
-- jean-marc
Pas gagné j'ai trouvé sur ton site dans les faq un code que j'ai modifié mais toujours un pb sur ce foutu "Z"
'Decimal vers Hexavigesimal windows Public Function DecimalToB26(ByVal nNumber As Long) As String Do While (nNumber >= 26) DecimalToB26 = NumberToSymbol((nNumber Mod 26)) & DecimalToB26 nNumber = nNumber 26 Loop DecimalToB26 = NumberToSymbol(nNumber) & DecimalToB26 End Function
Public Function NumberToSymbol(ByVal nNumber As Long) As String NumberToSymbol = Chr(Asc("A") + (nNumber - 1)) End Function
Percyval ..... continu de ramer
"jm" a écrit :
"percyval" <percyval@discussions.microsoft.com> wrote in message
news:E69085FF-3C61-427C-B817-6229F922F243@microsoft.com...
>
>
> "jm" a écrit :
>
>> "percyval" <percyval@discussions.microsoft.com> wrote in message
>> news:82D34209-0895-4BAB-9DBE-86933FC07901@microsoft.com...
>> > je desire faire une fonction qui permettrai de numeroter de la meme
>> > facon
>> > que
>> > le fait excell pour les entetes de colonne
>> > (1=A....26=Z...27ª.........104=CZ)
>>
>>
> Merci pour ta reponse rapide :)
>
> mais .... a marche juste un peu plus loin que la mienne
>
> 26 = Z
> 27 = AA
> 28 = AA !!
> 29 = AB
>
> v tester avec un tableau comme tu disait plus haut
arf oui tu as raison, j'ai posté trop vite. un petit ajustement s'impose,
car c'est le
Value = Int(Value / 27)
qui n'est pas correct. Il faut tenir compte du cas particulier ou on a forcé
v1 à 1.
--
jean-marc
Pas gagné
j'ai trouvé sur ton site dans les faq un code que j'ai modifié mais
toujours un pb sur ce foutu "Z"
'Decimal vers Hexavigesimal windows
Public Function DecimalToB26(ByVal nNumber As Long) As String
Do While (nNumber >= 26)
DecimalToB26 = NumberToSymbol((nNumber Mod 26)) & DecimalToB26
nNumber = nNumber 26
Loop
DecimalToB26 = NumberToSymbol(nNumber) & DecimalToB26
End Function
Public Function NumberToSymbol(ByVal nNumber As Long) As String
NumberToSymbol = Chr(Asc("A") + (nNumber - 1))
End Function
"percyval" wrote in message news: > > > "jm" a écrit : > >> "percyval" wrote in message >> news: >> > je desire faire une fonction qui permettrai de numeroter de la meme >> > facon >> > que >> > le fait excell pour les entetes de colonne >> > (1=A....26=Z...27ª.........104=CZ) >> >> > Merci pour ta reponse rapide :) > > mais .... a marche juste un peu plus loin que la mienne > > 26 = Z > 27 = AA > 28 = AA !! > 29 = AB > > v tester avec un tableau comme tu disait plus haut
arf oui tu as raison, j'ai posté trop vite. un petit ajustement s'impose, car c'est le Value = Int(Value / 27) qui n'est pas correct. Il faut tenir compte du cas particulier ou on a forcé v1 à 1.
-- jean-marc
Pas gagné j'ai trouvé sur ton site dans les faq un code que j'ai modifié mais toujours un pb sur ce foutu "Z"
'Decimal vers Hexavigesimal windows Public Function DecimalToB26(ByVal nNumber As Long) As String Do While (nNumber >= 26) DecimalToB26 = NumberToSymbol((nNumber Mod 26)) & DecimalToB26 nNumber = nNumber 26 Loop DecimalToB26 = NumberToSymbol(nNumber) & DecimalToB26 End Function
Public Function NumberToSymbol(ByVal nNumber As Long) As String NumberToSymbol = Chr(Asc("A") + (nNumber - 1)) End Function
Percyval ..... continu de ramer
percyval
"jm" a écrit :
"percyval" wrote in message news: > > > "jm" a écrit : > >> "percyval" wrote in message >> news: >> > je desire faire une fonction qui permettrai de numeroter de la meme >> > facon >> > que >> > le fait excell pour les entetes de colonne >> > (1=A....26=Z...27ª.........104=CZ) >> >> > Merci pour ta reponse rapide :) > > mais .... a marche juste un peu plus loin que la mienne > > 26 = Z > 27 = AA > 28 = AA !! > 29 = AB > > v tester avec un tableau comme tu disait plus haut
arf oui tu as raison, j'ai posté trop vite. un petit ajustement s'impose, car c'est le Value = Int(Value / 27) qui n'est pas correct. Il faut tenir compte du cas particulier ou on a forcé v1 à 1.
-- jean-marc
Je continu de chercher..
J'ai bien trouvé un code sur ton site que j'ai modifié mais toujours un pb sur le "Z"
'Decimal vers Hexavigesimal windows Public Function DecimalToB26(ByVal nNumber As Long) As String Do While (nNumber >= 26) DecimalToB26 = NumberToSymbol((nNumber Mod 26)) & DecimalToB26 nNumber = nNumber 26 Loop DecimalToB26 = NumberToSymbol(nNumber) & DecimalToB26 End Function
Public Function NumberToSymbol(ByVal nNumber As Long) As String NumberToSymbol = Chr(Asc("A") + (nNumber - 1)) End Function
je rame je ram
"jm" a écrit :
"percyval" <percyval@discussions.microsoft.com> wrote in message
news:E69085FF-3C61-427C-B817-6229F922F243@microsoft.com...
>
>
> "jm" a écrit :
>
>> "percyval" <percyval@discussions.microsoft.com> wrote in message
>> news:82D34209-0895-4BAB-9DBE-86933FC07901@microsoft.com...
>> > je desire faire une fonction qui permettrai de numeroter de la meme
>> > facon
>> > que
>> > le fait excell pour les entetes de colonne
>> > (1=A....26=Z...27ª.........104=CZ)
>>
>>
> Merci pour ta reponse rapide :)
>
> mais .... a marche juste un peu plus loin que la mienne
>
> 26 = Z
> 27 = AA
> 28 = AA !!
> 29 = AB
>
> v tester avec un tableau comme tu disait plus haut
arf oui tu as raison, j'ai posté trop vite. un petit ajustement s'impose,
car c'est le
Value = Int(Value / 27)
qui n'est pas correct. Il faut tenir compte du cas particulier ou on a forcé
v1 à 1.
--
jean-marc
Je continu de chercher..
J'ai bien trouvé un code sur ton site que j'ai modifié mais toujours un pb
sur le "Z"
'Decimal vers Hexavigesimal windows
Public Function DecimalToB26(ByVal nNumber As Long) As String
Do While (nNumber >= 26)
DecimalToB26 = NumberToSymbol((nNumber Mod 26)) & DecimalToB26
nNumber = nNumber 26
Loop
DecimalToB26 = NumberToSymbol(nNumber) & DecimalToB26
End Function
Public Function NumberToSymbol(ByVal nNumber As Long) As String
NumberToSymbol = Chr(Asc("A") + (nNumber - 1))
End Function
"percyval" wrote in message news: > > > "jm" a écrit : > >> "percyval" wrote in message >> news: >> > je desire faire une fonction qui permettrai de numeroter de la meme >> > facon >> > que >> > le fait excell pour les entetes de colonne >> > (1=A....26=Z...27ª.........104=CZ) >> >> > Merci pour ta reponse rapide :) > > mais .... a marche juste un peu plus loin que la mienne > > 26 = Z > 27 = AA > 28 = AA !! > 29 = AB > > v tester avec un tableau comme tu disait plus haut
arf oui tu as raison, j'ai posté trop vite. un petit ajustement s'impose, car c'est le Value = Int(Value / 27) qui n'est pas correct. Il faut tenir compte du cas particulier ou on a forcé v1 à 1.
-- jean-marc
Je continu de chercher..
J'ai bien trouvé un code sur ton site que j'ai modifié mais toujours un pb sur le "Z"
'Decimal vers Hexavigesimal windows Public Function DecimalToB26(ByVal nNumber As Long) As String Do While (nNumber >= 26) DecimalToB26 = NumberToSymbol((nNumber Mod 26)) & DecimalToB26 nNumber = nNumber 26 Loop DecimalToB26 = NumberToSymbol(nNumber) & DecimalToB26 End Function
Public Function NumberToSymbol(ByVal nNumber As Long) As String NumberToSymbol = Chr(Asc("A") + (nNumber - 1)) End Function
je rame je ram
Vincent Guichard
si le récursif ne te dérange pas,
Private Function DecimalToB26(ByVal nNumber As Long) As String Const s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" If nNumber <= 0 Then Exit Function Dim i As Integer i = ((nNumber - 1) Mod 26) + 1 nNumber = (nNumber - i) 26 DecimalToB26= DecimalToB26(nNumber) & Mid(s, i, 1) End Function
devrais faire l'affaire
Vincent Guichard
si le récursif ne te dérange pas,
Private Function DecimalToB26(ByVal nNumber As Long) As String
Const s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
If nNumber <= 0 Then Exit Function
Dim i As Integer
i = ((nNumber - 1) Mod 26) + 1
nNumber = (nNumber - i) 26
DecimalToB26= DecimalToB26(nNumber) & Mid(s, i, 1)
End Function
Private Function DecimalToB26(ByVal nNumber As Long) As String Const s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" If nNumber <= 0 Then Exit Function Dim i As Integer i = ((nNumber - 1) Mod 26) + 1 nNumber = (nNumber - i) 26 DecimalToB26= DecimalToB26(nNumber) & Mid(s, i, 1) End Function
devrais faire l'affaire
Vincent Guichard
Jean-marc
"Vincent Guichard" a écrit dans le message de news: 4566dd11$0$5083$
si le récursif ne te dérange pas,
Private Function DecimalToB26(ByVal nNumber As Long) As String Const s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" If nNumber <= 0 Then Exit Function Dim i As Integer i = ((nNumber - 1) Mod 26) + 1 nNumber = (nNumber - i) 26 DecimalToB26= DecimalToB26(nNumber) & Mid(s, i, 1) End Function
Hello,
En complément de la réponse de Vincent, voici ma version, non récursive:
Public Function DecimalToB26(ByVal n As Long) As String Dim szResult As String Dim v As Long
While n > 0 v = (n - 1) Mod 26 n = (n - 1) 26 szResult = Chr$(65 + v) & szResult Wend DecimalToB26 = szResult End Function
Les 2 fonctions sont testées et retournent bien sur les mêmes valeurs :-)
Nos 2 fonctions (faites séparément, je précise!) utilisent la même astuce à savoir de travailler sur (nombre - 1) pour tenir compte du fait que dans cette numérotation, il n'y a pas de 0.
"Vincent Guichard" <vg.bleuciel.sa@wanadoo.fr> a écrit dans le message de
news: 4566dd11$0$5083$ba4acef3@news.orange.fr...
si le récursif ne te dérange pas,
Private Function DecimalToB26(ByVal nNumber As Long) As String
Const s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
If nNumber <= 0 Then Exit Function
Dim i As Integer
i = ((nNumber - 1) Mod 26) + 1
nNumber = (nNumber - i) 26
DecimalToB26= DecimalToB26(nNumber) & Mid(s, i, 1)
End Function
Hello,
En complément de la réponse de Vincent, voici ma version,
non récursive:
Public Function DecimalToB26(ByVal n As Long) As String
Dim szResult As String
Dim v As Long
While n > 0
v = (n - 1) Mod 26
n = (n - 1) 26
szResult = Chr$(65 + v) & szResult
Wend
DecimalToB26 = szResult
End Function
Les 2 fonctions sont testées et retournent bien sur les mêmes valeurs :-)
Nos 2 fonctions (faites séparément, je précise!) utilisent la même astuce
à savoir de travailler sur (nombre - 1) pour tenir compte du fait que dans
cette numérotation, il n'y a pas de 0.
"Vincent Guichard" a écrit dans le message de news: 4566dd11$0$5083$
si le récursif ne te dérange pas,
Private Function DecimalToB26(ByVal nNumber As Long) As String Const s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" If nNumber <= 0 Then Exit Function Dim i As Integer i = ((nNumber - 1) Mod 26) + 1 nNumber = (nNumber - i) 26 DecimalToB26= DecimalToB26(nNumber) & Mid(s, i, 1) End Function
Hello,
En complément de la réponse de Vincent, voici ma version, non récursive:
Public Function DecimalToB26(ByVal n As Long) As String Dim szResult As String Dim v As Long
While n > 0 v = (n - 1) Mod 26 n = (n - 1) 26 szResult = Chr$(65 + v) & szResult Wend DecimalToB26 = szResult End Function
Les 2 fonctions sont testées et retournent bien sur les mêmes valeurs :-)
Nos 2 fonctions (faites séparément, je précise!) utilisent la même astuce à savoir de travailler sur (nombre - 1) pour tenir compte du fait que dans cette numérotation, il n'y a pas de 0.