Passage de variable

Résolu
Signaler
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011
-
Messages postés
76
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
7 mai 2009
-
bonjour ami(e)s programeurs et programmeuzes,

J'aimerai pouvoir passer une variable d'une fonction a une autre, mon programme ressemble en résumé a ca

Dim temoin

Call Condition

If (temoin = 1) Then GoTo FIN

Call Machin
Call Truc
FIN :
Call FIN
---------------------------------------------------------------
Sub Condition()
If (1=1) Then Call Erreur   ' 1=1 pour faire simple
End Sub
----------------------------------------------------------------
sub machin()
[du code]
End Sub
------------------------------------------------------------------
sub Truc()
[du code]
End Sub
--------------------------------------------------------------------
Sub Erreur()
msgbox(...)
temoin = 1
End Sub
----------------------------------------------------------------------
Sub FIN()
[fin du programme]
End Sub

Bon je pense n'avoir rien oublié, je pense aussi que ceux qui s'y connaisent beaucoup en VBA auront repérer le probleme que j'ai en un clin d'oeil...il s'agit en effet du témoin qui n'est pas à 1 lorsque la fonction Erreur() est passée.

Quelqu'un saurait comment passer une variable de cette manière?? ou si il existe un autre moyen?

9 réponses

Messages postés
76
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
7 mai 2009

voici comment je passe une variable a une méthode et à une fonction.

Par exemple, cette sub



Public





Sub
main_sub(
ByVal
Socketlocal
As integer

)






Je lui passe le paramètre Socket Local, que je pourrait utiliser n'importe ou dans la sub.

Idem pour une fct

Et j'appellerai cette sub ou je veu de la facon suivante

main_sub(3227)
Messages postés
76
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
7 mai 2009

oui, si tu veux arreter une sub tu fais exit sub, idem pour une fct exit function, exit for, exit try (pour un try catch) etc !
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

Merci je vais essayer ca de suite.
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

A bin non ca marche pas, ma fonction dans laquelle je dois faire passer ma variable c'est la fonction Private Sub CommandButton1_Click(), qui s'active lorsque je clique sur le bouton de ma UserForm.
Si je met Private Sub CommandButton1_Click(ByVal Temoin_Fin As Boolean) ca me met un message d'erreur.

Je vais faire deux partie de cette fonction, la preincipale sans passer la variable et une autre ou je passerai la variable.(a moins qu'il yest une meileur solution)
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

Nan ya rien a faire le programme ne s'arrete pas lorsque la fonction de fin est passée, il revient au dessus, fait les fonctions machin et truc puis refait la fonction de fin.
Messages postés
76
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
7 mai 2009

met ton code svp et essaye d'expliquer clairement ce que tu recherches.
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

Private Sub CommandButton1_Click()

'Ce programme charge un fichier texte depuis un serveur FTP
'Le fichier charger et l'entrée au serveur sont sécurisé
'puis on insere de nouvelles données dans ce fichier
'enfin on renvoie se fichier via le serveur FTP

'variable de boucle
Dim temoin As Integer
Dim free
'variables de traitement des données
Dim an
Dim capteur
Dim a
Dim b

Call Données_FTP
Call Shell("command.com /C C:\afhymat\envoi1.bat", 3)

'Fonctions permetant d'attendre un temps defini
'permet de laisser le temps à l'ordinateur de charger le fichier de données
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 5
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime

Call Ecriture_Fichier
Call Envoi_FTP
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 5
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
Call Fin_Traitement

End Sub
Sub Données_FTP()

'Change les données de envoi1.ftp en fonction des informations rentrées

Sheets("données").Select 'selectionne une feuille

temoin = 1
Open "C:\afhymat\envoi1.ftp" For Input Access Read As 1
Do While Not EOF(1) 'boucle jusqu'a ce qu'il n'y est plus de valeurs
Line Input #1, textline 'La ligne lue est retournée dans la variable Textline
Range("A" & temoin).Value = textline 'A chaque ligne une nouvelle cellule de la colonne A
temoin = temoin + 1
Loop
Close #1

'Change l'IP
Range("A1").Value = "open " & TextBox1.Value

'Change le nom d'utilisateur
Range("A2").Value = TextBox2.Value

'Change le mot de passe
Range("A3").Value = TextBox3.Value

'rentre le texte dans le FTP
'efface le contenu du fichier et réécris les informations
temoin = 1

Open "C:\afhymat\envoi1.ftp" For Output As 1
Do While temoin < 9
textline = Range("A" & temoin).Value
Print #1, textline
temoin = temoin + 1
Loop
Close #1

Sheets("parametre").Select

End Sub
Sub Envoi_FTP()

'Change les données de envoi2.ftp en fonction des informations rentrées

Sheets("données").Select 'selectionne une feuille

'rentre le texte dans le FTP
'efface le contenu du fichier et réécris les informations
Range("A5").Value = "send para_l.txt"

temoin = 1
free = FreeFile

Open "C:\afhymat\envoi2.ftp" For Output As free
Do While temoin < 9
textline = Range("A" & temoin).Value
Print #free, textline
temoin = temoin + 1
Loop
Close #free

Call Shell("command.com /C C:\afhymat\envoi2.bat", 3)

Sheets("parametre").Select
End Sub
Sub Ecriture_Fichier()

' Cette fonction vérifie la longueur des valeures entrées (qui doit etre de 5 chiffres)
' Ecrit ces valeurs sous le format convenu dans le fichier texte
' Envoi ce fichier via le serveur FTP

' Initialisation de la variable capteur
capteur = ":"
a = Len(Range("B1"))
b = Len(Range("B2"))

' Vérification de la longueur et action en conséquence
' Pour le premier capteur

If (a 1) Then capteur capteur & "0000" & Range("B1").Value
If (a 2) Then capteur capteur & "000" & Range("B1").Value
If (a 3) Then capteur capteur & "00" & Range("B1").Value
If (a 4) Then capteur capteur & "0" & Range("B1").Value
If (a 5) Then capteur capteur & Range("B1").Value
If (a > 5) Then Call Erreur

' Pour le deuxieme capteur
capteur = capteur & ":"
If (b 1) Then capteur capteur & "0000" & Range("B2").Value
If (b 2) Then capteur capteur & "000" & Range("B2").Value
If (b 3) Then capteur capteur & "00" & Range("B2").Value
If (b 4) Then capteur capteur & "0" & Range("B2").Value
If (b 5) Then capteur capteur & Range("B2").Value
If (b > 5) Then Call Erreur


Open "C:\afhymat\para_l.txt" For Output As 1
Print #1, capteur
Close #1

End Sub

Sub Fin_Traitement()

'Fonction qui remet des données érronnées dans le fichier FTP pour plus de sécurité
'et supprime le fichier texte

Sheets("données").Select

'Dispose les valeures erronées dans les cases
Range("A1").Value = "open 0.0.0.0"
Range("A2").Value = "user"
Range("A3").Value = "mdp"
Range("A4").Value = "cd b:"
Range("A5").Value = "get para_l.txt"
Range("A6").Value = "disconnect"
Range("A7").Value = "quit"
Range("A8").Value = "exit"

'Rentre les valeurs erronées dans le fichier txt
temoin = 1

Open "C:\afhymat\envoi1.ftp" For Output As 1
Do While temoin < 9
textline = Range("A" & temoin).Value
Print #1, textline
temoin = temoin + 1
Loop
Close #1

' Meme chose pour envoi2
Range("A5").Value = "send para_l.txt"
Open "C:\afhymat\envoi2.ftp" For Output As 1
Do While temoin < 9
textline = Range("A" & temoin).Value
Print #1, textline
temoin = temoin + 1
Loop
Close #1

'Effacement des données
Sheets("données").Select
Columns("A").Delete

'suppression du fichier texte
an = "C:\afhymat\para_l.txt"
Kill an

'Supprime le UserForm
UserForm2.Hide

Sheets("parametre").Select

End Sub

Sub Erreur()
MsgBox prompt:="Vous n'avez pas entrer de valeur ou entrer une valeur trop grande, le programme va maintenant se terminé", _
Buttons:=vbExclamation, Title:="ATTENTION"

Temoin_Fin = True

Call Fin_Traitement

End Sub



Je voudrais que lorsque le programme passe par la fonction erreur, il passe uniquement la fonction Fin_Traitement et s'arrete.
Pour cela j'ai essayer de passer une variable(cf plus haut) mais ca ne marche pas il execute tout de meme les autres fonctions.

Peut etre existe il une ligne de code capable d'arreter le programme en cours?
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

OMG il suffit de mettre un End a la fin de Fin_Traitement.
Alalala je me sidère moi meme, apres tout je suis un noob c'est comme ca qu'on apprend^^.
Dsl de t'avoir dérangé dimitriusai.
Messages postés
76
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
7 mai 2009

Pas de soucis !