Utiliser réponse userform au milieu d'un module

Bonjour,

J'ai cherché désepérement et j'ai cru avoir une réponse mais.... non.

au milieu d'une macro, je cherche à utiliser un userform avec une liste déroulante et utiliser la réponse dans un autre module. A priori c'est tout bête : déclarer la variable en public, le sub en public et voila. Mais ma donnée, une fois le userform masquée n'est pas prise en compte dans mon module principal :

variable à conserver : ref_arti

code du userform :

Sub ok_article_Click()

ref_arti = Me.ref_art

ref_article.Hide

End Sub

module :

Public ref_arti As String

Sub valide_commande_Click()

Dim i As Integer
Dim Tbl() As String
Dim J As Integer
Dim article As String
Dim texte As String
Dim Rdm As String

'cherche les lignes du tableau contenant le numéro de commande saisie et sans numéro de série saisi

    clig = Worksheets("stock rdm").Range("E" & Rows.Count).End(xlUp).Row

'affiche le userform avec ref_arti

  ref_article.Show

    For lig = 5 To clig
        J = lig - 4
        ReDim Preserve Tbl(1 To J)
        article = "article"
        If Cells(lig, 5) = Me.commande And Cells(lig, 5) = ref_arti And Cells(lig, 4) = "" Then

    'ouvre un boite de dialogue pour saisir le numéro de série du RDM reçu et l'ajoute au tableau

            Tbl(J) = Cells(lig, 6)
            texte = article & Tbl(J)
patte:
            Rdm = InputBox(texte, "attribution SN", vbOKOnly)

If Rdm = "" Then
 pomme = MsgBox("Vous devez entrer numéro de série", vbOKCancel)
 If pomme = "2" Then
 Exit Sub
 End If
 GoTo patte
End If

quand je lance en mode pas à pas, ref_arti est bien attribué dans mon userform avant le "hide" mais est vide une fois que mon code principale reprend...

Merci d'avance!

Bonsoir Lauguste75,

Méthode 1

D'abord dans ton module tu relances l'userform. Sans montrer l'initialisation de ce dernier.

Donc, au conditionnel, il serait possible de récupérer avant la ligne du show la valeur de Ref_arti par RecupArti = Ref_arti.

Puis se servir de RecupArti dans les lignes suivantes.

Méthode 2

Mais au mieux je déclarerais la variable dans l'userform

Public Ref_arti as string

Puis dans le module

 clig = Worksheets("stock rdm").Range("E" & Rows.Count).End(xlUp).Row
'Nom du formulaire exemple = Userform1
RecupArti = Userform1.Ref_Arti
'affiche le userform avec ref_arti

  ref_article.Show

Bonsoir,

Une variable "Public" doit l'être dans un module standard.

Bonne soirée

A nouveau,

@Cousinhub,

Pas nécessairement...à partir du moment ou l'on souhaite qu'elle soit récupérable par un module.

Exemple d'un déclenchement d'un contrôle de formulaire par un code dans un module.

image

Par contre une variable Private est toujours inclusive à un formulaire.

Merci!

mais j'ai encore un beug lorsque le code arrive à recup_arti.

image

Tu parles d'initialiser la userform, je n'ai pas cela dans mon code, mon seul code lié à l'userform et celui que j'ai envoyé. Le code principal ne fait qu'afficher la userform et l'userform n'a que le code de valider la valeur ref_arti quand on clique sur "ok". C'est peut être de là où vient le problème mais je ne sais pas ce que cela veut dire...

Je suis étonné que dans le code recup_arti soit avant ref.arti.show car ref_arti n'existe pas avant l'ouverture de la userform ref_article.

Merci encore!

A nouveau,

Dans mon exemple le formulaire se nomme Userform1.

Remplace celui-ci par le nom de ton formulaire.

Soit ref_article.ref_arti

D'ailleurs tu ferais mieux de nommer un formulaire en débutant par Usf... Et ce que tu veux ensuite.

Car là les noms de variables et de formulaire sont trop similaires.

Suite,

Le code fourni est à placer dans le module Valide_commande_Click posté lors de ton premier message. Et pas dans un autre module.

Sinon poste un fichier.

Rechercher des sujets similaires à "utiliser reponse userform milieu module"