Identifier l'userform à l'origine du lancement d'un code

Bonjour,

Je relance une question.

Je viens de faire un exemple pour illustrer mon problème.

En fait l'userform1 et l'userform2 font appel à l'userform3.

Je souhaite utiliser l'userform3 pour rajouter une sous-catégorie qui sera commune à l'userform1 et 2.

En utilisant l'userform1, tout fonctionne. En revanche pour l'userform2 ça n'est plus le cas.

usf2

dans le code de l'userform3 il faudrait que je puisse remplacer userform1 par une variable qui identifiera qui a lancé l'userform3.

Lancé par: userform1 ou userform2?

(Un peu comme fonctionne application.caller pour les forms)

Private Sub Enr_Click()
Dim SC, DLig As Integer, Col As Integer, Ref As String, PlageTri As String
   UserForm1.ComboBox2.Clear
    With Sheets("donnees")
        ' recherche de la plage des sous catégories
       Col = .Range("G1:I1").Find(what:=UserForm1.ComboBox1, LookAt:=xlWhole).Column ' trouve le n° de colonne de la catégorie sélectionnée
       DLig = .Cells(Rows.Count, Col).End(xlUp).Row + 1 'dernière ligne de la sous catégorie
       .Cells(DLig, Col) = Me.TextBox1.Value 'ecriture de la sous catégorie

        'Adapte en fonction de la situation
       If DLig = 2 Then
            UserForm1.ComboBox2.AddItem Cells(2, Col).Value
        Else
            'récupère les coordonnées de tri de la sous catégorie
           PlageTri = .Range(.Cells(2, Col), .Cells(DLig, Col)).Address
            Ref = .Cells(2, Col).Address

            'tri
           .Range(PlageTri).Sort key1:=.Range(Ref), Orientation:=xlAscending

            'affecte les sous-catégories au tableau SC
           SC = .Range(.Cells(2, Col), .Cells(DLig, Col)).Value

            'affecte les sous-catégorie au combobox
           UserForm1.ComboBox2.List = SC 'affecte la plage au combobox

        End If

        Unload Me ' ferme l'userform
   End With
End Sub

Merci pour l'information.

Cordialement

ddetp

Bonjour, il y a peut-être un moyen de contourner le problème.

Private Sub CommandButton1_Click()
Dim trouve As Range
Set trouve = Feuil1.[G1:I1].Find(ComboBox1, lookat:=xlWhole)
If Not trouve Is Nothing Then
Feuil1.Cells(Rows.Count, trouve.Column).End(xlUp).Offset(1, 0) = InputBox("ajout d'une sous-catégorie")
End If
'Placer ici vos autres instructions pour recharger le combobox2
Set trouve = Nothing
End Sub

Ce petit bout de code ajoute la nouvelle catégorie dans l'une des trois listes, vous n'avez plus qu'à copier-coller la boucle qui vous permet d'alimenter le combobox2

Bonjour Machin,

Merci pour ta réponse.

Des moyens de contourner, il y en a effectivement.

Ma question était précise car je pense qu'il y a moyen de faire comme je le souhaite.

S'il n'y a pas d'autre réponse, je me débrouillerai pour contourner le problème.

Je testerai ta solution à ce moment là.

merci encore

ddetp88

Désolé !

Bonjour

Une solution simple

Modifications dans Module1

Public Usf As UserForm

Sub LanceUserform1()
  Set Usf = UserForm1
  UserForm1.Show
End Sub
Sub LanceUserform2()
 Set Usf = UserForm2
  UserForm2.Show
End Sub

Cette affectation pourrait se placer dans le code de l'Userform

style

Private Sub UserForm_Initialize()
Dim C
Set Usf = Me
Me.ComboBox1 = Clear
Me.ComboBox2 = Clear
C = [G1:I1].Value
Me.ComboBox1.List = Application.Transpose(C)
End Sub

Dans le code de l'Userform3 remplacer Userform1 par Usf

Bonjour Banzai,

Une fois de plus tu m'apportes la solution.

Merci et au plaisir.

Cordialement

ddept

Rechercher des sujets similaires à "identifier userform origine lancement code"