[Userform] Affecter un texte en fonction d'une liste
Bonjour à tous !
Bon alors voilà je me suis décidé à découvrir un peu le monde des Userforms ! Et là je suis bloqué, j'ai réussit à faire en sorte que le texte inscrit dans la fenêtre soit affiché dans une cellule précise.
Par contre ce que je voudrais c'est qu'en fonction du choix sélectionné dans la liste déroulante (en l'occurence, la date), la valeur inscrite soit insérée dans la cellule qui correspond à la date en question (même ligne).
J'en profite aussi pour une précision, j'ai vu que le nombre inséré dans la cellule B2 de mon fichier (ajouté par l'Userform) est considéré comme du texte, on peut choisir de le convertir en nombre mais comment faire pour que ce soit automatiquement considéré comme un nombre ? Afin d'éviter de le faire à chaque fois qu'un nombre est rentré dans une nouvelle cellule...
N'hésitez pas si je n'est pas été assez clair !
Merci d'avance pour votre aide
PS: je vous joins le fichier Excel d'essai (Format 2007 compatible 97-2003).
Salut j'ai supprimé ta liste déroulante pour la remplacer par un calendrier c'est plus sympa. Dis moi si ça te conviens
En ce qui concerne, ton chiffre à aligner à droite, j'ai déclaré ta variable texbox1 en tant qu'entier et ça roule.
A+
Oh super c'est encore mieux que ce que j'aurais pu imaginer !!
Par contre est-ce que tu pourrais m'expliquer cette commande stp :
Private Sub CommandButton2_Click()
End Sub
Sinon je me demandais si c'était possible d'associer une cellule selon la Xème date renseignée ? En fait ce que je voudrais c'est faire un tableau du même genre que sur le fichier que tu as vu, mais avec 5 lignes renseignant la prod de la semaine et la 6ème serait un bilan hebdo en fonction des résultats... Sachant que de la 7ème à la 11ème on aurait la 2nde semaine, et ligne 12 le bilan hebdo, et ainsi de suite jusqu'à la fin du mois... En gros mon tableau serait déjà défini avec des cases vides pour les dates qui se rempliraient au fur et à mesure que je renseigne avec le Userform, et et sautant 1 ligne sur 6 en gros...
Explications dans le fil
fdelauna a écrit :Dim i As Integer > on déclare la variable i comme entier
i = TextBox1 > on attribut à i la valeur saisie dans la Texbox1
[A65536].Select > on se positionne à la dernière cellule du classeur dans la colonne A
Selection.End(xlUp).Select> on remonte jusqu'à ce qu'une valeur soir trouvée
Selection.Offset(1, 0).Select> on sélectionne la cellule juste en dessous
Selection = Calendar1> on attribue à cette dernière le date saisie dans le calendrier
Selection.Offset(0, 1).Select> on sélectionne la cellule juste à côté (à droite)
Selection = i> on lui attribue i (soit la valeur rentrée dans la Textbox1)
Unload UserForm1> on décharge la fenêtre et elle se ferme
End Sub
Pour ta dernière question, je vais essayer d'y réfléchir et te tiens au courant.
Bonjour à vous deux, forum,
Petit aparté. Sebmince, tu peux raccourcir ton code comme cela :
Private Sub CommandButton2_Click()
If Not IsNumeric(TextBox1) Then MsgBox "Entrez une valeur numérique !": Exit Sub
With [A65536].End(xlUp)
.Offset(1) = Calendar1
.Offset(1, 1) = TextBox1
End With
Unload UserForm1
End SubEn effet, en général les select ne sont pas utiles.
La première ligne sert à tester si la valeur entrée dans le textbox1 est numérique ou non. Si oui, on continue la macro, sinon un message est renvoyé et on sort de la macro.
Le bloc with...end with évite de réécrire à chaque fois [A65536].End(xlUp) (et normalement ça accélère l'exécution de la macro, mais ici c'est négligeable !)
Merci pour les précisions je n'y pense jamais au "with"
@ sebmince : Merci pour le détail ça m'a permis d'adapter en ajoutant une seconde variable
@ vba-new : Et dans le cas où je rajoute une 2nde variable, ça marche comme ceci ?
Private Sub CommandButton2_Click()
If Not IsNumeric(TextBox1) Then MsgBox "Entrez une valeur numérique !": Exit Sub
If Not IsNumeric(TextBox2) Then MsgBox "Entrez une valeur numérique !": Exit Sub
With [A65536].End(xlUp)
.Offset(1) = Calendar1
.Offset(1, 1) = TextBox1
.Offset(1, 2) = TextBox2
End With
Unload UserForm1
End SubEnfin je suppose que les lignes 2 et 3 peuvent se simplifier...
EDIT : Je précise que pour le projet, il y aura probablement 25 / 30 variables... Glurp !
Bonjour fdelauna,
Ne t'inquiète pas ! Si tu commences à avoir trop de variables, tu peux boucler sur les textbox de ton userform ! Ça pourrait ressembler à ça :
Private Sub CommandButton1_Click()
Dim i As Integer
For i = 1 To 2
If Not IsNumeric(Me.Controls("TextBox" & i)) Then MsgBox "Entrez une valeur numérique !": Exit Sub
With [A65536].End(xlUp)
.Offset(1) = Calendar1
.Offset(1, i) = Me.Controls("TextBox" & i)
End With
Next i
End SubMais ça marche si tous tes textbox s'appellent textbox !
Euh je comprend pas trop ta commande alors je vais mettre ce que j'ai fais à partir de celle de sebmince et tu vas me dire si ça revient au même :
Private Sub CommandButton2_Click()
Dim i As Integer
i = TextBox1
[A65536].Select
Selection.End(xlUp).Select
Selection.Offset(1, 0).Select
Selection = Calendar1
Selection.Offset(0, 1).Select
Selection = i
Dim j As Integer
j = TextBox2
[B65536].Select
Selection.End(xlUp).Select
Selection.Offset(0, 1).Select
Selection = j
Unload UserForm1
End SubJe sais, c'est un peu lourd pour seulement 2 variables...
Déjà, il faut que tu déclares tes variables au même endroit et au début, c'est mieux.
Dim i As Integer, j as IntegerEnsuite, il n'est pas utile de créer de variables dans ton cas parce que tu peux affecter directement la valeur du textbox à ta cellule. Exemple :
Selection = TextBox1Ensuite, comme je l'ai écris précédemment, les selects ne sont pas utiles ici.
Et je ne sais pas dans quelle cellule doit aller la valeur de ton textbox2 ? Ici, tu vas le faire aller en colonne C.
En effet, tu te places en colonne B et tu fais un Offset(0, 1). Ce qui va déplacer la sélection d'une colonne à droite. Est-ce ce que tu veux ?
Ok merci pour la précision vba-new !
J'ai une autre question, j'ai un fichier Excel avec plusieurs pages. Sur la 1ère page j'ai 4 boutons ouvrant chacun un UserForm.
Comment faire pour que le UserForm2 associe les champs renseignés à la feuille n°2, le UserForm3 à la feuille n°3, etc. ?
NB : Voici le code du UserForm2 :
Private Sub CommandButton2_Click()
[C65536].Select
Selection.End(xlUp).Select
Selection.Offset(1, 0).Select
Selection = TextBox1
Selection.Offset(0, 1).Select
Selection = TextBox2
Selection.Offset(0, 3).Select
Selection = TextBox3
Unload UserForm2
End SubSalut fdelauna,
T'as un temps de réaction énorme !!
Si ton code était affecté à la feuille2 ça ferait quelque chose comme ça :
Private Sub CommandButton2_Click()
Sheets("Feuil2").Select
[C65536].Select
Selection.End(xlUp).Select
Selection.Offset(1, 0).Select
Selection = UserForm2.TextBox1
Selection.Offset(0, 1).Select
Selection = UserForm2.TextBox2
Selection.Offset(0, 3).Select
Selection = UserForm2.TextBox3
Unload UserForm2
End SubCode qui pourrait être amélioré comme suit :
Private Sub CommandButton2_Click()
Sheets("Feuil2").Select
With [C65536].End(xlUp)
.Offset(1, 0) = UserForm2.TextBox1
.Offset(1, 1) = UserForm2.TextBox2
.Offset(1, 4) = UserForm2.TextBox3
End With
Unload UserForm2
End Sub
Salut vba-new !
Merci pour ton code par contre il ne fonctionne pas... Enfin j'ai une erreur lorsque je cliques sur "Valider" de mon UserForm2, je reçois ce message :
L'indice n'appartient pas à la sélection.
C'est probablement parce que tu n'as pas de feuille qui s'appelle "Feuil2".
Si tu veux que le code soit associé à la 2è feuille du classeur, essaie plutôt avec ce code :
rivate Sub CommandButton2_Click()
Sheets(2).Select
With [C65536].End(xlUp)
.Offset(1, 0) = UserForm2.TextBox1
.Offset(1, 1) = UserForm2.TextBox2
.Offset(1, 4) = UserForm2.TextBox3
End With
Unload UserForm2
End SubOups quel nul oui c'est évident si je renomme la feuille il ne risque pas de la retrouver... Merci vba-new !
Sinon pour info je fais une formation d'ingénieur par alternance et j'étais retourné en cours c'est pour ça que j'ai mis du temps à te répondre
@sebmince
En ce qui concerne, ton chiffre à aligner à droite, j'ai déclaré ta variable texbox1 en tant qu'entier et ça roule.
Pourrais-tu m'expliquer comment tu as fait parce que j'ai beaucoup de cellules qui doivent être sous forme de nombre ou encore monétaire...
Pourtant j'ai modifié le format, l'alignement dans les cellules etc. mais dès que j'insère une donnée à l'aide de l'userform, ces formats ne sont plus pris en compte...