[Catégorie modifiée .Net --> VB6] problème avec un code VB6

Signaler
Messages postés
16
Date d'inscription
mardi 18 août 2009
Statut
Membre
Dernière intervention
5 janvier 2011
-
Messages postés
16
Date d'inscription
mardi 18 août 2009
Statut
Membre
Dernière intervention
5 janvier 2011
-
Bonjour, je ne connais rien du tout en VB6 (je bidouille juste en VBS), et j'aimerais modifier une source, mais voila rien que d'essayer decompiler la source d'origine me pause problème, j'ai des syntaxe error (alors que le code fonctionne normalement puisque j'ai aussi l'exécutable).

Alors je louvais savoir si c'est juste chez moi que ça déconne ou chez tout le monde, je peux envoyer le code par email.

Merci.

23 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
On ne sait pas de quelle source tu parles. Mais à mon avis, avec autant d'erreurs de syntaxe, tu utilises probablement le mauvais IDE (VB6 est fait pour des projets .vbp et VB20xx pour des .sln)

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
16
Date d'inscription
mardi 18 août 2009
Statut
Membre
Dernière intervention
5 janvier 2011

alors la !!! je n'en sais rien du tout, je suppose que c'est du VB6, j'ai des fichiers .frm, .bas, .vbp et .vbw.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut
VBP : C'est donc bien du VB6.
Avec quoi essayes-tu de l'ouvrir ?
Si c'est avec VB6, il ne devrait pas y avoir de problème.
Si c'est avec VB.Net (2005, 2008 ou 2010), Express ou pas, il essayera de traduire cette application VB6 en .Net et là, ce n'est pas gagné, beaucoup de choses ayant changé entre ces deux langages.

On ne décompile pas une source, on décompile un EXE pour en extraire une source. Mais de toute façon, c'est pratiquement infaisable avec un EXE créé sous VB6.
De plus, cela ne pourra se faire qu'au travers de logiciels spécialisés.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
T'utilises le bon environnement de dév ? VB6 c'est ça :


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
16
Date d'inscription
mardi 18 août 2009
Statut
Membre
Dernière intervention
5 janvier 2011

c'est bien avec VB6 que le l'ouvre.

Je ne veux pas décompiler, mais compiler.
En fait je veux supprimer une fonction dans ce programme, mais comme je n'arrive déjà pas a compiler le programme d'origine, je ne peux pas modiffier quoi que se soit sans voir si je fait des erreurs ou pas.

Voici a quoi ressemble le code
'VA: 40234C
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
'VA: 402304
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Private Sub Flashmovie_() '4032A0
  Dim var_38 As FileListBox
  Dim var_3C As FileListBox
loc_004032C9:   var_14 = &H401148
loc_004032E2:   var_C = 0
loc_004032F5:   var_4 = 1
loc_00403302:   var_24 = Index
loc_0040330E:   var_28 = arg_10
loc_00403314:   var_4 = 2
loc_0040331D:   On Error Resume Next
loc_00403323:   var_4 = 3
loc_00403330:   var_74 = var_24
loc_00403336:   var_4 = 4
loc_0040334E:   If (var_74 <> "setgame") <> 0 Then GoTo loc_00403552
loc_00403354:   var_4 = 5
loc_0040336F:   Set var_38 = arg_8
loc_00403375:   var_64 = var_38
loc_0040338C:   File1.ListIndex = CInt(arg_8)
loc_00403394:   var_68 = var_38
loc_0040339B:   If var_38 >= 0 Then GoTo loc_004033BD
loc_004033B5:   var_8C = var_38
loc_004033BB:   GoTo loc_004033C7
loc_004033BD:   var_8C = 0
loc_004033C7:
loc_004033D0:   var_4 = 6
loc_004033EB:   Set var_38 = arg_8
loc_004033F1:   var_64 = var_38
loc_00403401:   var_2C = File1.Path
loc_00403409:   var_68 = var_2C
loc_00403410:   If var_38 >= 0 Then GoTo loc_00403432
loc_0040342A:   var_90 = var_38
loc_00403430:   GoTo loc_0040343C
loc_00403432:   var_90 = 0
loc_0040343C:
loc_00403456:   var_6C = var_3C
loc_00403466:   var_30 = File1.FileName
loc_0040346E:   var_70 = var_30
loc_00403475:   If var_30 >= 0 Then GoTo loc_00403497
loc_0040348F:   var_94 = var_30
loc_00403495:   GoTo loc_004034A1
loc_00403497:   var_94 = 0
loc_004034A1:
  loc_004034C6: var_48 = var_2C & 0040225Ch & var_30
loc_004034C9:   var_50 = 8
loc_00403509:   Set var_40 = var_40
loc_00403510:   .DispID_A
loc_0040354D:   GoTo loc_0040364F
loc_00403552:   var_4 = 7
loc_0040356A:   If (var_74 <> "playgame") <> 0 Then GoTo loc_00403587
loc_0040356C:   var_4 = 8
  loc_0040357C: Gameloader.Proc_0_5_403070(arg_8, 004021F8h, 000000B8h)
loc_00403582:   GoTo loc_0040364F
loc_00403587:   var_4 = 9
loc_0040359F:   If (var_74 <> "pickgame") <> 0 Then GoTo loc_004035EC
loc_004035A1:   var_4 = 10
loc_004035B1:   Call Gameloader.Form_Resize
loc_004035BE:   If var_38 >= 0 Then GoTo loc_004035E0
loc_004035D8:   var_98 = var_38
loc_004035DE:   GoTo loc_004035EA
loc_004035E0:   var_98 = 0
loc_004035EA:   GoTo loc_0040364F
loc_004035EC:   var_4 = 11
loc_00403604:   If (var_74 <> "menu") <> 0 Then GoTo loc_0040364F
loc_00403606:   var_4 = 12
loc_00403616:   Call Gameloader.Form_Resize
loc_00403623:   If var_38 >= 0 Then GoTo loc_00403645
loc_0040363D:   var_9C = var_38
loc_00403643:   GoTo loc_0040364F
loc_00403645:   var_9C = 0
loc_0040364F:   var_10 = 0
loc_0040365B:   GoTo loc_00403695
loc_00403694:   Exit Sub
loc_00403695:
End Sub

Private Sub Form_Load() '4026D0
  Dim var_2C As Variant
  Dim var_30 As Variant
  Dim var_1C As Me
loc_004026F5:   var_8 = &H4010F8
loc_0040274A:   var_8C = arg_8
loc_0040279A:   var_1C = Me.Caption
loc_004027D0:   var_20 = var_1C & "\games"
loc_004027E0:   Me.FontName = var_20
loc_0040283E:   var_7C = var_2C
loc_00402841:   var_78 = File1.ListCount
  loc_00402869: var_78 = var_78 - 0001h
loc_0040286D:   var_94 = 1
loc_0040287D:   var_98 = var_78
loc_00402883:   var_18 = 0
loc_00402890:
  loc_0040289B: EnumWindows(var_78, var_2C)
loc_004028AF:   Set var_2C = arg_8
loc_004028BE:   var_1C = File1.List(0)
loc_0040291E:   ecx = Me.SaveProp & "FIL" & var_1C & "||"
  loc_00402955: 1 = 1 + 0
loc_00402962:   GoTo loc_00402890
  loc_0040298C: var_7C = 404358h
loc_004029B4:   var_84 = var_2C
loc_004029BA:   var_1C = Me.Caption
loc_004029ED:   var_44 = 8
loc_004029F0:   var_3C = var_1C & "\gamelist.swf"
loc_00402A14:   Set var_30 = var_38
loc_00402A17:   .DispID_A
loc_00402A42:   DoEvents
loc_00402A9B:   Set var_2C = var_68
loc_00402A9E:   .DispID_97
loc_00402ABE:   Set var_2C = arg_8
loc_00402AC2:   var_7C = var_2C
  loc_00402AC8: File1.Listindex = 00000000h
loc_00402B09:   var_7C = var_2C
loc_00402B0C:   var_1C = File1.Path
loc_00402B44:   var_84 = var_1C
loc_00402B4A:   var_20 = File1.FileName
loc_00402B95:   var_44 = 8
  loc_00402B98: var_3C = var_1C & 0040225Ch & var_20
loc_00402BBC:   Set var_34 = var_38
loc_00402BBF:   .DispID_A
loc_00402BFF:   var_4 = 0
loc_00402C0B:   GoTo loc_00402C46
loc_00402C45:   Exit Sub
loc_00402C46:   Exit Sub
loc_00402C63:   Exit Sub
End Sub

Private Sub Form_Resize() '402C70
  Dim  As Me
loc_00402C95:   var_8 = &H401120
loc_00402CDF:   var_9C = Me.ScaleWidth
loc_00402D0B:   var_60 = var_9C
loc_00402D10:   var_A0 = Me.ScaleHeight
loc_00402D46:   var_88 = 4
loc_00402DC3:   Set var_18 = var_7C
  loc_00402DCA: Dim  As Variant:  = .Move
loc_00402DE6:   eax = var_18 Or FFFFFFFFh
loc_00402E07:   Set var_18 = arg_8
loc_00402E0E:   .DispID_A
loc_00402E27:   Unknown_VTable_Call [edx+00000100h]
loc_00402E5A:   GoTo loc_00402E67
loc_00402E5C:
  loc_00402E62: call MSVBVM60.DLL._adj_fdiv_m32(var_401118, arg_8, 00401FE4h, 00000100h, arg_8, var_9C, 00000004h, var_A0, arg_8)
loc_00402E67:
  loc_00402E77: var_20 = ((var_9C / &H42C80000&H) * &H42700000&H)
loc_00402E84:   Unknown_VTable_Call [ecx+00000108h]
loc_00402EB7:   GoTo loc_00402EC4
loc_00402EB9:
  loc_00402EBF: call MSVBVM60.DLL._adj_fdiv_m32(var_401118, arg_8, 00401FE4h, 00000108h, arg_8, var_A0)
loc_00402EC4:
  loc_00402ED2: var_40 = ((var_A0 / &H42C80000&H) * &H41C80000&H)
loc_00402EE1:   Unknown_VTable_Call [eax+00000100h]
loc_00402F14:   GoTo loc_00402F21
loc_00402F16:
  loc_00402F1C: call MSVBVM60.DLL._adj_fdiv_m32(var_401118, arg_8, 00401FE4h, 00000100h, arg_8, var_A4)
loc_00402F21:
  loc_00402F29: var_60 = ((var_A4 / &H42C80000&H) * &H41F00000&H)
loc_00402F3E:   Unknown_VTable_Call [edx+00000108h]
loc_00402F71:   GoTo loc_00402F7E
loc_00402F73:
  loc_00402F79: call MSVBVM60.DLL._adj_fdiv_m32(var_401118, arg_8, 00401FE4h, 00000108h, arg_8, var_A8)
loc_00402F7E:
  loc_00402F84: var_80 = ((var_A8 / &H42C80000&H) * &H42480000&H)
loc_00403012:   Set var_18 = var_7C
  loc_00403019: Dim  As Variant:  = .Move
loc_0040302B:   var_4 = 0
loc_00403038:   GoTo loc_00403044
loc_00403043:   Exit Sub
loc_00403044:   Exit Sub
loc_00403061:   Exit Sub
End Sub

Private Sub Form_Click() '4025F0
loc_00402612:   var_8 = &H4010E8
loc_0040263A:   eax = arg_8 Or FFFFFFFFh
loc_00402666:   Set var_18 = var_1C
loc_0040266D:   .DispID_A
loc_0040267F:   Call Gameloader.Form_Resize
  loc_00402687: If Call Gameloader.Form_Resize >= 0 Then GoTo loc_0040269B
loc_004026A3:   GoTo loc_004026AF
loc_004026AE:   Exit Sub
loc_004026AF:   Exit Sub
End Sub

Private Sub Timer2_Timer() '4036E0
  Dim var_1C As Me
loc_00403702:   var_8 = &H4011A0
loc_0040372F:   var_1C = Me.Visible
loc_00403739:   If var_1C >= 0 Then GoTo loc_0040374D
loc_00403751:   If var_1C <> 0 Then GoTo loc_0040378C
loc_00403753:   edi = edi Or FFFFFFFFh
  loc_0040375A: If  Then GoTo loc_0040378F
loc_0040376D:   Set var_18 = var_1C
loc_00403774:   .DispID_71
loc_0040378A:   GoTo loc_004037EE
loc_0040378C:   edi = edi Or FFFFFFFFh Or FFFFFFFFh
loc_0040378F:
loc_00403796:   Unknown_VTable_Call [eax+000001B8h]
  loc_004037A0: If Unknown_VTable_Call[eax+000001B8h] >= 0 Then GoTo loc_004037B4
  loc_004037D1: Set var_18 = Unknown_VTable_Call[eax+000001B8h]
loc_004037D8:   .DispID_70
loc_004037EE:
loc_004037F8:   ecx = "Colour"
  loc_0040380A: EnumWindows(00403860h, ebx)
loc_0040380F:   GetLastError
loc_0040381B:   If var_404028 <> 0 Then GoTo loc_00403823
loc_0040381D:   End
loc_0040382B:   GoTo loc_00403837
loc_00403836:   Exit Sub
loc_00403837:   Exit Sub
End Sub

Private Sub Proc_0_5_403070()
loc_00403095:   var_4 = &H401138
loc_004030C0:   var_98 = arg_8.ScaleWidth
loc_004030F3:   GoTo loc_00403100
loc_004030F5:
  loc_004030FB: call MSVBVM60.DLL._adj_fdiv_m32(var_401118, arg_8, 00401FE4h, 00000100h, edi, arg_8, ebx)
loc_00403100:
  loc_0040310D: var_1C = ((var_98 / &H42C80000&H) * &H40A00000&H)
loc_00403122:   var_9C = Me.ScaleWidth
loc_00403155:   GoTo loc_00403162
loc_00403157:
  loc_0040315D: call MSVBVM60.DLL._adj_fdiv_m32(var_401118, arg_8, 00401FE4h, 00000100h)
loc_00403162:
  loc_00403177: var_5C = ((var_9C / &H42C80000&H) * &H42B40000&H)
loc_0040322D:   Set var_14 = var_78
  loc_00403236: %el
loc_00403259:   Set var_14 = arg_8
  loc_0040325C: %el
loc_00403270:   GoTo loc_0040327C
loc_0040327B:   Exit Sub
loc_0040327C:   Exit Sub
loc_0040328F:   Exit Sub
End Sub

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Je serais curieux de savoir d'où vient ce disasm mais je ne vois pas trop à quoi rime cette ligne :
loc_00403236: %el


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
16
Date d'inscription
mardi 18 août 2009
Statut
Membre
Dernière intervention
5 janvier 2011

Je ne serais en dire plus, pour moi c'est un language méconue, je sais juste que quand je veux compiler, il me trouve une 1ere erreur la:

Private Sub Form_Load() '4026D0
Dim var_2C As Variant
Dim var_30 As Variant
Dim var_1C As Me



Enssuite il ne continue plus.

En fait, ce programme permet d'ouvrir des anim flash, mais le seul hic c'est qu'il ne se lance que quand un autre logiciel est en court (colour), je voudrais donc supprimer le fait qu'il ait besoin de "colour.exe" pour démarrer, j'ai ce programme mais il est inutile pour moi et il me prend de la ressource pour rien, donc en gros je pense que je devrais supprimer toute cette partie la:

Private Sub Timer2_Timer() '4036E0
Dim var_1C As Me
loc_00403702: var_8 = &H4011A0
loc_0040372F: var_1C = Me.Visible
loc_00403739: If var_1C >= 0 Then GoTo loc_0040374D
loc_00403751: If var_1C <> 0 Then GoTo loc_0040378C
loc_00403753: edi = edi Or FFFFFFFFh
loc_0040375A: If Then GoTo loc_0040378F
loc_0040376D: Set var_18 = var_1C
loc_00403774: .DispID_71
loc_0040378A: GoTo loc_004037EE
loc_0040378C: edi = edi Or FFFFFFFFh Or FFFFFFFFh
loc_0040378F:
loc_00403796: Unknown_VTable_Call [eax+000001B8h]
loc_004037A0: If Unknown_VTable_Call[eax+000001B8h] >= 0 Then GoTo loc_004037B4
loc_004037D1: Set var_18 = Unknown_VTable_Call[eax+000001B8h]
loc_004037D8: .DispID_70
loc_004037EE:
loc_004037F8: ecx = "Colour"
loc_0040380A: EnumWindows(00403860h, ebx)
loc_0040380F: GetLastError
loc_0040381B: If var_404028 <> 0 Then GoTo loc_00403823
loc_0040381D: End
loc_0040382B: GoTo loc_00403837
loc_00403836: Exit Sub
loc_00403837: Exit Sub
End Sub


Mais déjà que je n'arrive pas a compiler le code d'origine, je n'arrive donc pas a avancer.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Bonjour,

On reconnaît bien le code en VB6, mais celui qui à coder ça est un débile mental profond. Écrire une étiquette à chaque ligne c'est de la folie pure et dure ! ... à moins que - et cela prendrait un peu plus de sens - que c'est le résultat d'une programmation automatique par un autre programme... Il reste qu'au niveau de la syntaxe, il y a nécessairement des erreurs grossières : Je cite :
Dim var_1C As Me


mal barré tout ça...

Piste de réflexion : Puisque tu veux "ouvrir des anim flash", pourquoi ne pas rechercher un "vrai" programme pour le faire... Je ne sais pas si sur VBF il y a une source qui réalise cela, mais, à mon avis tu vas gagner du temps...

Amicalement,
Us.
Messages postés
16
Date d'inscription
mardi 18 août 2009
Statut
Membre
Dernière intervention
5 janvier 2011

j'avais trouvé des sources en C++ mais la encore ce n'est pas trop mon domaine, j'arrivais a ouvrir des flash, mais j'étais obligé de passer par un menu puis choisir mon flash, donc pas très pratique.

Le truc c'est que ce programme est intégré dans une autre application (en fait c'est pour du carpc), c'est pour cela que je voudrais juste le modifier.

Quand tu parles d'erreur grossière, pourquoi sont "Dim var_1C As Me" n'est pas bon ? car c'est justement la que le soft s'arrète en 1er quand il veut compiler.

Si quelqu'un se sent prèt a m'aider, je peux lui fournir tout le code, c'est pas gros du tout.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
@ us_30 :
Traiter un programmeur de débile mental profond n'est pas très courtois. Merci d'éviter à l'avenir.

Mettre des numéros de ligne à chaque ligne permet d'utiliser Erl (Error Line) afin de récupérer ce numéro lors du traitement d'erreur.
Erl n'est plus documentée sous VB6 = héritage des versions précédentes
Les n° de ligne peuvent être générés automatiquement avec des utilitaires comme l'excellent MZ-Tools (numéros numériques uniquement)
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Ouais, ben, cela ne sera pas moi, désolé...

"Dim var_1C As Me" : est une grossière erreur, car Me est un mot clé pour faire référence (donc raccourcis) à l'objet appelant... Bref, ce n'est un type de donné. Tu peux mettre par défaut : "Dim var_1C As Variant", il n'y aura plus d'erreur, même si pas très beau... Mais je crains fort que ton programme soit truffé d'erreur de ce type, et les conséquences ne sont pas "calculable"... C'est donc, déjà, très louche qu'il fonctionne... JE me demande bien comment tu as eu le code source de l'exécutable ? qui n'est pas, en réalité, fonctionnel ... C'est même étrange comme code... En effet, les choses comme : "Unknown_VTable_Call [eax+000001B8h]" n'est donc pas natif au VB6, peut-être une fonction programmée, mais elle doit-être "extrêmement sophistiquée", et fait furieusement penser à un adressage en mémoire en Assembleur (ou pseudo-assembleur ici).

En réalité, personne ne pourra d'aider, pour la simple raison, que ton code s'il y a l'apparence du VB6, n'est surement pas du VB6... et son langage est plutôt un dérivé du VB6, et il n'est en rien commun.

ET j'ai la certitude, qu'il ne tourne pas sous VB6, malgré les extensions des fichiers qui eux semblent respecter ceux du VB6. Bref, le seul bon conseil, et celui que je t'ai donné plus haut... En tout cas, c'est mon point de vue (in peto, je pense partagé par les autres).

Amicalement,
Us.
Messages postés
16
Date d'inscription
mardi 18 août 2009
Statut
Membre
Dernière intervention
5 janvier 2011

Merci pour la réponse, c'est sur que j'aimerais repartir d'un code plus propre du type C++ (comme celui que j'ai déjà trouvé), mais je n'y comprend pas grand chose nonplus en C++), a moins que j'arrive a trouver les aides necessaires pour arriver a faire ce que je veux (en gros un équivalent de ce qui existe dans ce programme).
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Oupss... le message de Jack n'était pas actualisé sur mon PC.

Jack, je réponds de lire la suite :
".. à moins que - et cela prendrait un peu plus de sens - que c'est le résultat d'une programmation automatique !"

Donc, je ne dis pas qu'il est forcément dans cet état mental très perturbé...

>> mais je comprend ta remarque sur la forme... bien que j'emploie pas de mot argotique cru, et que je ne dénigre pas un intervenant sur sa prestigieuse programmation qui viendrait à l'esprit de personne...

Amicalement,
Us.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Son "code" vient d'un désassembleur de VB6. Mais je ne sais pas quel programme il a utilisé ...

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
16
Date d'inscription
mardi 18 août 2009
Statut
Membre
Dernière intervention
5 janvier 2011

oui il me semble que ce code a été désassemblé, je ne sais pas par quel soft il est passé, mais si ça peut aider, je peux tjrs essayer de me renseigner.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Une bonne partie de ce code n'a rien à voir avec du VB, on ne pourrait pas te corriger le code même si on en avait très envie

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
16
Date d'inscription
mardi 18 août 2009
Statut
Membre
Dernière intervention
5 janvier 2011

bah en fait c'est un code pas très catolique, car il utilise un fichier SWF de base, il dialogue surement avec ce fichier (gamelist.swf)
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Des morceaux de cette horreur ne sont même pas du VB ...

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
16
Date d'inscription
mardi 18 août 2009
Statut
Membre
Dernière intervention
5 janvier 2011

Arfff je suis en train de me prendre la tête depuis ce matin pour essayer de comprendre du C++, car j'ai trouvé un code interressant mais j'avance pas...
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Ou récupère le vrai code source...

Amicalement,
US.