Extraire données d'un userform vers Excel
Bonjour,
après plusieurs jours de recherches intensives sur tous les forums et cours disponibles sur le web, j'en appel à votre aide.
En effet, j'ai un soucis tout bête mais qui me tracasse énormément : j'ai besoin d'un formulaire qui me permet de rentrer les titres des colonnes que je vais utiliser pour le traitement de données.
J'utilise donc un userform et le complète de plusieurs textbox. Et là c'est le drame, impossible de faire venir le contenu du formulaire (les titres des colonnes écrits dans les textbox) sur la fiche Excel.
j'ai tout tenter : la méthode avec les variables globales, celle sans variable globale mais avec with new ; j'ai tenter toutes les solutions que des gens ont poster sur internet, j'ai copié collé des codes qui étaient censé fonctionner sans succès (je vous fais pas la liste de tout les cours et forum que j'ai lut).
Clairement le soucis viens de moi mais je ne vois pas ou ; je joint à ce post un fichier Excel avec un exemple type de la fonction que je tente de réaliser mais sans les 15 labels et 12 textbox. La fonction s'appelle TestUser, le userform s'appelle TestUserform et la variable à afficher Test.
J'ai réussi à contourner le problème en utilisant les Inputbox à la place du userform mais c'est une catastrophe esthétique les messages s'enchainent et s'accumulent sans qu'on en voit le bout.
Je sais qu'il y a plusieurs méthodes possibles mais je ne sais même pas quelle serais la plus adéquate pour mon projet.
Merci d'avance de toutes vos réponses.
je vous met le code ici au cas ou, le fichier excel est tout en bas (à ce que me dit l'aperçu) :
Function TestUser()
'creation du userform
With New TestUserform
'titre de la fenetre
.Caption = "titre test"
'label
.Label1.Caption = "Bonjour et bienvenue "
'zone de texte
.TextBox1.Value = "test"
'rend visible le Userform
.Show
If .DiagOK Then
' si DiagOK = True => on a validé
Range("A1").Select
ActiveCell.FormulaR1C1 = Test
Else
' si DiagOK = False => la saisie a été annulée
MsgBox "Saisie annulée"
End If
End With
End FunctionOption Explicit
Public DiagOK As Boolean ' Flag pour validation
Private Sub CommandButton1_Click()
Dim Test As String
DiagOK = True ' Flag OK
Test = Me.TextBox1.Text
Sheets("Feuil1").Range("C1").Text = Test
Me.Hide
End Sub
Private Sub CommandButton2_Click()
Me.Hide
End SubPS : j'ai découvert le userform lundi (on est jeudi) donc si il y a des erreurs digne des pires soyez indulgent merci
Bonjour,
N'ayant pas compris l'intérêt du code dans le module Module1, j'ai carrément supprimé ce module. Pour ouvrir l'userForm TestUserform il te suffit de coder quelque part :
TestUserform.ShowÀprès, ça donne :
Option Explicit
Private Sub CommandButton1_Click()
Sheets("Feuil1").Range("C1").Value = Me.TextBox1.Text
Unload Me
End Sub
Private Sub CommandButton2_Click()
Unload Me
End SubBonjour et merci de ta réponse.
J'ai un soucis avec ton code il ne fonctionne pas sur mon Excel ; j'ai fais copié collé pour ne pas faire d'erreur de frappe.
Quand je lance la fonction, que je rempli la textbox et que je clique sur le bouton commande 1 rien ne se passe : ni la copie du texte ni la fermeture du userform.
Aurais-je une option de désactiver ou activer qu'il ne faudrait pas ? Est ce que c'est mon excel, mon vba ou mon pc qui ne veut pas faire fonctionner le userform ? après toutes les solutions que je teste depuis 2 jours je commence à me poser ces questions.
je te remet le fichier avec ton code pour que tu puisse tester de ton côté, si sa fonctionne chez toi je ne comprend vraiment pas pourquoi aucune solution ne fonctionne chez moi.
Encore merci du temps que tu prend pour répondre sur le forum.
Ps : le module 1 était plus pour faire "jolie" et montrer la forme de mon projet si jamais cela avais une influence sur le problème.
Bonjour,
Tu ne dois pas utiliser la fonction TestUser pour ouvrir le UserForm. (Bien que... ça marche quand même !)
Quand tu veux ouvrir la porte d'une maison, tu ne commences par y mettre le feu n'est-ce pas ? (Bien que... ça marche quand même !)
Les fonctions sont faites pour faire des calculs, renvoyer une valeur... Pas pour mettre le feu (faire une une action...)
Pour cela on utilise un bouton ou un évènement, ou on lance une macro toute bête (à partir du menu ou d'un raccourci.)
Donc tu crées une macro Sub Galopin() dans Module1
qui contient :
Sub Galopin()
TestUserform.Show
End SubCette macro va lancer ton Userform de la manière ...que tu veux. (au moyen d'un bouton placé quelque part ou au moyen du ruban Développeur > Macros...)
Et ton UserForm viendra ensuite écrire ou tu veux (Sur ActiveCell ou sur la cellule que tu auras précisée.
...sans que tu aies besoin d'écrire quoi que ce soit auparavant dans cette cellule cible.
OK ?
Dans le Userform tu peux mettre par exemple :
Public DiagOK As Boolean ' Flag pour validation
Private Sub CommandButton1_Click()
DiagOK = True
End Sub
Private Sub CommandButton2_Click()
If DiagOK Then ActiveCell = Me.TextBox1
Range("A1") = Me.TextBox1
Me.Hide
End Submais en fait le Flag (DiagOK) n'est pas vraiment utile (si tu supprimes CommandButton1 et le If... Then)
A+
Bonjour Galopin merci de ton explication.
Depuis lundi je lance la fonction directement en pensant que c'est comme une macro, cela explique beaucoup de choses ^^
Comment intégrer la fonction au bouton de macro sans que sa me replonge dans les soucis que j'ai depuis lundi ? j'ai essayer de rajouter un bouton commande (celui de l'image) qui lance la fonction mais sa casse tout.[/size]
Ok je viens de tilter en voyant les boutons valider et annuler qu'il faut que je renomme les labels directement dans le userform ; c'est pour cela que thauthème ne comprenais pas l'utilité de mon premier module !
je laisse toutes mes erreurs et mon enchainement de réflexion au cas ou une personne ai le même problème que moi, sa sera toujours plus utile qu'un : "merci galo salut".
Un grand merci à vous 2 sa me libère d'un poids
Je met le sujet en résolu, sa devrais être dans mes cordes
bonsoir,
Je ne te suis pas trop dans tes commentaires un peu désordonnés...
Les Labels sont sans importance ce sont des indication pour guider l'utilisateur avant la saisie.
Selon moi le bouton du haut "Command" est sans intéret tu peux le supprimer.
le DiagOk aussi
C'est le bouton Ok qui va tout basculer dans feuille :
Private Sub CommandButton2_Click()
Range("A1") = Me.TextBox1
Range("B1") = Me.TextBox2
Range("C1") = Me.TextBox3
'et ainsi de suite
Unload Me 'cas général pour fermer le UserForm
End SubN'hésite pas à revenir : Réinventer la roue n'aide pas à progresser !
A+