Transcription de basic vers VB6

joaofr Messages postés 4 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 décembre 2005 - 6 déc. 2005 à 11:39
NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 - 8 déc. 2005 à 10:05
Bonjour,

Je m'appelle Joao et je suis un vieux curieux et debutant. Je ne suis
pas programmeur mais il m'arrive de m'amuser en basic. J'ai ecris en
basic une espece de programme
pour sortir sur imprimante des testes pour permis auto en Suisse.
J'enregistre toutes les reponses dans 4 tableaux selon les themes. Je
fais sortir sur imprimante 50 questions(4+20+6+20) exactement comme à
l'examen de theorie. J'aimerais transcrire cette chose
en VB pour l'utiliser sous Word, mais mes connaissances sont nules.
Exist'il un compilateur de basic vers VB??? ou pouvez vous me le faire.
Merci d'avance. Joao





TYPE enrTest

eNom AS STRING * 10

res AS SINGLE

END TYPE

DIM enr AS enrTest

DIM eNom AS enrTest

DIM solution$(4, 360)

DIM SINAIS(71), TEXTOS(332), GRAFICO(107), FOTOS(360), pag(4, 360)



'GOTO 10000 ' pour enregistrer les reponses

'GOTO 11000 ' pour sortir sur imprimante toutes les reponses

'GOTO 20000 ' pour nommer les fichiers dans le volume desire



CLS

OPEN "AUTO.Dat" FOR INPUT AS #1

INPUT #1, num

CLOSE #1

num: num = num + 1



RANDOMIZE TIMER

rep$ = " _ "

FOR X = 1 TO 4

ON X GOSUB 6001, 6002, 6003, 6004

FOR I = 1 TO X1

110 pag1 INT(RND(1) * X3) + 1: pag(X, I) pag1

IF I = 1 THEN 160

FOR I1 = 1 TO I - 1

IF pag(X, I) = pag(X, I1) THEN 110

NEXT I1

160 NEXT I

NEXT X



FOR X = 1 TO 4

ON X GOSUB 6001, 6002, 6003, 6004

220 INV = 0

FOR I 1 TO X1: IF I 1 THEN 240

240 IF pag(X, I) < pag(X, I - 1) THEN SWAP pag(X, I), pag(X, I - 1): INV = 1

NEXT I

IF INV = 1 THEN 220

NEXT X



X4 = 0

OPEN "AUTO.Dat" FOR OUTPUT AS #1

'PRINT #1,
"
Teste de theorie nø##"; num

PRINT #1, num

FOR X = 1 TO 4

ON X GOSUB 6001, 6002, 6003, 6004

FOR I = 1 TO X1

X4 = X4 + 1

PRINT #1, USING "Question ### "; X4;

PRINT #1, USING "position ###"; pag(X, I);

PRINT #1, " ";

PRINT #1, USING "\ "; X2$;

PRINT #1, " reponse "; rep$

NEXT I

NEXT X

CLOSE #1



INPUT "Voulez-vous la solution o/n", Z$

IF Z$ <> "o" THEN 800 ELSE 520

520 CLS

FOR X = 1 TO 4

ON X GOSUB 6001, 6002, 6003, 6004

ON X GOSUB 2001, 2002, 2003, 2004

FOR I = 1 TO X1

GET #1, pag(X, I), enr

solution$(X, pag(X, I)) = enr.eNom

NEXT I

NEXT X



X4 = 0

OPEN "Repons.dat" FOR OUTPUT AS #2

PRINT #2, USING "Reponses au teste de theorie nø##"; num

'PRINT #2, num

FOR X = 1 TO 4

ON X GOSUB 6001, 6002, 6003, 6004

FOR I = 1 TO X1

X4 = X4 + 1

PRINT #2, USING "\ "; solution$(X, pag(X, I));

PRINT #2, "--> reponse … la";

PRINT #2, USING " question ###"; X4;

PRINT #2, USING " position ###"; pag(X, I);

PRINT #2, USING " \ \ "; X2$

NEXT I



NEXT X

CLOSE #1

CLOSE #2

800 END



2001 OPEN "C:\SINAIS" FOR RANDOM AS #1 LEN = LEN(enr): RETURN

2002 CLOSE #1: OPEN "C:\TEXTOS" FOR RANDOM AS #1 LEN = LEN(enr): RETURN

2003 CLOSE #1: OPEN "C:\GRAFICO" FOR RANDOM AS #1 LEN = LEN(enr): RETURN

2004 CLOSE #1: OPEN "C:\FOTOS" FOR RANDOM AS #1 LEN = LEN(enr): RETURN



6001 X1 4: X2$ "SINAIS": X3 = 71: RETURN

6002 X1 20: X2$ "TEXTOS": X3 = 332: RETURN

6003 X1 6: X2$ "GRAFICO": X3 = 107: RETURN

6004 X1 20: X2$ "FOTOS": X3 = 360: RETURN



10000 CLS

FOR X = 1 TO 4 '1to1 2to2 3to3 4to4

ON X GOSUB 6001, 6002, 6003, 6004

ON X GOSUB 2001, 2002, 2003, 2004

FOR I = 1 TO X3

PRINT USING "Question ###"; I;

PRINT USING " \ \ "; X2$;

INPUT "solution ", enr.eNom

PUT #1, I, enr

'PRINT USING "solution "; pag(X, I);

'PRINT "res :", enr.eNom

NEXT I

PRINT

NEXT X

CLOSE #1

END





11000 CLS

FOR X = 1 TO 4 '1to1 2to2 3to3 4to4

ON X GOSUB 6001, 6002, 6003, 6004

ON X GOSUB 2001, 2002, 2003, 2004

FOR I = 1 TO X3

GET #1, I, enr

solution$(X, I) = enr.eNom

NEXT I

NEXT X

X4 = 0

FOR X = 1 TO 4 '1to1 2to2 3to3 4to4

ON X GOSUB 6001, 6002, 6003, 6004

OPEN "solution.dat" FOR OUTPUT AS #2

PRINT #2, " Reponses aux questions "; X2$

PRINT #2,

FOR I = 1 TO X3

X4 = X4 + 1

PRINT #2, USING "Question ### "; X4;

PRINT #2, USING " position ### "; I;

PRINT #2, USING " \ \ "; X2$;

PRINT #2, " solution ";

PRINT #2, USING "\ "; solution$(X, I)

NEXT I

PRINT #2,

NEXT X

CLOSE #2

END



20000 'INPUT "Nom du fichier : "; n$

'OPEN "C:\TEXTOS" FOR OUTPUT AS #1

'PRINT #1, "Ceci est enregistré sur le fichier."

'CLOSE

'OPEN "C:\TEXTOS" FOR INPUT AS #1

'INPUT #1, a$

'PRINT "Lecture fichier : "; a$

'CLOSE

'END

7 réponses

NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
6 déc. 2005 à 17:07
Bonjour


Quel est le basic d'origine (QB, GWBasic, ...) ?

VB de destination (VB6,.NET) ?



Quelques pistes :

- gosub -> sub ou function

- End -> fermeture de la fenetre principale ou fin du main



TYPE enrTest

eNom AS STRING * 10

res AS SINGLE

END TYPE

DIM enr AS enrTest

DIM eNom AS enrTest

DIM solution$(4, 360)

DIM SINAIS(71), TEXTOS(332), GRAFICO(107), FOTOS(360), pag(4, 360)

Devient :

{public | private} Type enrTest

eNom as string '*10 non géré

res as single

end type



dim enr as enrTest 'Explication, pourquoi tu déclare cela ?

dim eNom as enrTest



dim solution(4,360) as string



dim SINAI(71) as ????

dim TEXTOS(332) as ????

dim GRAFICO(107) as ????

dim FOTOS(360) as ????

dim pag(4,360) as ????



Préférence des types Numériques : long plutot que integer (si pas de virgules)


Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET)
0
joaofr Messages postés 4 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 décembre 2005
7 déc. 2005 à 09:07
Bonjour NHenry. Merci pour ton aide. J'utilise QB45 et VB6.3

Dim SINAIS(71) as ??? etc.. sont des lettres genre a, b, ...., ac.

Comment faire pour:

- entrées au clavier: msgBox ?? ou inputBox??

- print using## ????

- swap ???

Oublie pas que je connais rien (nul, zero) en VB.

Encore merci, et à bientot.

Joao
0
NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
7 déc. 2005 à 10:00
Bonjour


Pour mettre en forme (using seulement) utilie format

Les entrées tu peux utiliser inputbox.

lettres -> String

où est swap dans ton code?

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET)
0
joaofr Messages postés 4 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 décembre 2005
7 déc. 2005 à 11:14
ReBonjour. ReMerci NHenry.

SWAP se trouve à la ligne 240.

Comment utiliser Format?

Je sais que je vous demande trop mais est ce que vous pourriez pas me
transcrire tout le programme ou en faire un tout neuf en VB, sachant
que:

-je dois enregistrer qq part tts les reponses
correctes a toutes les questions que sont reparties en 4 groupes
[textes(332), signaux(71), graphiques(107) et photos(360)]

-que chaque teste, de exactement 50 questions,
devra sortir 4 questions SIGNAUX, 20 TEXTES, 6 GRAPHIQUES et 20 PHOTOS,
choisies au hasard dans chaque groupe.

-sortir dans une autre feuille les reponses correctes à chacune des 50 questions.

A bientot.

Joao
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
7 déc. 2005 à 11:38
Bonjour


SWAP peut se remplacer par le passage par une variable temporaire.

Traduire tt le code, g vai voir, sans garantie.

mStr=Format(Valeur, "format")

format = ##.#

pour using ##.#

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET)
0
joaofr Messages postés 4 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 décembre 2005
8 déc. 2005 à 08:01
Bonjour. C'est encore moi, le casse pieds. Je patauge serieusement avec ce VB. Voila un fichier avec ma transcription. Un tas de problemes. Comment faire ceci, cela...???.

Rien à faire, il y a beaucoup de choses que je comprends pas. Merci de votre aide.

Joao



























Type
enrTest

eNom As String * 10

res As Single

num As Single

End Type

Dim enr As enrTest

Dim eNom As enrTest

Dim solution$(4, 360)

Dim SINAIS(71), TEXTOS(332), GRAFICO(107),
FOTOS(360), pag(4, 360)

Dim MemValeur1 As Variant, MemValeur2
As Variant

Dim Temp As Variant







Public
Function Swap(ByRef Valeur1 As Variant, _

ByRef Valeur2 As Variant)
As Boolean 'comment utiliser cette function


On Error GoTo Erreur
' Mémorise les valeurs avant de commencer


MemValeur1 = Valeur1


MemValeur2 = Valeur2



' Fait le Swapping


Temp = Valeur1


Valeur1 = Valeur2


Valeur2 = Temp


' Ok


Swap = True

Exit Function





















Erreur:

' Souvent des erreurs de type de variables
incompatibles

' On remet les valeurs initiales

Valeur1 = MemValeur1

Valeur2 = MemValeur2

Swap = False

End Function




















Sub
permis()

'' permis
Macro

' Macro
créée le 07.12.2005 par Joao

'

'goTo 10000 ' pour enregistrer les
reponses

'goto 11000' pour sortir sur imprimante
toutes les reponses

'goto 20000' pour nommer les fichiers


































'cls 'comment effacer l'ecran - qu'est ce que remplace cls

num = 1

Open "D:\ProgramFiles\Basic\qbas45\AUTO.Dat"
For Input As #1 ' ou n'importe qq autre endroit

Input #1, num

Close #1

num: num =
num + 1

Randomize Timer

rep$ = "_"

For X = 1 To 4

On X GoSub 6001, 6002, 6003, 6004

For I = 1 To X1

110 pag1
Int(Rnd(1) * X3) + 1: pag(X, I) pag1

If I = 1 Then GoTo 160

For I1 = 1 To I - 1

If pag(X, I) = pag(X, I1) Then GoTo 110

Next I1




160 Next
I






Next X






For X = 1 To 4

On X GoSub 6001, 6002,
6003, 6004






220 INV = 0

For I 1 To X1: If I
1 Then GoTo 240








240 If pag(X, I) < pag(X, I - 1) Then Swap pag(X, I), pag(X,
I - 1): INV = 1

Next I

If INV = 1 Then GoTo 220






Next X










X4 = 0

Open "AUTO.Dat" For Output As #1

'print #1, "Test de theorie n ##";num

Print #1, num




















For X = 1 To 4

On X GoSub 6001, 6002, 6003, 6004

For I = 1 To X1

X4 = X4 + 1

Print #1, using; "Question
### "; X4;

Print #1, using; "position
###"; pag(X, I);

Print #1, " ";

Print #1, using; "\"; X2$;

Print #1, "reponse"; rep$






Next I

Next X




Close #1








GoSub 16000




'input "voulez-vous la solution o/n",Z$




If Z$ <> "o" Then GoTo 800
Else GoTo 520








520 'cls














































For X = 1 To 4

On X GoSub 6001, 6002, 6003, 6004

On X GoSub 2001, 2002, 2003, 2004

For I = 1 To X1

Get #1, pag(X, I), enr

solution$(X, pag(X, I)) = enr.eNom

Next I

Next X

X4 = 0

Open "repons.dat" For Output As #2

Print #2, using; "Reponses
au test de theorie n ##"; num

For X = 1 To 4

On X GoSub 6001, 6002, 6003, 6004

For I = 1 To X1

X4 = X4 + 1

Print #2, using; "\"; solution$(X, pag(X, I));

Print #2, "--->
reponse a la";

Print #2, using; " question
##"; X4;

Print #2, using; " position
###"; pag(X, I);

Print #2, using; "\"; X2$

Next I




Next X






Close #1

Close #2






800 End
















2001Open "C:\SINAIS" For Random As #1
Len = Len(enr): Return

2002Close #1: Open "C:\TEXTOS" For
Random As #1 Len = Len(enr): Return

2003Close #1: Open "C:\GRAFICO" For
Random As #1 Len = Len(enr): Return

2004Close #1: Open "C:\FOTOS" For
Random As #1 Len = Len(enr): Return
















6001X1 4: X2$ "SINAIS": X3 = 71: Return

6002X1 20: X2$ "TEXTOS": X3 = 332:
Return

6003X1 6: X2$ "GRAFICO": X3 = 107:
Return

6004X1 20: X2$ "FOTOS": X3 = 360:
Return


















10000'cls

For X = 4 To 4 ' 1,2,3,4to4

On X GoSub 6001, 6002, 6003, 6004

On X GoSub 2001, 2002, 2003, 2004






For I = 1 To 360 ' 71,332,107 ou 360

Debug.Print "question ###";
I;

Debug.Print X2$;


GoSub 15000












Put #1, I, enr

'print usimg"solution";pag(X,I);

'Print "res:", enr.eNom

Next I

Next X




Close #1




End


























11000'cls

For X = 4 To 4 '1,2,3,ou 4 to 4

On X GoSub 6001, 6002, 6003, 6004

On X GoSub 2001, 2002, 2003, 2004

For I = 1 To X3

Get #1, I, enr

solution$(X, I) = enr.eNom

Next I

Next X




X4 = 0












For X = 4 To 4 '1,2,3 ou 4 to 4

On X GoSub 6001, 6002, 6003, 6004

Open "solution.dat" For
Output As #2

Print #2, "Reponses aux questions"; X2$

Print #2,






















For I = 1 To X3

X4 = X4 + 1

Print #2,
using; "question ###"; X4;

Print #2, using; "position ###"; I;

Print #2, using; "\";
X2$;

Print #2, "solution";

Print #2, using; "\"; solution$(X, I)



Next I

Print #2,

Next X




Close #2




End












15000

Dim
Message, Title, Default, MyValue '

'Définit
le message.
















Message =
"question" & I & "" & X2$ & ":la solution est"

Title = "entrer les solutions" '
Définit le titre.

Default =
"a" ' Définition la valeur par défaut.

' Affiche
le message, le titre et la valeur par défaut.

MyValue =
InputBox(Message, Title, Default)

enr.eNom =
MyValue




Return




























16000 '

'Dim
Message, Title, Default, MyValue '

'Définit
le message.

Message =
"voulez-vous la solution o/n"

Title =
"enregister la solution" ' Définit le titre.

Default =
"o" ' Définition la valeur par défaut.

' Affiche
le message, le titre et la valeur par défaut.

MyValue =
InputBox(Message, Title, Default)

Z$ = MyValue




'




' boite
Macro










' Macro
enregistrée le 07.12.2005 par Joao

'

CommandBars("Stop Recording").Visible
= False

ActiveWindow.Close




Return






















20000'cls

'input"Nom du fichier: ";n$

'open"C:TEXTOS" FOR OUTPUT AS
#1

'PRINT #1,"Ceci est enregistre sur
le fichier."

'close

'Open "C:TEXTOS" For Input As
#1

'input #1, a$

'print"lecture fichier: ";a$

'close

'end










End Sub
0
NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
8 déc. 2005 à 10:05
Bonjour,



pense à identer ton code (tab).

Option Explicit

Type enrTest
eNom As String
res As Single
num As Single
End Type
Dim enr As enrTest
Dim eNom As enrTest
Dim solution(4, 360) as String
Dim SINAIS(71) as String


Din TEXTOS(332) as String

dim GRAFICO(107) as String

dim FOTOS(360) as String

dim pag(4, 360) as String

'Evite les Variant



Public Function Swap(ByRef Valeur1 As Variant, _
ByRef Valeur2 As Variant) As Boolean 'comment utiliser cette function


Dim MemValeur1 As Variant, MemValeur2 As Variant
Dim Temp As Variant

On Error GoTo Erreur
' Mémorise les valeurs avant de commencer

MemValeur1 = Valeur1

MemValeur2 = Valeur2


' Fait le Swapping

Temp = Valeur1

Valeur1 = Valeur2

Valeur2 = Temp

' Ok

Swap = True

Exit Function

Erreur:
' Souvent des erreurs de type de variables incompatibles
' On remet les valeurs initiales
Valeur1 = MemValeur1
Valeur2 = MemValeur2
Swap = False
End Function



Sub permis()
'' permis Macro
' Macro créée le 07.12.2005 par Joao
'
'goTo 10000 ' pour enregistrer les reponses
'goto 11000' pour sortir sur imprimante toutes les reponses
'goto 20000' pour nommer les fichiers

'EVITE les GOTO/GOSUB, utilise plutot des fonction on des Sub!!!!!!!




Dim num as long


Dim X as long


Dim Y as long



'cls 'comment effacer l'ecran - qu'est ce que remplace cls

'Utilise des controles

num = 1
Open "D:\ProgramFiles\Basic\qbas45\AUTO.Dat" For Input As #1 ' ou n'importe qq autre endroit
Input #1, num
Close #1
num: num = num + 1
Randomize Timer
rep$ = "_"
For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004
For I = 1 To X1 110 pag1 Int(Rnd(1) * X3) + 1: pag(X, I) pag1
If I = 1 Then GoTo 160
For I1 = 1 To I - 1
If pag(X, I) = pag(X, I1) Then GoTo 110
Next I1




160 Next I



Next X



For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004



220 INV = 0 For I 1 To X1: If I 1 Then GoTo 240



240 If pag(X, I) < pag(X, I - 1) Then Swap pag(X, I), pag(X, I - 1): INV = 1
Next I
If INV = 1 Then GoTo 220



Next X



X4 = 0
Open "AUTO.Dat" For Output As #1
'print #1, "Test de theorie n ##";num
Print #1, num



For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004
For I = 1 To X1
X4 = X4 + 1
Print #1, using; "Question ### "; X4;
Print #1, using; "position ###"; pag(X, I);
Print #1, " ";
Print #1, using; "\"; X2$;
Print #1, "reponse"; rep$



Next I
Next X



Close #1






GoSub 16000



'input "voulez-vous la solution o/n",Z$



If Z$ "o" Then GoTo 800 Else GoTo 520






520 'cls



For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004
On X GoSub 2001, 2002, 2003, 2004
For I = 1 To X1
Get #1, pag(X, I), enr
solution$(X, pag(X, I)) = enr.eNom
Next I
Next X
X4 = 0
Open "repons.dat" For Output As #2
Print #2, using; "Reponses au test de theorie n ##"; num
For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004
For I = 1 To X1
X4 = X4 + 1
Print #2, using; "\"; solution$(X, pag(X, I));
Print #2, "---> reponse a la";
Print #2, using; " question ##"; X4;
Print #2, using; " position ###"; pag(X, I);
Print #2, using; "\"; X2$
Next I



Next X



Close #1
Close #2



800 End



Bon j'ai pas tout coriger, quelques conseils :

Evite les goto/gosub, utimlise plutos les if, function, exit, sub et autres

Idente ton code, il sera plus lisible

met option explicit en haut de tous tes modules, cela oblige de déclarer ttes tes variables

limite au maximum la visibilité de tes variables

Utilise freefile pour récupérer un numéro de fichier que tu peux ouvrir

Utilise des controles pour afficher les résultats



Ton projet c'est un projet EXE?


Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET)
0
Rejoignez-nous