utiliser un UserForm à la place des InputBox

Taote

XLDnaute Nouveau
Bonjour à tous,
Je voudrais utiliser un UserForm en début de Macro à la place des questions par InputBox. A priori je trouve cela plus pratique s'il y a beaucoup de paramètres à rentrer, et puis j'aimerais après utiliser des cases à cocher (dès que j'aurai passé cette première étape).

J'ai bien progressé aujourd'hui grâce aux nombreux messages sur ce forum, mais là je bloque. J'ai fait une macro qui tourne bien avec 3 InputBox, mais je n'arrive pas à la faire tourner avec un UserForm.

Première question, peut-on récupérer les valeurs saisies dans le UserForm comme variables pour d'autres macro? :confused: Je pensais lancer une macro qui appelait le UserForm et après saisie finir la macro avec les valeurs du UserForm. Mais j'ai pas trouvé, alors j'ai recopié toute ma macro dans le code du UserForm. Est-ce le meilleur moyen?

Et après, j'ai pas mal de problème, le premier avec les déclarations des variables du UserForm (j'ai dû retirer les déclarations Dim .. As..), ensuite avec une variable=ActiveSheet.Name, j'ai l'impression que les références sont modifiées.
Ci-joint fichier, avec la macro qui tourne (j'ai mis les valeurs par défaut, y'a qu'à valider) et celle via UserForm qui plante.

Merci d'avance
 

Pièces jointes

  • UserForm InputBox.zip
    25.1 KB · Affichages: 141

Bigfish

XLDnaute Occasionnel
Re : utiliser un UserForm à la place des InputBox

Salut,

tu as plusieurs solutions pour recuperer le contenu d'une textbox pour le mettre dans une variable que tu pourras reutiliser dans d'autre macro:

la premiere que je penses etre la plus simple pour un debutant et qui est de declarer ta variable en variable public ce qui permet d'avoir une variable qui a une portée sur touts les modules et autres codes de ton projet et qui a une durée de vie = a la durée d'exution de ta macro.

Tu dois la declarer en debut d'un module. Par exemple:

Public MaVariable As String

puis pour lui attribuer une valeur depuis un module:
MaVariable = Userform1.TextBox1.Text

Tu peux aussi la declarer dans le code d'un userform mais toujours en public.
Puis lui attribuer une valeur depuis le code du Userform

MaVariable = Me.TextBox1.Text

en suite pour l'utiliser dans le code d'un module tu fait comme ceci(par exemple):

Sheets("feuil1").Range("A1").Text = Userform1.MaVariable.

L'autre methode consite a passer la valeur en parametre lors de l'appel de la macro.

Par exemple tu as une premiere macro:

Sub Macro1 ()
Dim MaVariable As String
MaVariable = Userform1.TextBox1.Text
Call Macro2(MaVariable)
End sub

puis dans la deuxieme:

Sub Macro2 (Byval MonAutreVariable As String)
Sheets("feuil1").Range("A1").Text = MonAutreVariable
End sub

note que MonAutreVariable pourrait elle aussi s'appeler MaVariable cela ne poserait aucun probleme.

A+:)
 

Taote

XLDnaute Nouveau
Re : utiliser un UserForm à la place des InputBox

Merci Bigfish! Avec tes explications et celles PierreJean dans une autre discussion https://www.excel-downloads.com/threads/input-box-afficher-en-deux-ligne.106071/, j'ai pu m'en sortir avec ta première solution.
Et merci Myta, même si je n'ai pas compris. En fait, je ne sais pas quelle différence cela fait avec le val... :eek: C'est pas grave, pour l'instant j'avance. :p
Encore merci à tous
 

Lii

XLDnaute Impliqué
Re : utiliser un UserForm à la place des InputBox

Bonjour Tous,

De la nécessité de savoir "dans quelle feuille on est" et "dans quelle feuille sont les informations utiles".
Avec d'autres remarques ...
 

Pièces jointes

  • TexttBox Nombre.zip
    19 KB · Affichages: 156

Taote

XLDnaute Nouveau
Re : utiliser un UserForm à la place des InputBox

Génial, merci beaucoup Lii! :) Tes explications dans fichier joint sont très utiles. J'aime bien cette solution de mettre tout le code dans le UserForm. Et ta macro fonctionne à merveille. En fait tu as laissé dans une référence CELLS le contenu de la TextBox (Bloc1) à la place de la convertion en chiffre [Col1=var(bloc1)] et cela fonctionne qd même. Je suppose que le texte est alors interprété comme un nombre...

Mon souci avec la feuille "active" (la première) était que mon nom de feuille ("List") peut en fait varier et que je cherche à faire une macro qui fonctionne quelle que soit le nom de la première feuille, d'où l'idée de MonNom=ActiveSheet.Name (qui vient d'une macro de Pierre Jean). Si je l'utilise avant la création de la deuxième feuille, est ce que je peux l'utiliser comme variable à la place de "List"?

J'ai une autre question pour les Range. Si j'ai une variable COL qui contient la référence d'un colonne en lettre (ex. "E") comment est-ce que je peux obtenir le chiffre correspondant (ex. "5")? C'est pour utiliser des références telles que Cells(m, COL + 1), avec COl en chiffre, ou calculer la différence entre deux colonnes.:eek:

Merci d'avance
 

Lii

XLDnaute Impliqué
Re : utiliser un UserForm à la place des InputBox

Re,

Réponse 1 :

a) Si tu as un bouton de lancement de ton Userform sur chaque feuille, tu peux rajouter :

Dim Nom as String 'pas dans la macro suivante!

Private Sub UserForm_Initialize()
Nom=ActiveSheet.Name
End Sub

et dans l'autre macro,

Private Sub BtnValider_Click()

With Sheets(Nom)


Attention au changement de feuille. Il faudra fermer l'USF, en désactivant la feuille par exemple.

Dans le module de la feuille ajoute alors :

Private Sub Worksheet_Deactivate()
Unload UserForm1
End Sub

b) Si tu n'as qu'un bouton de lancement de ton Userform pour toutes les
feuilles,
il faudra d’abord connaître le nom de la feuille de départ !
Une liste déroulante dans l'USF, pourrait faire l'affaire.


Réponse 2 :

Range("E10").Column donne le numéro de la colonne, ici 5 pour E.
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Taille UserForm
Réponses
3
Affichages
355

Statistiques des forums

Discussions
312 310
Messages
2 087 117
Membres
103 477
dernier inscrit
emerica