Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1583 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Ecriture dans un fichier (binary)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA] Ecriture dans un fichier (binary)

n°1070311
Roby
Posté le 03-05-2005 à 13:14:55  profilanswer
 

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 :))

mood
Publicité
Posté le 03-05-2005 à 13:14:55  profilanswer
 

n°1070545
Roby
Posté le 03-05-2005 à 15:38:32  profilanswer
 

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
n°1071191
AlainTech
Pas trouvé? Cherche encore!
Posté le 04-05-2005 à 00:15:29  profilanswer
 

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!
n°1071199
007seb
Posté le 04-05-2005 à 00:41:30  profilanswer
 

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

n°1071278
Roby
Posté le 04-05-2005 à 09:16:34  profilanswer
 

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)

n°1071279
Roby
Posté le 04-05-2005 à 09:17:17  profilanswer
 

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 :)

n°1071297
AlainTech
Pas trouvé? Cherche encore!
Posté le 04-05-2005 à 09:34:21  profilanswer
 

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!
n°1071460
Roby
Posté le 04-05-2005 à 11:11:37  profilanswer
 

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 :(

n°1072064
AlainTech
Pas trouvé? Cherche encore!
Posté le 04-05-2005 à 16:23:36  profilanswer
 

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!
n°1072318
Roby
Posté le 04-05-2005 à 19:06:55  profilanswer
 

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 :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Ecriture dans un fichier (binary)

 

Sujets relatifs
impression d'un fichierOuvrir un fichier Excel via Access
Script PHP pour construire un fichier htpasswdActivation d'un fichier Excel Ouvert
Enregitrer dans un fichierOption dans lecture de fichier
Apprter le contenu d'un fichier.txt dans un programmeconfiguration fichier "config.php"
[Awk] : parser un nom de fichierFichier->Nouveau [MFC]
Plus de sujets relatifs à : [VBA] Ecriture dans un fichier (binary)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR