XL 2016 Exécuter une procédure dans une autre procédure

donpopo

XLDnaute Occasionnel
Bonjour le forum,

Je cherche depuis quelques moments comment exécuter une procédure au milieu d'une procédure en cours. j'ai trouvé des exemples, mais je n'arrive pas à les appliquer à mon programme.
J'ai un userform qui me permet de sélectionner et afficher un locataire au moyen d'une liste déroulante avec les textbox inaccessibles. (textbox.enabled=false)

J'ai une procédure pour modifier la personne. Si je clique sur le bouton "modifier" de mon userform, un bouton OK apparaît sur le userform. J'ai alors une procédure Bout_OK_click() qui doit me permettre d'encoder les changements.

Cela ne fonctionne pas. Voici mes deux procédures.

Private Sub Bout_modif_loc_Click()
Bout_OK.Visible = True
TextBox1.Enabled = True
TextBox2.Enabled = True
TextBox3.Enabled = True
TextBox4.Enabled = True
TextBox5.Enabled = True
TextBox6.Enabled = True
Call Bout_Ok_click Là, cela bloque!
If Choix = 1 Then
If MsgBox("Etes-vous certain de vouloir modifier ce locataire?" & Chr(10) & "Pour changer de locataire, bouton SUPPRIMER et créer nouveau !", vbYesNo) = vbYes Then
Bout_OK.Visible = False
Sheets("Locataires").Cells(Nr_Lign, 2).Value = TextBox1.Value
Sheets("Locataires").Cells(Nr_Lign, 3).Value = TextBox2.Value
Sheets("Locataires").Cells(Nr_Lign, 4).Value = TextBox3.Value
Sheets("Locataires").Cells(Nr_Lign, 5).Value = TextBox4.Value
Sheets("Locataires").Cells(Nr_Lign, 6).Value = TextBox5.Value
Sheets("Locataires").Cells(Nr_Lign, 7).Value = TextBox6.Value
Exit Sub
Else
TextBox1.Value = Sheets("Locataires").Cells(Nr_Lign, 2)
TextBox2.Value = Sheets("Locataires").Cells(Nr_Lign, 3)
TextBox3.Value = Sheets("Locataires").Cells(Nr_Lign, 4)
TextBox4.Value = Sheets("Locataires").Cells(Nr_Lign, 5)
TextBox5.Value = Sheets("Locataires").Cells(Nr_Lign, 6)
TextBox6.Value = Sheets("Locataires").Cells(Nr_Lign, 7)
Exit Sub
End If
End If
End Sub

Private Sub Bout_Ok_click()
Choix = 1 Choix est déclaré en Public
End Sub

Quelqu'un aurait-il une solution à ce problème?
Merci d'avance,
Donpopo
 

donpopo

XLDnaute Occasionnel
Bonsoir,
en fait, la procédure Bout_Click() ne réagit pas. Si je clique sur ce bouton, rien ne se passe et la procédure principale reste en rade. (exit sub à mon avis)
Choix est déclaré en public dans le code de l'userform
Toutes ces procédures sont dans le code de l'userform.
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Tout cela doit fonctionner normalement, c'est à dire, au vu de ce qui est programmé, de façon complètement absurde. Je ne comprend même pas ce que vous avez voulu faire. J'ai vaguement l'impression que vous aviez cru qu'en invoquant la procédure qui s'exécute aussi quand on clique sur le bouton, cela suspendrait l'exécution jusqu'à ce qu'on le fasse. Pourquoi voudriez vous qu'il en soit ainsi ?
 

Dudu2

XLDnaute Barbatruc
Comme @Dranreb, je ne vois rien qui bloque. Sans essayer de comprendre le bidule, une simple trace montre que rien d'anormal ne bloque la séquence.
1611688365203.png
1611688402890.png
 

Dudu2

XLDnaute Barbatruc
@donpopo, ton code est un peu étrange.
Le bouton "Bout_modif_loc" est le bouton pour modifier les valeurs dans la feuille "Locataires" à partir des valeurs du UserForm. Tu n'as nullement besoin de ce bouton OK ni de la variable Choix qu'il met à 1 sans rien faire d'autre. D'ailleurs tu peux déclarer cette variable Public, bien que la syntaxe soit acceptée elle ne sera jamais "visible" à l'extérieur du code du UserForm dans lequel tout est Private.
 

Dudu2

XLDnaute Barbatruc
VB:
Option Explicit



Option Explicit

Private Nr_Lign As Integer

'-----------------------
'Initialisation UserForm
'-----------------------
Private Sub UserForm_initialize()
    Me.Left = 800: Me.Top = 200
 
    Call SetComboBox
End Sub

'------------------
'Choix sur ComboBox
'------------------
Private Sub Combobox1_Change()  'remplir la ligne du locataire après sélection dans liste déroulante et empecher la modification
    If ComboBox1.ListIndex = -1 Then Exit Sub
 
    Nr_Lign = ComboBox1.ListIndex + 1 + 5

    TextBox1.Value = Sheets("Locataires").Cells(Nr_Lign, 2)
    TextBox2.Value = Sheets("Locataires").Cells(Nr_Lign, 3)
    TextBox3.Value = Sheets("Locataires").Cells(Nr_Lign, 4)
    TextBox4.Value = Sheets("Locataires").Cells(Nr_Lign, 5)
    TextBox5.Value = Sheets("Locataires").Cells(Nr_Lign, 6)
    TextBox6.Value = Sheets("Locataires").Cells(Nr_Lign, 7)
    Call Enable(False)
End Sub

'---------------
'Bouton Modifier
'---------------
Private Sub Bout_modif_loc_Click()
    If ComboBox1.ListIndex = -1 Then
        MsgBox "Veuillez d'abord sélectionner un locataire.", vbInformation
        Exit Sub
    End If
    Call Enable(True)
End Sub

'-------------------------
'Bouton OK en modification
'-------------------------
Private Sub Bout_Ok_click()
    If MsgBox("Etes-vous certain de vouloir modifier ce locataire ?" & Chr(10) & "Pour changer de locataire, bouton SUPPRIMER et créer nouveau !", vbYesNo) = vbYes Then
        Sheets("Locataires").Cells(Nr_Lign, 2).Value = TextBox1.Value
        Sheets("Locataires").Cells(Nr_Lign, 3).Value = TextBox2.Value
        Sheets("Locataires").Cells(Nr_Lign, 4).Value = TextBox3.Value
        Sheets("Locataires").Cells(Nr_Lign, 5).Value = TextBox4.Value
        Sheets("Locataires").Cells(Nr_Lign, 6).Value = TextBox5.Value
        Sheets("Locataires").Cells(Nr_Lign, 7).Value = TextBox6.Value
        MsgBox "Locataire " & ComboBox1.Value & " modifié !"
        Call ClearZones
        Call SetComboBox
    Else
        TextBox1.Value = Sheets("Locataires").Cells(Nr_Lign, 2)
        TextBox2.Value = Sheets("Locataires").Cells(Nr_Lign, 3)
        TextBox3.Value = Sheets("Locataires").Cells(Nr_Lign, 4)
        TextBox4.Value = Sheets("Locataires").Cells(Nr_Lign, 5)
        TextBox5.Value = Sheets("Locataires").Cells(Nr_Lign, 6)
        TextBox6.Value = Sheets("Locataires").Cells(Nr_Lign, 7)
        MsgBox "Modification annulée !"
    End If
    Call Enable(False)
End Sub

'----------------
'Bouton Supprimer
'----------------
Private Sub Bout_suppr_loc_Click()
    If ComboBox1.ListIndex = -1 Then
        MsgBox "Veuillez d'abord sélectionner un locataire.", vbInformation
        Exit Sub
    End If
 
    If MsgBox("Etes-vous certain de vouloir supprimer ce locataire ?", vbYesNo) = vbYes Then
        Sheets("Locataires").Rows(Nr_Lign).EntireRow.Delete
        MsgBox "Locataire " & ComboBox1.Value & " supprimé !"
        Call ClearZones
        Call SetComboBox
    Else
        MsgBox "Suppression annulée !"
    End If
End Sub

'--------------
'Bouton Quitter
'--------------
Private Sub Bout_quit_loc_Click()
    Unload Me
End Sub

'---------------------------
'Valorisation de la ComboBox
'---------------------------
Private Sub SetComboBox()
    Dim DernièreLigneLocataire As Long
 
    With Application
        DernièreLigneLocataire = .Max(.IfError(.Match("zzz", ThisWorkbook.Worksheets("Locataires").Columns(1), 1), 0), _
                                 .IfError(.Match(999 ^ 99, ThisWorkbook.Worksheets("Locataires").Columns(1), 1), 0))
    End With

    ComboBox1.List = Sheets("Locataires").Range("A6:A" & DernièreLigneLocataire).Value
End Sub

'--------------------------------------------------
'Mise à True ou False des propriétés TextBox.Enable
'--------------------------------------------------
Private Sub Enable(Bool As Boolean)
    Dim i As Integer
 
    For i = 1 To 6
        Me.Controls("TextBox" & i).Enabled = Bool
    Next i
    Bout_OK.Visible = Bool
End Sub

'--------------------------------
'Effacement des zones du UserForm
'--------------------------------
Private Sub ClearZones()
    Dim i As Integer
 
    For i = 1 To 6
        Me.Controls("TextBox" & i).Text = ""
    Next i
    ComboBox1.Clear
End Sub
 
Dernière édition:

donpopo

XLDnaute Occasionnel
Une petite question cependant.
lorsque je procède à la modification d'un locataire, cela fonctionne très bien; mais je n'arrive pas corriger, par exemple, une faute de frappe au nom du locataire, ce nom se situant en liste déroulante.
J'ai essayé de modifier un nom de cette liste; j'ai poussé le bouton OK; le msgbox me signale avoir bien corrigé le nom et m'affiche le nouveau nomcorrigé ; mais lorsque je resélectionne le locataire, son nom est resté tel quel et n'a pas été modifié.
comment puis-je récupérer ma modification dans la combobox?
Merci d'avance.
 

Discussions similaires

Statistiques des forums

Discussions
314 491
Messages
2 110 180
Membres
110 690
dernier inscrit
Zeppelin