Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Stockage et addition de variables. Conversion de chiffres binaires en décimaux.

12 réponses
Avatar
JeanMickey
Bonjour,
J'ai essay=E9 de faire un programme de conversion de chiffres
binaires en chiffres d=E9cimaux. Malheureusement, dans la partie marqu=E9e
par un commentaire ('), je ne parviens pas =E0 stocker une variable
temporaire ni =E0 l'ajouter =E0 d'autres. Quelqu'un peut-il m'aider? Voici
la partie du programme o=F9 le probl=E8me se pose :

NbreBinaire =3D InputBox("Choisissez un nombre binaire ")
LongNbreBinaire =3D Len(NbreBinaire)
For i =3D LongNbreBinaire To 1 Step -1
If Mid(NbreBinaire, i, 1) =3D 0 Then
ChiffreDecimal1 =3D 0 * (2 ^ (LongNbreBinaire - 1))
ElseIf Mid(NbreBinaire, i, 1) =3D 1 Then
VarTemp =3D 0
ChiffreDecimal =3D 1 * (2 ^ (LongNbreBinaire - 1))

'La variable est stock=E9e mais je n'arrive pas =E0 l'aditionner =E0
d'autres
'par la suite et =E0 trouver le bon r=E9sultat

VarTemp =3D ChiffreDecimal
End If
Next i

Worksheets(3).Range("B2").Value =3D VarTemp

10 réponses

1 2
Avatar
isabelle
bonjour JeanMickey,

ChiffreDecimal = ChiffreDecimal + 1 * (2 ^ (LongNbreBinaire - 1))

autre exemple :

Public Function b2b10(n) 'fonction transforme un chiffre de la base 2 à
la base 10
Dim s As Double
nc = Len(n)
For i = nc To 1 Step -1
x = Asc(UCase(Mid(n, i, 1)))
Select Case x
Case 48 To 57: s = s + (x - 48) * 2 ^ (nc - i)
Case 65 To 70: s = s + (x - 55) * 2 ^ (nc - i)
End Select
Next i
b2b10 = s
End Function 'Autheur : Serge (allias garnotte) de Québec

A1 = '111111100001111000111
dans la feuille de calcul : ²b10(A1) resultat : 2081735

isabelle

JeanMickey a écrit :
Bonjour,
J'ai essayé de faire un programme de conversion de chiffres
binaires en chiffres décimaux. Malheureusement, dans la partie marquée
par un commentaire ('), je ne parviens pas à stocker une variable
temporaire ni à l'ajouter à d'autres. Quelqu'un peut-il m'aider? Voici
la partie du programme où le problème se pose :

NbreBinaire = InputBox("Choisissez un nombre binaire ")
LongNbreBinaire = Len(NbreBinaire)
For i = LongNbreBinaire To 1 Step -1
If Mid(NbreBinaire, i, 1) = 0 Then
ChiffreDecimal1 = 0 * (2 ^ (LongNbreBinaire - 1))
ElseIf Mid(NbreBinaire, i, 1) = 1 Then
VarTemp = 0
ChiffreDecimal = 1 * (2 ^ (LongNbreBinaire - 1))

'La variable est stockée mais je n'arrive pas à l'aditionner à
d'autres
'par la suite et à trouver le bon résultat

VarTemp = ChiffreDecimal
End If
Next i

Worksheets(3).Range("B2").Value = VarTemp



Avatar
MichDenis
Ceci n'est pas suffisant ?

'Décimale en binaire
x = Application.Bin2Dec(TaValeur)

'Binaire en hexadécimale
t = Application.Bin2Hex(TaValeur)

'Binaire en octodécimale
d = Application.Bin2Oct(TaValeur)



"JeanMickey" a écrit dans le message de groupe de discussion :

Bonjour,
J'ai essayé de faire un programme de conversion de chiffres
binaires en chiffres décimaux. Malheureusement, dans la partie marquée
par un commentaire ('), je ne parviens pas à stocker une variable
temporaire ni à l'ajouter à d'autres. Quelqu'un peut-il m'aider? Voici
la partie du programme où le problème se pose :

NbreBinaire = InputBox("Choisissez un nombre binaire ")
LongNbreBinaire = Len(NbreBinaire)
For i = LongNbreBinaire To 1 Step -1
If Mid(NbreBinaire, i, 1) = 0 Then
ChiffreDecimal1 = 0 * (2 ^ (LongNbreBinaire - 1))
ElseIf Mid(NbreBinaire, i, 1) = 1 Then
VarTemp = 0
ChiffreDecimal = 1 * (2 ^ (LongNbreBinaire - 1))

'La variable est stockée mais je n'arrive pas à l'aditionner à
d'autres
'par la suite et à trouver le bon résultat

VarTemp = ChiffreDecimal
End If
Next i

Worksheets(3).Range("B2").Value = VarTemp
Avatar
isabelle
bonjour Denis,

c'est limité à 511 pour xl2002, c'est à combien sur xl2007 ?

isabelle

MichDenis a écrit :
Ceci n'est pas suffisant ?

'Décimale en binaire
x = Application.Bin2Dec(TaValeur)

'Binaire en hexadécimale
t = Application.Bin2Hex(TaValeur)

'Binaire en octodécimale
d = Application.Bin2Oct(TaValeur)



"JeanMickey" a écrit dans le message de groupe de discussion :

Bonjour,
J'ai essayé de faire un programme de conversion de chiffres
binaires en chiffres décimaux. Malheureusement, dans la partie marquée
par un commentaire ('), je ne parviens pas à stocker une variable
temporaire ni à l'ajouter à d'autres. Quelqu'un peut-il m'aider? Voici
la partie du programme où le problème se pose :

NbreBinaire = InputBox("Choisissez un nombre binaire ")
LongNbreBinaire = Len(NbreBinaire)
For i = LongNbreBinaire To 1 Step -1
If Mid(NbreBinaire, i, 1) = 0 Then
ChiffreDecimal1 = 0 * (2 ^ (LongNbreBinaire - 1))
ElseIf Mid(NbreBinaire, i, 1) = 1 Then
VarTemp = 0
ChiffreDecimal = 1 * (2 ^ (LongNbreBinaire - 1))

'La variable est stockée mais je n'arrive pas à l'aditionner à
d'autres
'par la suite et à trouver le bon résultat

VarTemp = ChiffreDecimal
End If
Next i

Worksheets(3).Range("B2").Value = VarTemp





Avatar
MichDenis
c'est la même chose pour 2007.




"isabelle" a écrit dans le message de groupe de discussion :
uR$
bonjour Denis,

c'est limité à 511 pour xl2002, c'est à combien sur xl2007 ?

isabelle

MichDenis a écrit :
Ceci n'est pas suffisant ?

'Décimale en binaire
x = Application.Bin2Dec(TaValeur)

'Binaire en hexadécimale
t = Application.Bin2Hex(TaValeur)

'Binaire en octodécimale
d = Application.Bin2Oct(TaValeur)



"JeanMickey" a écrit dans le message de groupe de discussion :

Bonjour,
J'ai essayé de faire un programme de conversion de chiffres
binaires en chiffres décimaux. Malheureusement, dans la partie marquée
par un commentaire ('), je ne parviens pas à stocker une variable
temporaire ni à l'ajouter à d'autres. Quelqu'un peut-il m'aider? Voici
la partie du programme où le problème se pose :

NbreBinaire = InputBox("Choisissez un nombre binaire ")
LongNbreBinaire = Len(NbreBinaire)
For i = LongNbreBinaire To 1 Step -1
If Mid(NbreBinaire, i, 1) = 0 Then
ChiffreDecimal1 = 0 * (2 ^ (LongNbreBinaire - 1))
ElseIf Mid(NbreBinaire, i, 1) = 1 Then
VarTemp = 0
ChiffreDecimal = 1 * (2 ^ (LongNbreBinaire - 1))

'La variable est stockée mais je n'arrive pas à l'aditionner à
d'autres
'par la suite et à trouver le bon résultat

VarTemp = ChiffreDecimal
End If
Next i

Worksheets(3).Range("B2").Value = VarTemp





Avatar
Charabeuh
Bonjour,

avec une formule:

En A1 le nombre en base 2 à convertir - en format texte (exemple '11100110)

puis
En A2 mettre la formule suivante :
=SOMME(SI(ESTERREUR(STXT($A$1;NBCAR($A$1)-{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36}+1;1));0;STXT($A$1;NBCAR($A$1)-{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36}+1;1))*2^({1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36}-1))

valider la formule matricielle par CTRL+Shift+Entrée.

Cela devrait fonctionner...

fichier : http://cjoint.com/?djnAQyHAGp


Slt




"JeanMickey" a écrit dans le message de
news:
Bonjour,
J'ai essayé de faire un programme de conversion de chiffres
binaires en chiffres décimaux. Malheureusement, dans la partie marquée
par un commentaire ('), je ne parviens pas à stocker une variable
temporaire ni à l'ajouter à d'autres. Quelqu'un peut-il m'aider? Voici
la partie du programme où le problème se pose :

NbreBinaire = InputBox("Choisissez un nombre binaire ")
LongNbreBinaire = Len(NbreBinaire)
For i = LongNbreBinaire To 1 Step -1
If Mid(NbreBinaire, i, 1) = 0 Then
ChiffreDecimal1 = 0 * (2 ^ (LongNbreBinaire - 1))
ElseIf Mid(NbreBinaire, i, 1) = 1 Then
VarTemp = 0
ChiffreDecimal = 1 * (2 ^ (LongNbreBinaire - 1))

'La variable est stockée mais je n'arrive pas à l'aditionner à
d'autres
'par la suite et à trouver le bon résultat

VarTemp = ChiffreDecimal
End If
Next i

Worksheets(3).Range("B2").Value = VarTemp
Avatar
garnote
Plus généralement :

Public Function baseb10(n As String, b As Byte) As Long
' Transforme un nombre n de base b en un nombre de base 10.
' Formatez la cellule contenant n en texte et assurez-vous
' que vous entrez la bonne base de départ.
' b compris entre 2 et 16.
x = Len(n)
For i = x To 1 Step -1
c = UCase(Mid(n, i, 1))
ca = Asc(c)
Select Case ca
Case 48 To 57: nd = nd + c * b ^ (x - i)
Case 65 To 70: nd = nd + (ca - 55) * b ^ (x - i)
End Select
Next i
baseb10 = nd
End Function

Public Function base10b(n As Long, b As Byte) As String
' Transforme un nombre entier positif de base 10
' en un nombre d'une base b de votre choix.
' b doit être compris entre 2 et 16
Dim x(1 To 100)
Dim r(1 To 100)
Dim table
table = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F")
x(1) = n
i = 1
Do Until x(i) = 0
i = i + 1
x(i) = Int(x(i - 1) / b)
r(i - 1) = x(i - 1) - b * x(i)
Loop
For j = i - 1 To 1 Step -1
rep = rep & table(r(j))
Next j
base10b = rep
End Function

Public Function baseb1b2(n As String, b1 As Byte, b2 As Byte) As String
' Transforme un nombre n de base b1 en un nombre de base b2.
'' Formatez la cellule contenant n en texte.
' Assurez-vous que la base de départ b1 est bien la bonne.
' b1 et b2 compris entre 2 et 16.
Dim x(1 To 100)
Dim r(1 To 100)
Dim table
n = baseb10(n, b1)
table = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F")
x(1) = n
i = 1
Do Until x(i) = 0
i = i + 1
x(i) = Int(x(i - 1) / b2)
r(i - 1) = x(i - 1) - b2 * x(i)
Loop
For j = i - 1 To 1 Step -1
rep = rep & table(r(j))
Next j
baseb1b2 = rep
End Function

Serge
Avatar
garnote
Ave Jean, Isabelle, Denis et Charabeuh,

Mes tites fonctions semblent aller beaucoup plus loin
que les fonctions Excel ;-)
En base 10, la limite me semble être 999 999 999.

Qu'en pensez-vous ?

http://www.cijoint.fr/cjlink.php?file=cj200903/cijDu38ocJ.xls


Serge
Avatar
garnote
Ave Jean, Isabelle, Denis et Charabeuh,

Maudite moisson, pardon, boisson !
Pas envoyé le bon document.
Voici le con, pardon, le bon :
http://www.cijoint.fr/cjlink.php?file=cj200903/cijtx1qKAR.xls

À demain

Serge
Avatar
garnote
En remplaçant Long par Double, la limite en base 10
passe de 999 999 999 ä 999 999 999 999 999.
M'enfin il me semble !

Public Function baseb10(n As String, b As Byte) As Double
Public Function base10b(n As Double, b As Byte) As String

Là c'est terminé pour de bon, fondue chinoise oblige ;-)

A+

Serge
Avatar
Charabeuh
Bonjour,

J'avoue mon oignon rance sur ce sujet.
Le type double, je crois, représente un nombre décimal sous la forme d'un
produit de 3 termes: un signe (1 bit), une puissance positive ou négative de
2 (11 bits) et une mantisse de la forme 1,m (52 bits). Un entier est donc
aussi converti en une représentation via la base 2.

Je ne sais pas à partir de quelle valeur d'entier la représentation
entier/double ne représente plus le même nombre.

De plus, il y a la représentation affichée par Excel qui passe
automatiquement à une représentation à exposant de 10 à partir d'une
certaine valeur (99 999 ..... 999) mais quid de la représentation interne ?

Je reconnais m'y perdre un peu. Tes fonctions semblent en effet aller plus
loin dans les grands entiers.

Toujours est-il que par sureté, je pense que si on manipule des entiers dans
un programme alors il vaut mieux typer ses variables en entier (simple ou
long) pour être certain de provoquer une erreur en cas de dépassement et
d'éviter les conversions sujettes à des effets d'approximation inconnus.

Quoi qu'il en soit, avec tes fonctions, je vais passer mes rentrées
bancaires en base disons 7 et laisser mes dépenses en base 10. Si, grâce à
tes fonctions, je présente à mon banquier mes comptes sous cette forme et
assez vite (très vite!), il ne devrait y voir que du feu et me féliciter
d'avoir redressé ma situation aussi rapidement. En passant, je pourrais
aussi lui demander comment vont bien les comptes de la banque ? Un petit
mot gentil à un banquier en difficulté ne mange pas de pain et lui mettrait
un peu de baume au coeur. D'ailleurs il pourra me dire si les pertes et les
prêts de l'état sont en type double ou s'il a fallu construire un nouveau
type. Pour mon propre compte le type Byte suffit largement.

Trêve de chinoiseries, était-elle bonne la fondue ? Si on trempe les
raviolis dans l'eau chaude d'une marmite , je suppute que les lèvres n'ont
pas été trempées que dans l'eau froide d'un verre ? :-)

Charabeuh




"garnote" a écrit dans le message de
news:
En remplaçant Long par Double, la limite en base 10
passe de 999 999 999 ä 999 999 999 999 999.
M'enfin il me semble !

Public Function baseb10(n As String, b As Byte) As Double
Public Function base10b(n As Double, b As Byte) As String

Là c'est terminé pour de bon, fondue chinoise oblige ;-)

A+

Serge



1 2