Besoin d'aide (débutant VB)

Résolu
Billybobbonnet
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013
- 23 févr. 2007 à 11:02
Billybobbonnet
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013
- 24 févr. 2007 à 01:33
Bonjour!

J'ai fait hier mon premier bout de code sur VB mais je n'y connais vraiment pas grand chose (voire rien du tout) et j'ai plus bricolé que fait dans les règles.

 Voilà ce que je voulais faire: utiliser les bibliothèques Quicktime pour lancer une chaîne d'opérations avec QTpro. Le pépin est que pour faire ce que je veux, les seules fonctions disponibles sont les mêmes que celles déclenchées à la main. En gros, dans un conteneur .mov, je veux mettre 1 piste vidéo et 5 pistes audio qui sont séparées à la base.

Dans un premier temps, j'ai fait une form 1 avec des fenêtres QTcontrol où je charge les médias pour les modifier ensuite lorsque j'appuie sur un superbe bouton prévu à cet effet.

Le but final est de faire un exe qui réalise les tâches de façon invisible mais je ne sais pas si c'est possible. En tout cas, je dois quand même pouvoir faire mieux.

J'ai donc chargé ce qu'il faut dans les composants, mis tout ce qui me semblait utile sur ma Form 1 et fait le code. Quand je le lance, il fait planter MS Visual Basic donc je suppose que je me suis trompé quelque part. Help, svp!

Voilà le code :

Private Sub Command1_Click()

'open
QTControl1 = "E:\Enregistrements\Sonswav\Sound.avi"
QTControl2 = "E:\Enregistrements\Sonswav\Piste1.wav"
QTControl3 = "E:\Enregistrements\Sonswav\Piste2.wav"
QTControl4 = "E:\Enregistrements\Sonswav\Piste3.wav"

End Sub

Function Test_Command1_Click()

Sub phase1()

QTControl2.Movie.SelectAll

End Sub

Sub Phase2()

QTControl2.Movie.Copy
End Sub

Sub Phase3()
QTControl1.Movie.Add
End Sub

Sub Phase4()
QTControl1.Movie.Rewind
End Sub

Sub Phase5()
QTControl3.Movie.SelectAll
End Sub

Sub Phase6()
QTControl3.Movie.Copy
End Sub

Sub Phase7()
QTControl1.Movie.Add
End Sub

Sub Phase8()
QTControl1.Movie.Rewind
End Sub

Sub Phase9()
QTControl4.Movie.SelectAll
End Sub

Sub Phase10()
QTControl4.Movie.Copy
End Sub

Sub Phase11()
QTControl1.Movie.Add
End Sub

Sub Phase12()
QTControl1.Movie.Rewind
End Sub

Sub Phase13()
QTControl1.Movie.SaveSelfContained
End Sub

End Function

Merci!!

10 réponses

Billybobbonnet
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

23 févr. 2007 à 15:52
C'est réglé j'ai réussi. Le code du dessus est bon, il ne manque que dans la phase 13:

Sub Phase13()
QTControl1.Movie.SaveSelfContained "E:\Enregistrements\Sonswav\mavidéo.mov", False
End Sub

Si ça peut servir à certains...

Au passage, pour lancer les fonctions au lancement de l'exe et faire ça sans fenêtre apparente, je fais comment?

Merci
3
Billybobbonnet
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

23 févr. 2007 à 11:16
J'ai fait une erreur sur le début du code, c'est plutôt ça (une fonction avec des procédures dedans, je suis même pas sûr que c'est possible... Donc revoilà le début:

Private Function Command1_Click()

Sub Command1_Click()
'open
QTControl1 = "E:\Enregistrements\Sonswav\Sound.avi"
QTControl2 = "E:\Enregistrements\Sonswav\Piste1.wav"
QTControl3 = "E:\Enregistrements\Sonswav\Piste2.wav"
QTControl4 = "E:\Enregistrements\Sonswav\Piste3.wav"

End Sub
0
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
23 févr. 2007 à 11:42
Non, tu ne peux pas créer une Function (ou Sub) contenant d'autres Functions (ou Sub) à l'intérieur

Impossible de cette manière
Sub MaSub()
Sub Sub1()
...code
End Sub
End Sub

Possible:
Sub Masub()
Call Sub1
End sub

Sub Sub1()
...code
End sub

Pour ce qui est de ton problème avec QuickTime, je ne sais pas, je n'ai rien compris... désolé.

MPi
0
Billybobbonnet
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

23 févr. 2007 à 11:46
Je pensais que function et sub etaient différents! On est débutant ou on ne l'est pas... Mais comment alors lancer les unes derrières les autres ces procédures lorsque je clique sur le bouton(ou l'idéal, lorsque je lance l'exe)? Il faut un timer?

Merci pour ta réponse en tout cas
0

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

Posez votre question
Billybobbonnet
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

23 févr. 2007 à 11:51
Le début comme ça c'est bon?

Private Sub Command1_Click()

'open
QTControl1 = "E:\Enregistrements\Sonswav\Sound.avi"
QTControl2 = "E:\Enregistrements\Sonswav\Piste1.wav"
QTControl3 = "E:\Enregistrements\Sonswav\Piste2.wav"
QTControl4 = "E:\Enregistrements\Sonswav\Piste3.wav"

Call Sub phase1()
Call Sub phase2()
Call Sub phase3()
Call Sub phase4()
Call Sub phase5()
Call Sub phase6()
Call Sub phase7()
Call Sub phase8()
Call Sub phase9()
Call Sub phase10()
Call Sub phase11()
Call Sub phase12()
Call Sub phase13()

End Sub

Sub phase1()

QTControl2.Movie.SelectAll

End Sub

Sub Phase2()

QTControl2.Movie.Copy
End Sub

Sub Phase3()
QTControl1.Movie.Add
End Sub

Sub Phase4()
QTControl1.Movie.Rewind
End Sub

ECT....
0
Billybobbonnet
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

23 févr. 2007 à 12:26
Bon, j'ai essayé et voilà le résultat:

Lorsque j'écris les Call Sub Phase1, il le met en rouge, erreur de syntaxe
Lorsque j'écris Call SubPhase1 (sans espace) il me met erreur "sub ou fonction non définie".

Dans une fonction, Sub Command1_Click() par exemple, je demande de charger 4 objets, 3 audio et un vidéo. Je peux faire tout ça dans une seule fonction? J'ai rajouté les call dedans et j'ai aussi tenté de faire un Sub phase0 qui lance les objets vidéo et audio avec dans Sub Command1_Click() un Call SubPhase0. Mais ça marche pas!

Je suppose que je n'y suis pas. Merci aux bonnes âmes qui me fileront un coup de main..
0
Billybobbonnet
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

23 févr. 2007 à 12:45
Autant pour moi, le Sub  après le call était de trop. J'ai posté trop vite. Maintenant ça aurait l'air de fonctionner si je ne récupérais pas une erreur VB '438' "l'objet ne gère pas cette propriété ou cette méthode. Lorsque je clique sur débogage, la ligne
QTControl1 = "E:\Enregistrements\Sonswav\Sound.avi" est surlignée.  J'y travaille ;)
0
Billybobbonnet
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

23 févr. 2007 à 14:45
Après avoir testé pas mal de choses, voici le code:

Sub QuickTimeInitialize()

End Sub

Private Sub Command1_Click()
Call phase0
Call phase1
Call Phase2
Call Phase3
Call Phase4
Call Phase5
Call Phase6
Call Phase7
Call Phase8
Call Phase9
Call Phase10
Call Phase11
Call Phase12
Call Phase13

End Sub

Sub phase0()
'open
QTControl1 = "E:\Enregistrements\Sonswav\Sound.avi"
QTControl2 = "E:\Enregistrements\Sonswav\Piste1.wav"
QTControl3 = "E:\Enregistrements\Sonswav\Piste2.wav"
QTControl4 = "E:\Enregistrements\Sonswav\Piste3.wav"
End Sub

Sub phase1()

QTControl2.Movie.SelectAll

End Sub

Sub Phase2()

QTControl2.Movie.Copy
End Sub

Sub Phase3()
QTControl1.Movie.Add
End Sub

Sub Phase4()
QTControl1.Movie.Rewind
End Sub
Sub Phase5()
QTControl3.Movie.SelectAll
End Sub

Sub Phase6()
QTControl3.Movie.Copy
End Sub

Sub Phase7()
QTControl1.Movie.Add
End Sub

Sub Phase8()
QTControl1.Movie.Rewind
End Sub

Sub Phase9()
QTControl4.Movie.SelectAll
End Sub

Sub Phase10()
QTControl4.Movie.Copy
End Sub

Sub Phase11()
QTControl1.Movie.Add
End Sub

Sub Phase12()
QTControl1.Movie.Rewind
End Sub

Sub Phase13()
QTControl1.Movie.SaveSelfContained ("E:\Enregistrements\Sonswav")
End Sub

Mais j'ai toujours la même erreur....
0
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
24 févr. 2007 à 00:13
Si tu es en VB6, tu peux insérer un module standard.
Dans ce module, tu crées une Sub Main ()

Dans cette Sub Main, tu mets tout le code que tu as dans Command1_Click()
Et tu rajoutes, bien sûr, toutes les procédures que tu appelles (Phase1, Phase2, ...) dans ce même module.

Finalement, dans les propriétés du projet (menu Projet / propriétés du projet), tu choisis Sub Main comme objet de départ.

Et ça devrait bien fonctionner

MPi
0
Billybobbonnet
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

24 févr. 2007 à 01:33
Merci! Je teste ça bientôt.

Petite erreur encore dans le code: dans sub Phase0(), ce n'est pas QTControl1 mais AxQTControl1 et ainsi de suite pour les suivants de ce sub.
0