J'ai lu et appliqué la solution que j'ai trouvée sur des sujets similaires, mais rien ne semble fonctionner dans mon cas.
Donc, je veux passer une variable d'un sous de mon Module1 à un formulaire utilisateur. C'est une chaîne appelée "provinceSugg".
Voici la partie pertinente de mon code:
Public provinceSugg As String
Sub probaCity()
[...]
If province = "" And city <> "" Then
provinceSugg = sCurrent.Cells(p, db_column).Offset(0, 1).Value
UserForm2.Label1 = "Do you mean " & city & " in " & provinceSugg & " ?"
UserForm2.Label1.TextAlign = fmTextAlignCenter
UserForm2.Show
Else
End If
End Sub
Et puis dans mon code utilisateur:
Private Sub userformBtn1_Click()
MsgBox provinceSugg
sMain.Range("J6").Value = provinceSugg
End Sub
Quand j'exécute mon programme:
1 / J'ai le contenu de provinceSugg affiché dans la MsgBox appelée depuis mon sous (donc il y a un provinceSugg, ce n'est pas une variable vide).
2 / La MsgBox appelée à partir du formulaire utilisateur est vide (la transmission de la valeur a donc échoué) et mon programme se bloque lors de l'exécution de "sMain.Range (" J6 "). Value = provinceSugg" avec quelque chose comme "Erreur 424 objet requis" (donc la variable n'a pas pu passer à l'utilisateur).
J'ai essayé tout ce que j'ai trouvé sur le forum et ici (différentes façons d'indiquer que provinceSugg est une variable publique mais qui plante toujours ...).
Merci d'avance pour votre aide !
Vous seriez en mesure de créer des variables publiques dans le Userform qui peuvent être définies par le module.
Ces variables ne sont accessibles que dans le Userform lorsqu'il est chargé.
Dans le Userform, déclarez les variables publiques pour les deux objets.
Public sMain As Worksheet
Public provinceSugg as string
Private Sub userformBtn1_Click()
MsgBox provinceSugg
sMain.Range("J6").Value = provinceSugg
End Sub
Dans le module, vous pouvez évaluer ces deux variables.
Sub probaCity()
[...]
If province = "" And city <> "" Then
provinceSugg = sCurrent.Cells(p, db_column).Offset(0, 1).Value
With UserForm2
.provinceSugg = provinceSugg
Set .sMain = sMain
.Label1 = "Do you mean " & city & " in " & provinceSugg & " ?"
.Label1.TextAlign = fmTextAlignCenter
.Show
End With
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim selectColumn
selectColumn= Split(Target.Address(1, 0), "$")(0)
Call UserFormStart(selectColumn)
End Sub
Module principal intérieur
Public columnSelection As String
...
Public Sub UserFormStart(ByVal columnRef As String)
'MsgBox "Debug columnRef=" & columnRef
columnSelection = columnRef
UserForm1.Show
End Sub
Inside UserForm
Private Sub UserForm_Initialize()
'MsgBox "Debug UserForm_Initialize =" & columnSelection
...
End Sub
Worksheet_SelectionChange appelle un sous-module sur le module où columnSelection est déclaré public et visible à partir de UserForm. J'ai utilisé trois variables différentes pour la référence de colonne pour montrer qu'il y a là où UserForm a accès au module. Tout cela fonctionne et a mis du temps à trouver et à travailler, d'où la soumission. Heureux les gens de chasse