Pourquoi pas d'appel impossible "Call"

Résolu
cs_JLB59
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012
- 15 août 2012 à 12:45
cs_JLB59
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012
- 16 août 2012 à 06:33
Bonjour à tous,

Daudet78 m'avait appris une chose importante, l'instruction "Call".

Il avait gentillement modifié mon petit prog, où il y avait cela.
Ça s'est montré très intéressant !

Je m'en suis servi dans mon prog final et c'est vrai que ça m'évite pas mal d'écritures.

Le seul os, est que, quand je m'en sers dans Form_Load, c'est parfait, par contre, si je faire la même chose à partir d'une autre Procedure_Sub, là, j'ai une erreur, pourtant, j'ai fait un copier/coller, donc, pas d'erreur possible.



Voudriez-vous me dire si cela n'a attrait qu'à la seule Form_Load ?
J'ai regardé dans l'aide, mais y a rien à ce sujet.

Merci d'avance de vos infos.


Cordialement. JLB59

12 réponses

NHenry
Messages postés
14971
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 août 2022
161
15 août 2012 à 15:32
Bonjour,

Si tu veux appeler les Sub, il faut que tu changes le Private en Public et que tu les appelles par leur nom.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
3
NHenry
Messages postés
14971
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 août 2022
161
15 août 2012 à 16:34
Bonjour,

1) l'indentation est erratique, c'est pas terrible.
2) pour quoi l'avoir déclarer en tant que onction alors qu'elle ne retourne rien ?
3) si tu utilises Call, les parenthèses lors de l'appel sont obligatoires, c'est soit :
Call Init()
soit :
Init

Mais pas un mix.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
3
NHenry
Messages postés
14971
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 août 2022
161
15 août 2012 à 14:09
Bonjour,

Quelle est la ligne en cause ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
cs_JLB59
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

15 août 2012 à 14:44
Bonjour et merci de ton aide,

Ceci est une partie du code :
Si tu peux m'expliquer pourquoi j'ai cette erreur, ça m'avancera beaucoup.
J'ai mis les lignes en commentaires provisoirement.

EffaceVariables
Private Sub cmdFin_Click()
...
Unload QIFIN

'#####################################################
'Call AnnuleTrancheAge

'Call Intro.OptTrancheAge1
'Call Intro.OptTrancheAge2
'Call Intro.OptTrancheAge3
'#####################################################

Intro.ImageCharge.Visible = True
Intro.ImageCharge2.Visible = True

Intro.Show

End Sub



Cordialement. JLB59
0

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

Posez votre question
NHenry
Messages postés
14971
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 août 2022
161
15 août 2012 à 15:00
Bonjour,

OptTrancheAge1 est une fonction ?
Je pense que non, dans ce cas, il faut y accéder comme si c'était une variable et non une fonction.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
cs_JLB59
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

15 août 2012 à 15:22
OptTrancheAge1 est une fonction ?
Je pense que non, dans ce cas, il faut y accéder comme si c'était une variable et non une fonction.
J'y ai pensé il y a quelques minutes, j'aurais dû mette en même temps le code des OptionButton :
...
Private Sub OptTrancheAge3_Click()
Intro.OptTrancheAge3.Value = True
Intro.OptTrancheAge2.Enabled = False
Intro.OptTrancheAge1.Enabled = False
cmdEnregistrer.Enabled = True
TrancheAge1416 = True
End Sub

Private Sub AnnuleTrancheAge_Click()
    Intro.OptTrancheAge1.BackColor = vbCyan
    Intro.OptTrancheAge2.BackColor = vbCyan
    Intro.OptTrancheAge3.BackColor = vbCyan
End Sub


Tu vois, il n'y a rien de spécifique dans ces codes. Ce n'est qu'une initialisation lors de l'appui sur Fin comme le montre cette capture :




Cordialement. JLB59
0
cs_JLB59
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

15 août 2012 à 15:55
Malheureusement, j'ai toujours l'erreur à la ligne "Call Init" !

EffaceVariables
Private Sub cmdFin_Click()
...
Unload QIFIN

'#####################################################
Call Init

'Call Intro.OptTrancheAge1
'Call Intro.OptTrancheAge2
'Call Intro.OptTrancheAge3
'#####################################################

Intro.ImageCharge.Visible = True
Intro.ImageCharge2.Visible = True

Intro.Show

End Sub



Cordialement. JLB59
0
NHenry
Messages postés
14971
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 août 2022
161
15 août 2012 à 16:08
Bonjour,

Où et comment est déclarée "Init" ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
cs_JLB59
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

15 août 2012 à 16:25
Où et comment est déclarée "Init" ?
Je l'ai mis dans un module simplement :
Public Function Init() As String
    TrancheAge710 = True
    TrancheAge1113 = True
    TrancheAge1416 = True

    Intro.OptTrancheAge1.BackColor = vbCyan
    Intro.OptTrancheAge2.BackColor = vbCyan
    Intro.OptTrancheAge3.BackColor = vbCyan
        Intro.OptTrancheAge1.Enabled = True
        Intro.OptTrancheAge2.Enabled = True
        Intro.OptTrancheAge3.Enabled = True
            Intro.OptTrancheAge1.Value = False
            Intro.OptTrancheAge2.Value = False
            Intro.OptTrancheAge3.Value = False

                Intro.cmdEnregistrer.Enabled = False

End Function


Je sais vraiment pas où mettre ça !


Cordialement. JLB59
0
cs_JLB59
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

15 août 2012 à 16:51
1) l'indentation est erratique, c'est pas terrible.
J'ai pas trop compris là !

Pour ce qui du code, au départ, c'était dans des procédure sub, mais comme tu m'as préconisé de mettre ça en Public, je me suis dit que c'était dans un module sa meilleure place puisque que ça peut être appelé de partout.

Auparavant, ça se trouvait sur 3 form, et ce que je t'ai mis ce n'est qu'une toute petite partie hein !
En réalité, il y a beaucoup de Labels qui sont initialisés ainsi que les OptionButton. Le code définitif fait plusieurs lignes, et comme j'ai 3 form qui s'en servent !
Tu vois un peu le travail !

En mettant dans un module, je n'ai plus qu'un seul code, pratique mais pas évident.

Je vais faire comme tu m'as dit. C'est certainement une faute d'inattention de ma part !


Cordialement. JLB59
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
16 août 2012 à 03:18
Salut

Perso, je n'ai toujours pas compris ton problème.
Le compilateur peut t'indiquer la ligne du Call de ta Sub parce que cette Sub renferme une erreur grossière qu'il ne sait pas compiler; ce n'est pas le Call qui pose problème.
Pour faire ces vérifs, il y a le menu "Débogage" + "Compiler VBProject".

Regrouper des instructions dans une Sub dans un module, Ok, mais fait attention à une chose : tu veux manipuler des objets appartenant à une (des) UserForm(s) : Il faut impérativement que ces formes soient chargées pour que cela fonctionne, sinon, c'est l'erreur.

La seule solution pour dénicher l'erreur est de la gérer ET/OU d'exécuter ton code ligne à ligne avec le débogage :
- F9 sur une ligne de code; elle change de couleur
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement

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)
0
cs_JLB59
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

16 août 2012 à 06:33
Bonjour Jack,

Merci de ton intervention, mais ce que tu me mets, je l'ai déjà fait, je suis pas "NeuNeu" quand même !

J'ai certainement fait une mauvaise syntaxe parce que j'ai tout vérifié, et sur les conseils de Nhenry, ça à été nettement mieux.

A force de faire des modifs, je savais plus exactement où était l'erreur , toujours est-il que maintenant, ça fonctionne bien, ou presque.



Cordialement. JLB59
0