faire un "et" logique avec masque (résolu)

anthony0903

XLDnaute Nouveau
bonjours,
Mon problème est le suivant:
-Je souhaite faire une opération bit a bit sur excel avec un masque (je crois que sa s'appel comme ça) mais lorsque je tape une valeur supérieur à 2147483648 il m'affiche une erreur 6 "dépassement de capacité"

le programme servira a la chose suivante :
pour le travail nous avons un enregistrement sur un PC de tout les mouvement, mesure, défaut, ect... de nos machines en temps réelle (IBA padu)
Comme nous avons beaucoup de défaut on a fait sur le pc IBA un enregistrement de tout les défaut sur une seul courbe pour avoir le chiffre décimal on doit faire le calcul suivant sur le pc "abs(valeur du signal +1)"
avec se numéro par exemple 1500 en décimal correspond 10111011100 en binaire:
donc ici on aura :
défaut 1 => pas défaut =>0
défaut 2 => pas défaut =>0
défaut 3 => en défaut =>1
défaut 4 => en défaut =>1
défaut 5 => en défaut =>1
défaut 6 => pas défaut =>0
défaut 7 => en défaut =>1
défaut 8 => en défaut =>1
défaut 9 => en défaut =>1
défaut 10 => pas défaut =>0
défaut 11 => en défaut =>1

T11 correspond au textbox ou je rentre ma valeur décimal ecrit dans une variable appeler "variable"
v1 à v31 me serve pour modifier mon listeview par la suite
cela fonctionne jusqu’à la variable "ae" après les valeurs sont pas bonne

voila le code:

Code:
a = 1
b = 2
c = 4
d = 8
e = 16
f = 32
g = 64
h = 128
ia = 256
ja = 512
k = 1024
l = 2048
m = 4096
n = 8192
o = 16384
p = 32768
q = 65536
r = 131072
t = 262144
u = 524288
v = 1048576
w = 2097152
x = 4194304
y = 8388608
Z = 16777216
aa = 33554432
ab = 67108864
ac = 134217728
ad = 268435456
ae = 536870912
af = 1073741824
ag = 2147483648#

variable = T11.Value
If variable And a Then
v1 = "1"
Else
v1 = "0"
End If
If variable And b Then
v2 = "1"
Else
v2 = "0"
End If
If variable And c Then
v3 = "1"
Else
v3 = "0"
End If
If variable And d Then
v4 = "1"
Else
v4 = "0"
End If
If variable And e Then
v5 = "1"
Else
v5 = "0"
End If
If variable And f Then
v6 = "1"
Else
v6 = "0"
End If
If variablee And g Then
v7 = "1"
Else
v7 = "0"
End If
If variable And h Then
v8 = "1"
Else
v8 = "0"
End If
If variable And ia Then
v9 = "1"
Else
v9 = "0"
End If
If variable And ja Then
v10 = "1"
Else
v10 = "0"
End If
If variable And k Then
v11 = "1"
Else
v11 = "0"
End If
If variable And l Then
v12 = "1"
Else
v12 = "0"
End If
If variable And m Then
v13 = "1"
Else
v13 = "0"
End If
If variable And n Then
v14 = "1"
Else
v14 = "0"
End If
If variable And o Then
v15 = "1"
Else
v15 = "0"
End If
If variable And p Then
v16 = "1"
Else
v16 = "0"
End If
If variable And q Then
v17 = "1"
Else
v17 = "0"
End If
If variable And r Then
v18 = "1"
Else
v18 = "0"
End If
If variable And s Then
v19 = "1"
Else
v19 = "0"
End If
If variable And t Then
v20 = "1"
Else
v20 = "0"
End If
If variable And u Then
v21 = "1"
Else
v21 = "0"
End If
If variable And v Then
v22 = "1"
Else
v22 = "0"
End If
If T11.Value And w Then
v23 = "1"
Else
v23 = "0"
End If
If variable And x Then
v24 = "1"
Else
v24 = "0"
End If
If variable And y Then
v25 = "1"
Else
v25 = "0"
End If
If variable And Z Then
v26 = "1"
Else
v26 = "0"
End If
If variable And aa Then
v27 = "1"
Else
v27 = "0"
End If
If variable And ab Then
v28 = "1"
Else
v28 = "0"
End If
If variable And ac Then
v29 = "1"
Else
v29 = "0"
End If
If variable And ad Then
v30 = "1"
Else
v30 = "0"
End If
If variable And ae Then
v31 = "1"
Else
v31 = "0"
End If
If variable And ag Then
v32 = "1"
Else
v32 = "0"
End If

Merci
j’espère que vous pourrai m'aider car je cherche maintenant depuis 2 semaine je sais déjà pas grand chose sur le binaire et la programmation excel donc sa fous un coup au moral
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : faire un "et" logique avec masque

Bonsoir,

A voir comment sont déclarées tes variables, perso j'utiliserais un tableau virtuel....

Code:
Dim t(1 To 35) As Double, i As Byte, x As Double
x = 1
For i = 1 To 35
    t(i) = x
    x = x * 2
Next i

bonne soirée
@+
 

vgendron

XLDnaute Barbatruc
Re : faire un "et" logique avec masque

Bonsoir,

vois si ca te convient:

Code:
Sub test()
'partie création du tableau contenant les défauts
variable = Range("B5")
Dim v(1 To 35) As Double

i = 1
While variable > 1
    v(i) = variable Mod 2
    i = i + 1
    variable = Int(variable / 2)
Wend

'partie affichage du tableau dans un msgbox

strMessage = ""
    For Boucle = 1 To i
        strMessage = strMessage & v(Boucle) & vbLf
    Next Boucle
    
    MsgBox strMessage

End Sub

Pardon, pour le dernier nombre que tu as rentré, ca ne marche pas non plus, c'est que tu dois atteindre la limite max du type Long:
cf aide VBA
Les variables de type Double (à virgule flottante en double précision) sont stockées sous la forme de nombres à virgule flottante de 64 bits (8 octets) IEEE dont la valeur est comprise entre -1,79769313486231E308 et -4,94065645841247E-324 pour les nombres négatifs et entre 4,94065645841247E-324 et 1,79769313486231E308 pour les positifs. Le caractère de déclaration de type Double est le signe #.

Pardon, je rectifie à nouveau: le max est loin d'être atteint: en 10 puissance 308..
par contre, le souci vient du MOD qui ne fonctionne pas avec les doubles apparemment...
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : faire un "et" logique avec masque

après quelques recherches

Code:
Sub test()
variable = Range("B5")
Dim v(1 To 50) As Double


i = 1
While variable > 1
    v(i) = ResteModulo2(variable)
    i = i + 1
    variable = Int(variable / 2)
Wend

MsgBox ("il y a " & i & " vecteurs")


strMessage = ""
    For Boucle = 1 To i
        strMessage = strMessage & v(Boucle) & vbLf
    Next Boucle
    
    MsgBox strMessage

End Sub



Function ResteModulo2(ByVal str As String) As Integer
 
Dim i As Integer
Dim Reste As Integer
 
Reste = 0
For i = 0 To Len(str) - 1
    Reste = (Reste * 10 + CInt(Mid(str, i + 1, 1))) Mod 2
Next i
 
ResteModulo2 = Reste
 
End Function

la fonction mod a été recrée pour permettre de travailler sur des "doubles"
 

vgendron

XLDnaute Barbatruc
Re : faire un "et" logique avec masque

avec une petite explication tout de meme sur la construction du tableau v(i)

partons de 22 comme dans l'exemple que j'ai trouvé sur le net
22 / 2 = 11, reste 0
11 / 2 = 5, reste 1
5 / 2 = 2, reste 1
2 / 2 = 1, reste 0
1 / 2 = 0, reste 1
On obtient donc : 10110

voila ;-)

avec du coup encore une correction: ma boucle allait un cran trop loin:

Code:
Sub test()
variable = Range("B5")
Dim v(1 To 50) As Double


i = 1
While variable >= 1
    v(i) = ResteModulo2(variable)
    i = i + 1
    variable = Int(variable / 2)
Wend

MsgBox ("il y a " & i - 1 & " vecteurs")


strMessage = ""
    For Boucle = i - 1 To 1 Step -1
        strMessage = strMessage & v(Boucle) & vbLf
    Next Boucle
    
    MsgBox strMessage

End Sub
 

anthony0903

XLDnaute Nouveau
Re : faire un "et" logique avec masque

je doit vraiment etre nul j'ai respecter le code mais je n'arrive pas a faire se que je veut avec je voudrai faire


Code:
ag = 2147483648
 if 2147483648 and ag then
v32="1"
else
v32="0"
end if
ici je souhaiterai avoir un résultat v32="1" mais je n'est pas comme résultat
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : faire un "et" logique avec masque

Salut,

déjà on va recommencer par les basiques pour faire simple et clair:

1) poste un fichier exemple qui donne la structure de ton fichier et le résultat attendu
2) de ce que j'ai compris: tu saisis un nombre: ex: 1500
3) ce nombre est converti en binaire:--> comment fais tu la conversion?
dans le code que je t'ai posté, la conversion se fait dans le tableau v
4) ensuite: ton code binaire: chaque 1 correspond à un défaut présent, et chaque 0 correspond à pas de défaut: c'est ca?

et en fait, je ne comprend pas ce que tu testes quand tu fais tous les AND..
directement sous excel: et(val1;val2) te retourne vrai à partir du moment ou l'une des 2 valeurs n'est pas vide


dans ce que je t'ai donné, qu'est ce qu'il ne va pas par rapport à ta demande?
 

vgendron

XLDnaute Barbatruc
Re : faire un "et" logique avec masque

Re,

Ci joint ton fichier modifié: j'y ai intégré mes deux macros: ce qui réduit considérablement ton code: il n'y a plus tous les if ="1" ="0" etc etc..

maintenant: je ne comprend pas tout
lorsque tu mets un nombre dans le textbox T11, c'est la que tu convertis en Binaire et que tu colores en rouge la ou les lignes..
mais le bouton "convertir décimal en binaire".. il sert à quoi? chez moi. la macro plante et s'arrete..
 

Pièces jointes

  • Anthony Update.xlsm
    57.2 KB · Affichages: 78
  • Anthony Update.xlsm
    57.2 KB · Affichages: 84
  • Anthony Update.xlsm
    57.2 KB · Affichages: 66

vgendron

XLDnaute Barbatruc
Re : faire un "et" logique avec masque

avec une modif: dans la valeur finale de la boucle..
en fait, tu as 38 lignes affichées à l'ouverture du formulaire
pour pouvoir rentrer un nombre, tu dois d'abord sélectionner un sous ensemble dans le filtre.. donc tu n'as plus que 22 lignes (ou 16)

les boucles ne fonctionnent que sur les élements filtrés..

Essaie, et dis moi

pour le bouton "Convertir decimal en binaire".. j'ai toujours pas trouvé à quoi il était censé servir
 

Pièces jointes

  • Anthony Update.xlsm
    60.7 KB · Affichages: 80
  • Anthony Update.xlsm
    60.7 KB · Affichages: 93
  • Anthony Update.xlsm
    60.7 KB · Affichages: 94

anthony0903

XLDnaute Nouveau
Re : faire un "et" logique avec masque

merci pour votre aide sa marche super bien je suis soulager je vais mettre le fichier fini comme sa si quelqu'un d'autre a besoin d'aide de se coté la
merci encore
 

Pièces jointes

  • Test (1).xls
    181 KB · Affichages: 113
  • Test (1).xls
    181 KB · Affichages: 123
  • Test (1).xls
    181 KB · Affichages: 149

Discussions similaires

Réponses
7
Affichages
324

Statistiques des forums

Discussions
312 103
Messages
2 085 325
Membres
102 862
dernier inscrit
Emma35400