Instruction call
Hello,
Help : y-a-t-il possibilité d'utiliser la fonction "Call" ou autre qui permet de traiter un cas spécifique mais je ne voudrai pas revenir sur le programme principal.
Merci
Private Sub OK_Click()
'Vérification de la saisie des différentes informations
If Année = "" Or Mois = "" Or Montant = "" Or Banque = "" Or Taux = "" Then
MsgBox "VEUILLEZ SAISIR TOUTES LES INFORMATIONS"
Else
Sheets("PHB").Select 'Selection de la feuille de données
if Taux = 3 then Call Taux
'Si A3 est vierge, la variable décalage vaut 0, l'entrée des informations
'Débute sur la ligne 3
If Range("A3").Value = "" Then
décalage = 0
Range("A3").Select
Else
'Si A3 contient une donnée, la variable décalage vaut 1
Position = Range("A1").End(xlDown).Address
Range(Position).Select
Range("A1").End(xlDown).Select
décalage = 1
End If
'Mise à jour de la base de données en descendant d'une ligne
ActiveCell.Offset(décalage, 0).Range("A1").Select
ActiveCell.Value = Année
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = Mois
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = UCase(Montant)
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = Banque
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = Taux
ActiveCell.Offset(0, 1).Range("A1").Select
End If
'Réinitialise pour la saisie suivante
With BD
Année = ""
Mois = ""
Montant = ""
Banque = ""
Taux = ""
End With
End Sub
Private Sub Taux()
'Instruction Spécifique et ne plus revenir à l'instruction "OK"
End Sub
Bonjour,
Call est une instruction (pas une fonction), dont l'utilité en VBA est à peu près nulle, puisque les procédures peuvent être appelées directement (sans Call). Elle oblige juste à placer les arguments de la procédure entre parenthèses...
Mais si Call n'a qu'un caractère ornemental inoffensif, construire un code à coups de Select et d'ActiveCell est bien plus nocif, et il serait bon de l'écrire autrement si on recherche un minimum d'efficacité (de même qu'il serait bon d'indenter son code, le mettre sous balises Code dans un post, de façon à le rendre immédiatement lisible à ceux qui ont à travailler sur le code...)
Ceci étant, et pour répondre à ta question, lorsqu'une procédure est appelée par une autre procédure, lorsque la procédure appelée se termine la poursuite de l'exécution revient toujours à la procédure appelante.
Cordialement.
Bonjour football365,
je te propose ce code VBA :
Private Sub OK_Click()
'Vérification de la saisie des différentes informations
If Année = "" Or Mois = "" Or Montant = "" Or Banque = "" Or Taux = "" Then
MsgBox "VEUILLEZ SAISIR TOUTES LES INFORMATIONS"
Else
With Worksheets("PHB") 'avec la feuille de données
If Taux = 3 Then XTaux: Exit Sub ' sortie au retour de XTaux
'Si A3 est vierge, la variable décalage vaut 0, l'entrée des
'informations débute sur la ligne 3
If .[A3] = "" Then lig = 3 Else lig = .[A3].End(xlDown).Row
'Mise à jour de la base de données
.Cells(lig, 1) = Année
.Cells(lig, 2) = Mois
.Cells(lig, 3) = Montant
.Cells(lig, 4) = Banque
.Cells(lig, 5) = Taux
End With
End If
'Réinitialise pour la saisie suivante
Année = "": Mois = "": Montant = "": Banque = "": Taux = ""
End Sub
Private Sub XTaux() 'sub à renommer ! PAS en Taux car c'est déjà
'le nom de ta variable Taux !!! à toi de trouver un autre nom
'Instruction spécifique et ne plus revenir à l'instruction "OK"
'à la place : on retourne à l'instruction "OK" et on sort
End Sub
attention : comme je n'ai pas ton fichier, tu devras peut-être adapter
la valeur de lig ; et aussi les colonnes : 1 à 5 donc A à E.
note bien que la feuille "PHB" n'est pas sélectionnée :
tu restes sur ta feuille de départ.
dhany
Hello Dhany,
Tks pour la solution
Hello MFerrand,
Merci pour les précisions.
@football365
merci pour ton retour !
dhany