Convertisseur hexavigésimal

0/5 (11 avis)

Vue 3 236 fois - Téléchargée 199 fois

Description

Ce convertisseur comme son nom l'indique permet d'effectuer l'incrémentation d'une combinaison de lettres alphabétiques, en lui indiquant l'intervalle d'ajout ou de soustraction. Exemple : ABXA + 3 = ABXD

Source / Exemple :


Private Sub Command1_Click()
Dim ta(1 To 4) As Variant 'Déclaration du tableau ta de 4 cases
Dim ia As Integer, Resultat As Long, Interval As Long
If Option1.Value = False And Option2.Value = False Then
    MsgBox ("Veuillez choisir une des deux options disponibles")
Exit Sub
End If
ta(4) = Txtinval1.Text
ta(3) = Txtinval2.Text
ta(2) = Txtinval3.Text
ta(1) = Txtinval4.Text
For ia = 1 To 4
    If ta(ia) = "" Then
        MsgBox ("Veuillez saisir les lettres demandées")
    Exit Sub
    End If
Next ia
If TxtInVal5.Text = "" Then
    MsgBox ("Veuillez saisir l'intervalle de conversion")
    Exit Sub
End If
Interval = TxtInVal5.Text
If Interval <= 0 Or Interval > 456975 Then
    MsgBox ("L'intervalle doit être un nombre entier compris entre 1 et 456975")
Exit Sub
End If
For ia = 1 To 4
    ta(ia) = Asc(ta(ia)) - 65 'On convertit ici chaque lettre de l'alphabet en valeur numérique
Next ia
Resultat = ta(1) * 26 ^ 0 + ta(2) * 26 ^ 1 + ta(3) * 26 ^ 2 + ta(4) * 26 ^ 3 'c'est la formule de conversion hexavigésimale
If Option1.Value = True Then 'ici on ajoute l'intervalle numérique ou on le retranche selon le choix de l'utilisateur
    Resultat = Resultat + Interval
Else
    Resultat = Resultat - Interval
End If
If Resultat < 0 Then
    Resultat = 0
End If
If Resultat > 456975 Then
    Resultat = 456975
End If
ta(1) = Resultat Mod 26
ta(2) = ((Resultat - ta(1)) / 26) Mod 26
ta(3) = (((Resultat - ta(1)) / 26 - ta(2)) / 26) Mod 26
ta(4) = ((((Resultat - ta(1)) / 26 - ta(2)) / 26) - ta(3)) / 26
For ia = 1 To 4
    ta(ia) = Chr$(ta(ia) + 65) 'On convertit les résultat numériques trouvés en lettres
Next ia
Label1.Caption = ta(1)
Label2.Caption = ta(2)
Label3.Caption = ta(3)
Label4.Caption = ta(4)
End Sub
Private Sub Option1_Click()
If Option2.Value = True Then
    Option2.Value = False
End If
End Sub
Private Sub Option2_Click()
If Option1.Value = True Then
    Option1.Value = False
End If
End Sub
Private Sub capital(keyascii As Integer)
If (keyascii >= 97) And (keyascii <= 122) Then
    keyascii = keyascii - 32
End If
End Sub
Private Sub Txtinval1_change()
Txtinval1.Text = StrConv(Txtinval1.Text, vbUpperCase)   'Convertir la lettre saisie en majuscule
End Sub
Private Sub Txtinval2_KeyPress(keyascii As Integer)
Call capital(keyascii)                          'Ou bien
End Sub
Private Sub Txtinval3_KeyPress(keyascii As Integer)
Call capital(keyascii)
End Sub
Private Sub Txtinval4_KeyPress(keyascii As Integer)
Call capital(keyascii)
End Sub

Conclusion :


J'utilise personnellement cet utilitaire dans le module de rapprochement bancaire de sage 1000. Car en désirant supprimer les écritures bancaires et comptables rapprochées d'une longue période comme une année par exemple, on se heurte à la limite d'affichage du logiciel de toutes les écritures. Il faudrait alors procéder par étapes. Un intervalle de 800 est souhaitable pour supprimer toutes les lettres de rapprochement en un seul clic.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
18
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
17 septembre 2020

Autant pour moi (String et Double)
Messages postés
18
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
17 septembre 2020

J'avais il y a quelques années fait deux fonctions de conversions (qui sont utilisable comme un long)

'Decimal vers Hexavigesimal Excel
'ces deux fonctions permettent de manipuler du texte et du nombre afin
'de les transformer en Hexavigesimal(Texte) ou en nombre(Double)
Public Function DecToB26(ByVal Value As String) As String
If Not IsNumeric(Value) Then
DecToB26 = Value
Exit Function
End If
Value = Value - 1
Dim v1 As Long
Dim Resultat As String
Resultat = ""
Do While (Value >= 0)
v1 = (Value Mod 26)
Value = Int(Value / 26) - 1
Resultat = Chr(v1 + 65) & Resultat
Loop
DecToB26 = Resultat
End Function
'Hexavigesimal windows vers Decimal
Public Function B26ToDec(ByVal MyString As String) As Double
If IsNumeric(MyString) Then
B26ToDec = MyString
Exit Function
End If
Dim v2 As Double
Dim i As Integer
Dim j As Byte
Dim Resultat As Double
'Virer les Espaces
Dim MyString2 As String
MyString2 = Replace(MyString, " ", "")
For i = Len(MyString2) To 1 Step -1
v2 = Asc(Mid(MyString2, i, 1)) - 64
If v2 < 1 Then B26ToDec = Resultat If v2 >27 Then B26ToDec Resultat
For j = 1 To (Len(MyString2) - i)
v2 = v2 * 26
Next
Resultat = Resultat + v2
Next
B26ToDec = Resultat
End Function

le sujet etais abordé ici: http://www.vbfrance.com/codes/HEXAVIGESIMAL-BASE26_40441.aspx
Messages postés
24
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
21 janvier 2014

Bonjour,
Je viens d'actualiser le code, j'ai pris en considération quelques recommandations.
@Renfield : Pour moi la programmation n'est qu'un hobby, ce n'est pas du tout ma spécialité. Mais j'aime bien ce domaine peut être que je vais suivre une formation la dessus pour approfondir mes connaissances.

Amicalement,
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
51
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
de mauvaise fois, en fin de week-end, NHenry ^^
le titre parle bien de HEXAVIGÉSIMAL (doit faire du bien au scrabble...)

concernant le code, passes par un ES_UPPER que de jouer avec ta procédure 'capital'

le code Option1_Click et Option2_Click est inutile si les optionButtons sont sur le meme conteneur

le caption statique assigné dans le Form_Load peut l'etre dans la fenetre des propriétés

ton code se réduit alors sacrément ^^

Je trouve enfin, que tu ne controle pas assez la saisie
Afficher les 11 commentaires

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.