Tableau de correspondance? méthode rapide?

Résolu
cs_darkbol Messages postés 61 Date d'inscription lundi 7 juin 2004 Statut Membre Dernière intervention 6 décembre 2004 - 17 août 2004 à 09:51
cs_santiago69 Messages postés 91 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 17 décembre 2008 - 1 sept. 2005 à 19:06
bonjour

Je voudrais constituer une correspondance entre des nombres et des lettres. Je m'explique, une fonction ne reconnait que les chiffres pour désigner des colonnes.
ex : 1 A , 2 B

le truc c que si ca s'arrêtait seulement à Z, ce serait facile à la bourrin (entendez par là manuellement...) mais cela concerne des colonnes excel donc ca va jusquà ZZ.
Quelqu'un pourrait il m'aider à faire une correspondance de A 1 à ZZ un très grand nombre...

Merci ! C super important pour mon boulot...

"j'aime bien incrémenter... :-|

14 réponses

cs_darkbol Messages postés 61 Date d'inscription lundi 7 juin 2004 Statut Membre Dernière intervention 6 décembre 2004
18 août 2004 à 18:13
Ah ben comme tu m'as calmé, ca marche trop bien!

Et merci aussi pour les autres! ;-)))

A plus !

"j'aime trop ... :- )"
3
sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
17 août 2004 à 11:37
bon jour

methode rapide peut être pas

je pense à une 1iere approche qui pourrait t'aider

d'un chiffre 'x' vers les lettres AB:

pour trouver A :
z=x div 26 qui te donne la première lettre (si 0 alors c dons <26 donc pas de lettre) sinon z => la position de la lettre dans l'aphabet

Pour trouver B
(y=x mod 26 et z>26) qui te donne la deuxieme lettre (si 0 et alors c le caractère Z ) sinon y => la position de la lettre dans l'aphabet

gs
0
PsYKrO Messages postés 53 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 3 mai 2005
17 août 2004 à 12:31
bon c pas fini il me manque a affecter tout les lettre dans un dernier ableau je sais pas si c la solution ...peut etre ke c barbare mais bon....

ca peut te donner des idées

Dim i
Dim j
Dim lettre1
Dim lettre2
Dim lettre
Dim malettre1 As String
Dim malettre2 As String
Dim malettre

lettre1 = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
lettre2 = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")

For k = 0 To 25 Step 1


malettre = lettre1(k)

Next

For i = 0 To 25 Step 1
For j = 0 To 25 Step 1
malettre1 = lettre1(i)
malettre2 = lettre2(j)
malettre = Array(malettre1 & malettre2)
Next
Next

engros dans la variable malettre tu as toutes les lettres

Apre tu me tout ca dans un tableau allant de 1 a 26*26
et la tu as un tableau de correspondance

jy travail encore
0
PsYKrO Messages postés 53 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 3 mai 2005
17 août 2004 à 12:44
Bon moi ca marche

je sais pas si c optimiser mais ca marche

Dim i
Dim j
Dim k
Dim l
l = -1
Dim tableau(70)
Dim lettre1
Dim lettre2
Dim malettre1
Dim malettre2
Dim malettre

lettre1 = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
lettre2 = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")

For k = 0 To 25 Step 1
l = l + 1
malettre = lettre1(k)
tableau(l) = malettre
Next

For i = 0 To 25 Step 1
For j = 0 To 25 Step 1
malettre1 = lettre1(i)
malettre2 = lettre2(j)
malettre = malettre1 & malettre2
l = l + 1
tableau(l) = malettre
Next
Next
End Sub

donc dans tableau tu as toutes tes lettres

tableau(1) ="A"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PsYKrO Messages postés 53 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 3 mai 2005
17 août 2004 à 12:46
oups
a La place de

Dim tableau(70)

c 'est

Dim tableau(701)
0
sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
17 août 2004 à 12:56
point de vue optimisation ce n'est pas le top ,il ya qd meme 702 iterations, si ceci n'inflige un delai trop dans ton appli ca va pas de bobo

merci pour ton code

Personnellement j'aurai crée des fonctions de conversions (peut être moins consomateur en memoire et en temps d'exécution)

Mais le principal c que cela fonctionne

gs
0
PsYKrO Messages postés 53 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 3 mai 2005
17 août 2004 à 13:21
oui ... il me semble aussi mais bon je suis o boulot et je pe pas consacré tout mon temps à ça ..Bon niveau temps d'exuction c assez rapide mais bon si un jour on a plus de 10000000000 valeur c trop long

En hacking il me semble ke je lé utilisé pout trouve un password et ca s'appelle Passage en Force brute (a verifier) cette méthode aujourd hui est inutile car elle est facilement blocable et aussi trop trop longue ........ si tu as un code qui fait 26caractere avec dedans chiffre lettre et "_" tu seras mort avant ke ton programme se termine looool

Sinon au passage sgrant tu serais pas utliser lles multipage???????????
0
sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
17 août 2004 à 14:03
Merci pour les infos,
et desolé je n'utilise pas les multipages,
g bien vu ta question posé sur le forum

gs
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
17 août 2004 à 19:47
Bonjour
dans les 2 sens :

Private Function Nb2Lt(Nombre As Integer) As StringIf Nombre 702 Then Nb2Lt "ZZ":        Exit Function

If Nombre < 27 Then Nb2Lt = Chr$(64 + Nombre): Exit Function

Nb2Lt = Chr$(Nombre \ 26 + 64) & Chr$(Nombre Mod 26 + 64)
End Function
'---------------------------------------------
Private Function Lt2Nb(Lettre As String) As Integer
Lettre = UCase$(Lettre)If Len(Lettre) 1 Then Lt2Nb Asc(Lettre) - 64: Exit Function

Lt2Nb = 26 * (Asc(Left$(Lettre, 1)) - 64) + Asc(Mid$(Lettre, 2, 1)) - 64
End Function
0
cs_Paatou Messages postés 3 Date d'inscription dimanche 24 juillet 2005 Statut Membre Dernière intervention 1 septembre 2005
7 août 2005 à 12:01
Salut,



ATTENTION : cette fonction est effectivement tres pratique, mais elle est buggee.

En effet, si vous essayez de convertir 52 vous obtenez B@ au lieu de AZ, de meme 78 donne C@, ....
0
cs_Paatou Messages postés 3 Date d'inscription dimanche 24 juillet 2005 Statut Membre Dernière intervention 1 septembre 2005
7 août 2005 à 12:25
Je propose cette correction :



Private Function Nb2Lt(Nombre As Integer) As String

If Nombre 702 Then Nb2Lt "ZZ": Exit Function



If Nombre < 27 Then Nb2Lt = Chr$(64 + Nombre): Exit Function



If (Nombre Mod 26 = 0) Then

Nb2Lt = Chr$(Nombre \ 26 - 1 + 64) & Chr$(26 + 64)

Else

Nb2Lt = Chr$(Nombre \ 26 + 64) & Chr$(Nombre Mod 26 + 64)

End If

End Function
0
cs_santiago69 Messages postés 91 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 17 décembre 2008
27 août 2005 à 19:13
et voila une methode ULTRA ULTRA rapide

si tu utilise excel, il y a aussi la formule suivante :
=SUBSTITUE(ADRESSE(1;A1;4);"1";"")
avec la cellule A1 qui contient le numero de colonne

si vraiment c'est vba que tu utilise, utilise la fonction suivante :
= Replace(Replace(Cells(1, Nombre).Address, "$", ""), "1", "")
avec Nombre qui contient ton numero de col
0
cs_Paatou Messages postés 3 Date d'inscription dimanche 24 juillet 2005 Statut Membre Dernière intervention 1 septembre 2005
1 sept. 2005 à 15:05
Ah oui !! Excellent cette methode hehe, comment l'as tu trouvee ?



elle fait la conversion chiffre => lettre, mais comment fais tu l'operation inverse ?
0
cs_santiago69 Messages postés 91 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 17 décembre 2008
1 sept. 2005 à 19:06
et bien dans le meme style on a :

=COLONNE(INDIRECT(A1&"1";VRAI))
avec la cellule A1 qui contient la lettre de colonne

=Range(Colonne & "1").Column
avec Colonne qui contient la lettre de colonne

je sais plus comment j'ai trouve mais je me sert souvent des adresses de cellule.
par exemple si tu fais un tableau et que dans la colonne B tu met un increment auto :
B2=1, B3=B2+1, B4=B3+1, B5=B4+1, etc...
tout va bien jusqu'au jour ou tu insere une ligne avant la ligne 4 par exemple, tu te retrouve avec :
B2=1, B3=B2+1, B5=B3+1, B6=B5+1, etc...

j'en arrive au coeur du probleme... dans ces cas j'utilise la formule magique :
=INDIRECT(ADRESSE(LIGNE()-1;COLONNE()))+1

ainsi quoi que l'on fasse au tableau, suppression, insertion, decalage, etc... chaque cellule prend la valeur de la cellule qui est exactement au dessus d'elle et y ajoute 1.

voila

il y a 10 types de personnes : ceux qui comprennent le binaire et ceux qui ne le comprennent pas.
0
Rejoignez-nous