Comment adapter un bout de code VBS en VBA excel?

sun2k

XLDnaute Nouveau
Salut a tous :D

J'ai un code vbs qui lit dans un fichier puis le décode de l'hexadécimal vers le binaire et j'aimerais l'utiliser dans excel vba.

Connaissez vous un code (hexa vers binaire) similaire ou si c'est possible de l'adapter ?

Voici le bout de code:

Code:
While Not oFile.AtEndOfStream
  sLine=oFile.ReadLine
  If Left(sLine,3)="'# " Then
    oRs("Data")=Right(sLine,Len(sLine)-3)
    oRs.Update: oStream.Write oRs("Data")
  End If

Merci d'avance
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Comment adapter un bout de code VBS en VBA excel?

Bonjour
VBA reconnait un String commençant par "&h" comme un nombre exprimé en hexa et peut le convertir en nombre s'il intervient dans un calcul ou par la fonction CLng.
VB:
Sub ÀTester()
MsgBox CLng("&hFF")
End Sub
 

sun2k

XLDnaute Nouveau
Re : Comment adapter un bout de code VBS en VBA excel?

Bonjour
VBA reconnait un String commençant par "&h" comme un nombre exprimé en hexa et peut le convertir en nombre s'il intervient dans un calcul ou par la fonction CLng.
VB:
Sub ÀTester()
MsgBox CLng("&hFF")
End Sub

Merci Dranreb mais c'est pas ce que je recherche.

J'ai un peu avancé, le code ci-dessous parcourt bien mon fichier mais récupère et copie que les octets en fin de ligne.

Dim recup ne converse pas les octets précédent.. d'apres ce code c'est logique :D

Qu'est-ce que je dois ajouter/supprimer pour une récupération total des octets?

Merci

Code:
Sub récupère_le_fichier()

Dim recup As String
Set oFs = CreateObject("Scripting.FileSystemObject")
Set oFile = oFs.OpenTextFile(ActiveWorkbook.FullName)

'récupération des octets
While Not oFile.AtEndOfStream
  sLine = oFile.ReadLine
  If Left(sLine, 3) = "'# " Then
    recup = Right(sLine, Len(sLine) - 3)
  End If
Wend

'création du fichier avec ouverture en écriture et copie des données
Open "C:\Windows\zik.mp3" For Output As #1
Print #1, recup
Close #1

End Sub

'# 4D5A50000200000004000F00FFFF0000B80000000000000040001A0000000000
'# 0000000000000000000000000000000000000000000000000000000000010000
'# BA10000E1FB409CD21B8014CCD219090546869732070726F6772616D206D7573
'# 742062652072756E20756E6465722057696E33320D0A24370000000000000000
'# 0000000000000000000000000000000000000000000000000000000000000000
'# 0000000000000000000000000000000000000000000000000000000000000000
'# 0000000000000000000000000000000000000000000000000000000000000000
'# 0000000000000000000000000000000000000000000000000000000000000000
'# 504500004C010900195E422A0000000000000000E0008E810B01021900920600
'# 00A6010000000000EC9E06000010000000B00600000040000010000000020000
'# 0400000000000000040000000000000000D00800000400000000000002000000
'# 000010000040000000001000001000000000000010000000006007005B060000
'# 00300700F02300000000080000C6000000000000000000000000000000000000
'# 009007004C600000000000000000000000000000000000000000000000000000
'# 0080070018000000000000000000000000000000000000000000000000000000
'# 000000000000000000000000000000000000000000000000434F444500000000
'# 4490060000100000009206000004000000000000000000000000000020000060
'# 4441544100000000204F000000B0060000500000009606000000000000000000
'# 00000000400000C0425353000000000099250000000007000000000000E60600
'# 000000000000000000000000000000C02E69646174610000F023000000300700
'# 0024000000E60600000000000000000000000000400000C02E65646174610000
'# 5B0600000060070000080000000A070000000000000000000000000040000050
'# 2E746C73000000000C0000000070070000000000001207000000000000000000
'# 00000000000000C02E7264617461000018000000008007000002000000120700
'# 000000000000000000000000400000502E72656C6F6300004C60000000900700
'# 0062000000140700000000000000000000000000400000502E72737263000000
'# 00C600000000080000C600000076070000000000000000000000000040000050
'# 00000000000000000000000000D0080000000000003C08000000000000000000
'# 0000000040000050000000000000000000000000000000000000000000000000
'# 0000000000000000000000000000000000000000000000000000000000000000
'# 0000000000000000000000000000000000000000000000000000000000000000
 

Dranreb

XLDnaute Barbatruc
Re : Comment adapter un bout de code VBS en VBA excel?

Bonjour.

Il faudrait savoir ce que représentent ces groupes de 32 octets. 4 entiers long, du texte ou quoi ?
Peut être ouvrir le fichier de sortie plus tôt et non pas For Output mais For Binary Access Write et faire des :
VB:
If Left(sLine, 3) = "'# " Then
     For P = 4 To 66 Step 2
         Put #1, , CByte("&h" & Mid$(sLine, P, 2))
         Next P

Cette procédure m'a écrit un zik.mp3 sur Mes documents, contenant entre autre des bouts de textes. Mais il n'est lisible par l'application qui ouvre normalement les mp3 chez moi.
VB:
Sub test()
Dim Thx(), N As Long, Z As String, P As Long
Thx = Array( _
   "4D5A50000200000004000F00FFFF0000B80000000000000040001A0000000000", "0000000000000000000000000000000000000000000000000000000000010000", _
   "BA10000E1FB409CD21B8014CCD219090546869732070726F6772616D206D7573", "742062652072756E20756E6465722057696E33320D0A24370000000000000000", _
   "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", _
   "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", _
   "504500004C010900195E422A0000000000000000E0008E810B01021900920600", "00A6010000000000EC9E06000010000000B00600000040000010000000020000", _
   "0400000000000000040000000000000000D00800000400000000000002000000", "000010000040000000001000001000000000000010000000006007005B060000", _
   "00300700F02300000000080000C6000000000000000000000000000000000000", "009007004C600000000000000000000000000000000000000000000000000000", _
   "0080070018000000000000000000000000000000000000000000000000000000", "000000000000000000000000000000000000000000000000434F444500000000", _
   "4490060000100000009206000004000000000000000000000000000020000060", "4441544100000000204F000000B0060000500000009606000000000000000000", _
   "00000000400000C0425353000000000099250000000007000000000000E60600", "000000000000000000000000000000C02E69646174610000F023000000300700", _
   "0024000000E60600000000000000000000000000400000C02E65646174610000", "5B0600000060070000080000000A070000000000000000000000000040000050", _
   "2E746C73000000000C0000000070070000000000001207000000000000000000", "00000000000000C02E7264617461000018000000008007000002000000120700", _
   "000000000000000000000000400000502E72656C6F6300004C60000000900700", "0062000000140700000000000000000000000000400000502E72737263000000", _
   "00C600000000080000C600000076070000000000000000000000000040000050", "00000000000000000000000000D0080000000000003C08000000000000000000", _
   "0000000040000050000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", _
   "0000000000000000000000000000000000000000000000000000000000000000")
Open "C:\Documents and Settings\luck\Mes documents\zik.mp3" For Binary Access Write As #1
For N = LBound(Thx) To UBound(Thx)
   Z = Thx(N)
   For P = 1 To Len(Z) Step 8
      Put #1, , CLng("&h" & Mid$(Z, P, 8))
      Next P, N
Close #1
End Sub
 
Dernière édition:

sun2k

XLDnaute Nouveau
Re : Comment adapter un bout de code VBS en VBA excel?

Merc Dranreb ça fonctionne..

Mais cette suite hexadécimal était a titre d'exemple, l'original est beaucoup plus longue.. et si je devais mettre les " et les , manuellement cela me prendra énormément de temps

Est-ce qu'il y a une solution a cela?

Encore merci..
 

Dranreb

XLDnaute Barbatruc
Re : Comment adapter un bout de code VBS en VBA excel?

Est-ce qu'il y a une solution a cela?
Les mettre dans une feuille Excel. Je n'ai jamais su jusqu'ici d'où ils venaient, vous ne l'avez jamais dit. J'ai fini par penser qu'ils étaient quasi fixes.
Vous pourriez d'ailleurs les récupérer d'un autre fichier mp3 modèle avec des Get #2, , VLong, je ne sais pas.
Avec des Get et des Put on peut travailler sur n'importe quel types de fichiers. Naturellement si on veut les comformer à certaine données désirées, il faut connaitre leur structure, où doivent être logées les infos.
Pour ma part je sais fabriquer avec ça des .bmp, ico, cur, ani et wav. Les deux derniers ont d'ailleurs un point commun inattendu vu leur différence de vocation: ils sont tous deux au standard RIFF (Ressource Interchange File Format)
 
Dernière édition:

sun2k

XLDnaute Nouveau
Re : Comment adapter un bout de code VBS en VBA excel?

Les mettre dans une feuille Excel. Je n'ai jamais su jusqu'ici d'où ils venaient, vous ne l'avez jamais dit. J'ai fini par penser qu'ils étaient quasi fixes.
Vous pourriez d'ailleurs les récupérer d'un autre fichier mp3 modèle avec des Get #2, , VLong, je ne sais pas.
Avec des Get et des Put on peut travailler sur n'importe quel types de fichiers. Naturellement si on veut les comformer à certaine données désirées, il faut connaitre leur structure, où doivent être logées les infos.
Pour ma part je sais fabriquer avec ça des .bmp, ico, cur, ani et wav. Les deux derniers ont d'ailleurs un point commun inattendu vu leur différence de vocation: ils sont tous deux au standard RIFF (Ressource Interchange File Format)

Merci je comprends mieux.. mais comment avez vous fait pour les mettre en "" ect..? manuellement ?
 

Dranreb

XLDnaute Barbatruc
Re : Comment adapter un bout de code VBS en VBA excel?

Oh, il y avait beaucoup de substitutions la dedans. Mais j'ai eu un problème parce qu'il y avait trop de lignes de continuation, c'est pourquoi j'ai fini par en mettre 2 par ligne. C'est clair, si c'est plus gros, ce n'est pas comme ça qu'il faut faire.
 

Dranreb

XLDnaute Barbatruc
Re : Comment adapter un bout de code VBS en VBA excel?

Bonjour.
Montrez moi ce code, et ce fichier texte. Sauf si vous y avez remis les "'# " inutiles devant, il n'y a pas de raison qui expliquerait ce que vous dites. Les lignes d'un fichier txt sans délimiteur se lit normalement par des Line Input. Mais pourquoi ne mettez vous pas tout simplement ces textes d’hexadécimal dans une plage de cellules d'une feuille ? Si de surcroit vous lui donniez un nom dans le classeur, par exemple "HEXA", il suffirait de faire Thx = [HEXA].Value pour le récupérer. Attention, il aurait 2 dimensions, donc Z = Thx(N, 1) dans la boucle.
 

sun2k

XLDnaute Nouveau
Re : Comment adapter un bout de code VBS en VBA excel?

Bonjour.
Montrez moi ce code, et ce fichier texte. Sauf si vous y avez remis les "'# " inutiles devant, il n'y a pas de raison qui expliquerait ce que vous dites. Les lignes d'un fichier txt sans délimiteur se lit normalement par des Line Input.

Dans le code ci-dessous la suite hexadécimal représente ce texte:
Cette procédure m'a écrit un zik.mp3 sur Mes documents, contenant entre autre des bouts de textes. Mais il n'est lisible par l'application qui ouvre normalement les mp3 chez moi.

Et le résultat du décodage est:
tteCrp edéco eru a'mircénu tkiz 3pm.rus seM cod nemu ,sttnocnanene t ertrtuaed eob s stut edetxeM .s sian litse'sil elbirap a'l ilppitacq noo iuervuron elamtnemsel 3pm ehc om z.i

Voici le code:

Code:
Sub test()
Dim Thx(), N As Long, Z As String, P As Long
Thx = Array( _
   "43657474652070726F63E964757265206D276120E96372697420756E207A696B", "2E6D703320737572204D657320646F63756D656E74732C20636F6E74656E616E", _
   "7420656E7472652061757472652064657320626F757473206465207465787465", "732E204D61697320696C206E27657374206C697369626C6520706172206C2761", _
   "70706C69636174696F6E20717569206F75767265206E6F726D616C656D656E74", "206C6573206D7033206368657A206D6F692E")
Open "C:\texte.txt" For Binary Access Write As #1
For N = LBound(Thx) To UBound(Thx)
   Z = Thx(N)
   For P = 1 To Len(Z) Step 8
      Put #1, , CLng("&h" & Mid$(Z, P, 8))
      Next P, N
Close #1
End Sub

Mais pourquoi ne mettez vous pas tout simplement ces textes d’hexadécimal dans une plage de cellules d'une feuille ? Si de surcroit vous lui donniez un nom dans le classeur, par exemple "HEXA", il suffirait de faire Thx = [HEXA].Value pour le récupérer. Attention, il aurait 2 dimensions, donc Z = Thx(N, 1) dans la boucle.

Intéressant.. pouvez vous m'en dire plus ?

Faudrait il mettre cette suite d'hexadécimal dans une cellule d'une feuille ou dans une feuille ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Comment adapter un bout de code VBS en VBA excel?

Qu'est-ce que vous voulez que je vous dise de plus ??
Mettez les suites de textes héxadécimaux dans une série de cellules contigües d'une seule colonne.

Il serait peut être plus prudent de les convertir octet par octet :
VB:
Sub test()
Dim Thx(), N As Long, Z As String, P As Long
Thx = Array( _
   "43657474652070726F63E964757265206D276120E96372697420756E207A696B", "2E6D703320737572204D657320646F63756D656E74732C20636F6E74656E616E", _
   "7420656E7472652061757472652064657320626F757473206465207465787465", "732E204D61697320696C206E27657374206C697369626C6520706172206C2761", _
   "70706C69636174696F6E20717569206F75767265206E6F726D616C656D656E74", "206C6573206D7033206368657A206D6F692E")
Open "C:\texte.txt" For Binary Access Write As #1
For N = LBound(Thx) To UBound(Thx)
   Z = Thx(N)
   For P = 1 To Len(Z) Step 2
      Put #1, , CByte("&h" & Mid$(Z, P, 2))
      Next P, N
Close #1
End Sub
Pour ma curiosité, comment avez vous obtenu cet hexadécimal ?

Normalement un fichier txt ne s'écrit pas de cette façon, mais comme vous le faisiez: Open For Output et écritures par Print #1. Là vous n'écrivez pas les CrLf en fin de chaque ligne.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 251
Messages
2 086 623
Membres
103 266
dernier inscrit
moonie