[VBA] Ecriture dans un fichier (binary)

Ecriture dans un fichier (binary) [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 03-05-2005 à 13:14:55    

Bonjour !
 
J'ai un petit problème en VBA. Je souhaite modifier un fichier en héxadécimal.
 
J'ai une première partie du fichier qui calcul la valeur à insérer.
 
Cette partie fonctionne bien, j'ai la bonne valeur dans ma variable Fric1.
 
C'est valeur est : 2124 en décimal
 
J'ouvre donc mon fichier en Binary :
 

Code :
  1. Open Dest For Binary As 1
  2. Put #1, 8467, Fric1
  3. Close #1


 
Le problème, dans mon fichier, au lieu de juste me modifier 4 valeurs, il m'en modifie 8.
 
Donc en héxa au lieu d'avoir  
4C08 j'ai 02004C08
 
 
Si je fait :
 

Code :
  1. Open Dest For Binary As 1
  2. Put #1, 8467, 2124
  3. Close #1


 
ca fonctionne parfaitement...
 
Je n'arrive pas à trouver pourquoi !
 
Merci de votre aide :))

Reply

Marsh Posté le 03-05-2005 à 13:14:55   

Reply

Marsh Posté le 03-05-2005 à 15:38:32    

Je m'en suis (enfin) sorti en lisant un tableau, le modifier et pour finir le réenregistrer.
 
Peut être pas la méthode la plus simple mais ca fonctionne. Je suis preneur pour d'autres infos au cas ou :))


Message édité par Roby le 03-05-2005 à 15:38:51
Reply

Marsh Posté le 04-05-2005 à 00:15:29    

Quel est le type de ta variable fric1?


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 04-05-2005 à 00:41:30    

Si tu essayais
 
Put #1, 8467, (1 * Fric1)
 
J'dis peut-être une bêtise...

Reply

Marsh Posté le 04-05-2005 à 09:16:34    

AlainTech a écrit :

Quel est le type de ta variable fric1?


 
 
En fait voila : (vous moquez pas)
 

Code :
  1. Ric1 = Sheets("Feuil1" ).Cells(5, 5).Value
  2. If (Ric1 <> "" ) Then
  3. Fric1 = Int(Ric1 / 8) - 65536
  4. Fric15 = (Ric1 Mod 8) * 4 + 1
  5. Fric15 = Fric15 + 24832
  6. Fric1 = Hex(Fric1)
  7. Fric15 = Hex(Fric15)
  8. Tmp1 = Mid(Fric1, 3)
  9. Tmp1 = "&h" & Tmp1
  10. Tmp2 = Mid(Fric1, 1, 2)
  11. Tmp2 = "&h" & Tmp2
  12. Tmp3 = Mid(Fric15, 3)
  13. Tmp3 = "&h" & Tmp3
  14. Tmp4 = Mid(Fric15, 1, 2)
  15. Tmp4 = "&h" & Tmp4
  16. Fric1 = Tmp1 & Tmp2
  17. Fric15 = Tmp3 & Tmp4


 
mais j'ai aussi essayé directement en décimal j'ai pas réussi ....
 
(j'espère que j'ai été clair)

Reply

Marsh Posté le 04-05-2005 à 09:17:17    

007seb a écrit :

Si tu essayais
 
Put #1, 8467, (1 * Fric1)
 
J'dis peut-être une bêtise...


 
 
J'vais essayer, mais vu que j'ai déjà tout modifié c'est pas pratique :)

Reply

Marsh Posté le 04-05-2005 à 09:34:21    

Prends l'habitude de travailler avec Option Explicit en début de programme et déclare toutes tes variables en leur donnant un type.
Pour l'instant toutes tes variables sont des variants.
Leur longueur est définie par leur contenu.
De plus, Fric1 passe d'un contenu numérique à string.
Essaye de déclarer 2 variables bytes et fais ton écriture dans le fichier en 2 fois.
Si ça fonctionne, c'est qu'on est sur la bonne piste.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 04-05-2005 à 11:11:37    

En fait, j'ai résolu comme ça :
 

Code :
  1. If (Ric1 <> "" ) Then
  2. Fric1 = Int(Ric1 / 8) - 65536
  3. Fric15 = (Ric1 Mod 8) * 4 + 1
  4. Fric15 = Fric15 + 24832
  5. Fric1 = Hex(Fric1)
  6. Fric15 = Hex(Fric15)
  7. Tmp1 = Mid(Fric1, 3)
  8. Tmp1 = "&h" & Tmp1
  9. Tmp2 = Mid(Fric1, 1, 2)
  10. Tmp2 = "&h" & Tmp2
  11. Tmp3 = Mid(Fric15, 3)
  12. Tmp3 = "&h" & Tmp3
  13. Tmp4 = Mid(Fric15, 1, 2)
  14. Tmp4 = "&h" & Tmp4
  15. 'ecriture dans le tableau
  16. Buffer(8464) = Tmp4
  17. Buffer(8465) = Tmp3
  18. Buffer(8466) = Tmp2
  19. Buffer(8467) = Tmp1
  20. Else
  21. Buffer(8464) = &H60 'désactivation du numéro
  22. End If
  23. Open Dest For Binary As #1
  24. Put #1, , Buffer
  25. Close #1


 
 
mais je vais essayer vos solutions.
 
J'avais essayé en byte, mais ca ecrivait quand même trop :(

Reply

Marsh Posté le 04-05-2005 à 16:23:36    

Je parle de DECLARER tes variables (Dim)
Celles que tu utilises sont des variants car non déclarées.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 04-05-2005 à 19:06:55    

J'avais bien compris pour le Dim, mais j'ai pas eu le temps d'essayer.
 
J'ai donc donné la solution qui fonctionne pour le moment.
 
Je vais essayer ta solution rapidement et je vous tiens au courant :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed