MsgBox et Formulaire
Bonjour à toutes, bonjours à tous.
Je suis débutant en VBA, donc je ne maîtrise pas du tout ce langage encore.
J'expose mon besoin :
J'ai créé ce petit message qui s'affiche dès l'ouverture du fichier, et il marche très bien.
Ce que je souhaite faire maintenant, c'est quelque chose comme ça :
L'idée étant de remplir chaque case, qui remplira par la pression du bouton "Valider" des cellules spécifiques dans "Feuil1".
Avec ce code j'arrive à remplir mon formulaire, mais ça ne remplit pas encore les cellules renseignées dans le code.
Comment puis-je faire pour que cela fonctionne correctement ?
Aussi, j'aimerais que ce formulaire s'affiche dès que le bouton "OK" aura été pressé dans le premier message, et que la validation du formulaire soit refusée s'il n'y a pas que des chiffres d'entrés, ou si des cases sont vides.
J'espère que ma question est claire, je vous remercie d'avance pour l'aide que vous me fournirez.
Rod'
Bonjour rododom05
Consultes mon blog, c'est basique ma ça fonctionne. https://cellulexcel.blogspot.fr/p/qui-na-pas-un-jour-utilise-loption.html
Bonjour et1000io,
Alors justement je me suis servi de ton blog pour aller jusqu'à la fin de la création du UserForm, et je dois avouer qu'à partir de la partie programmation je suis un peu perdu. Et même en copiant-collant ton code, je suis incapable de savoir quoi adapter sur ton code pour qu'il puisse fonctionner pour mon besoin.
De plus ça ne lui permet pas de s'ouvrir dès que le ferme le MsgBox avec le bouton "OK".
Donc peux-tu nous transmettre ton fichier.
Deux lignes suffisent soit les entêtes de colonnes et une première ligne pré-renseignée.
A te relire
Hum, mon fichier est beaucoup trop gros pour pouvoir le transmettre ici, désolé.
Les cellules que je souhaite remplir sont les cellules E4, E6, E8, E10 et E13. Chacune correspondant respectivement aux cases de l'UserForm que je t'ai montré sur mon premier message.
(les cellules ont été remplies à la mains, et dans l'idéal j'aimerais ne plus avoir à y toucher)
Voici le code de ma MsgBox :
Private Sub Workbook_Open()
MsgBox "Bienvenue sur votre outil de configuration de ligne de transport !", vbOKOnly, "Bonjour !"
End SubEt donc le code issu de ton blog, brut :
Option Explicit 'Activation de la déclaration explicite des variables
Dim Ws As Worksheet 'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm
'Correspond au programme du bouton QUITTER
Private Sub CommandButton1_Click()
Unload Me
'Unload => Permet de fermer l'Userform et de l'effacer de la mémoire, les valeurs de ses contrôles sont à alors perdues.
' Me => Référence à l'objet en cours
End Sub
'Correspond au programme du FORULAIRE
'Cet évènement est important car il permet de définir les propriétés des objets et les valeurs par défaut des variables, lors du lancement du Userform.
Private Sub Initialisation_Initialize() 'à l'initialisation de l'userform
' Déclaration des variables grâce à Dim
' 1° Choisir un nom
' 2° Choisir un TYPE (= définir la nature du contenu)
' --------------------------------------------------------
Dim J As Long 'déclare la variable J
Dim I As Integer
' Affecter une valeur à une variable (= fixer la valeur de la variable)
Set Ws = Sheets("Feuil1") 'Attention ce nom doit correspondre au nom de votre ONGLET
'On stock le nom de la feuille "FICHIER ADRESSES" dans une variable nommée WS
With Me.ComboBox1
For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("A" & J)
Next J
End With
For I = 1 To 8 'on lance une boucle de valeur mini 1 et maxi 8
Me.Controls("TextBox" & I).Visible = True 'affiche les données dans les textbox
Next I
End Sub
'Correspond au programme du bouton MODIFIER
Private Sub CommandButton2_Click()
If MsgBox("Etes-vous certain de vouloir modifier ce produit ?", vbYesNo, "Demande de confirmation") = vbYes Then
Dim Ligne As Long
Dim I As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
Ligne = Me.ComboBox1.ListIndex + 2
For I = 1 To 8
If Me.Controls("TextBox" & I).Visible = True Then
Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
End If
Next I
End If 'fin de la condition
'Code permettant de modifier le format de la plage de cellule en format nombre
With Ws.Range("D2:d10")
.NumberFormat = "0"
.Value = .Value
End With
End Sub
'Correspond au programme de la LISTE DEROULANTE
Private Sub ComboBox1_Change()
Dim Ligne As Long
Dim I As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
For I = 1 To 8
Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
Next I
End Sub
Private Sub UserForm_Click()
End SubDésolé, je ne peux pas faire mieux pour la transmission d'informations sur mon travail.
Si le bouton VALIDER et le CommandButton1 voici le code
Option Explicit
Dim Ws As Worksheet
Private Sub CommandButton1_Click()
Set Ws = Worksheets("Feuil1")
Ws.Range("E4") = TextBox1.Value
Ws.Range("E6") = TextBox2.Value
Ws.Range("E8") = TextBox3.Value
Ws.Range("E10") = TextBox4.Value
Ws.Range("E13") = TextBox5.Value
End SubMerci pour le code !
Cependant, lorsque je clique sur "Valider" une fois les valeurs entrées, une fenêtre "Erreur d'exécution 9" apparaît. Cela peut être dû à quoi ?
Je n'ai pas le code de ton formulaire ni le fichier donc difficile de répondre sans avoir accès à la source pour trouver l'erreur.
En fin de compte j'a compris ! Le problème était simplement dû au fait que j'avais nommé ma Feuille1 "Infrastructures", du coup j'ai changé le
Set Ws = Worksheets("Feuil1") par un
Set Ws = Worksheets("Infrastructures")!
Du coup merci beaucoup pour cette aide !
Au risque d'abuser de ta patience et de ta gentillesse (si c'est le cas j'en suis désolé), j'aimerais deux petites choses :
1. Comment puis-je faire pour permettre le "VALIDER" uniquement si toutes les cases sont remplies par des nombres ?
2. Comment est-ce que je peux faire pour que ce formulaire s'affiche après le MsgBox qui apparaît dans "ThisWorkbook" ?
Voici par ailleurs un fichier sur lequel j'ai isolé la feuille 1, simplement remplie par ce dont j'ai besoin :
Encore merci !
Ci-joint le fichier corrigé suivant ta demande....
1. Comment puis-je faire pour permettre le "VALIDER" uniquement si toutes les cases sont remplies par des nombres ?
2. Comment est-ce que je peux faire pour que ce formulaire s'affiche après le MsgBox qui apparaît dans "ThisWorkbook" ?
Pour les valeurs numériques dans les textbox, celles-ci sont contrôlées à la saisie.
* S'il y un chiffre et une lettre => MsgBox et suppression de la lettre
* S'il y a uniquement une lettre => MsgBox et suppression de la lettre
Virgule uniquement acceptée après un chiffre ou des chiffres.
Je te laisse découvrir tout cela.
Magnifique, merci beaucoup pour ton aide !
Je me suis même permis la fantaisie de mettre un petit point d'exclamation avec la valeur 48 pour le style. Le résultat est remarquable.
J'ai rajouté un petit
Unload Mepour fermer la boîte de dialogue automatiquement.
Dernière chose, si je lui dis :
Private Sub CommandButton1_Click()
Set Ws = Worksheets("Infrastructures")
If TextBox1.Value = "" Then
MsgBox "Merci de remplir toutes les cases !"
Else If TextBox2.Value = "" Then
MsgBox "Merci de remplir toutes les cases !"
Else If TextBox3.Value = "" Then
MsgBox "Merci de remplir toutes les cases !"
Else If TextBox4.Value = "" Then
MsgBox "Merci de remplir toutes les cases !"
Else If TextBox15.Value = "" Then
MsgBox "Merci de remplir toutes les cases !"
Else
Ws.Range("E4") = TextBox1.Value
Ws.Range("E6") = TextBox2.Value
Ws.Range("E8") = TextBox3.Value
Ws.Range("E10") = TextBox4.Value
Ws.Range("E13") = TextBox5.Value
Unload Me
End SubEst-ce qu'il va tester toutes les cases jusqu'à ce qu'elles soient toutes remplies comme je le pense avant de remplir les cellules et de se fermer ?
Par ailleurs J'ai même trouvé la réponse à ma première question via ce code :
Private Sub Workbook_Open()
If MsgBox("Bienvenue sur votre outil de configuration de ligne de transport ! Souhaitez-vous démarrer un nouveau projet ?", vbYesNo, "Bonjour !") = vbYes Then
Initialisation.Show
Else
End If
End Sub