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 :

capture

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 :

capture1

L'idée étant de remplir chaque case, qui remplira par la pression du bouton "Valider" des cellules spécifiques dans "Feuil1".

capture2

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é. Donc je vais essayer de faire autrement. Voici à quoi mon fichier Excel :

capture3

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 Sub

Et 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 Sub

Dé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 Sub

Merci 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 :

17classeur1.xlsm (13.76 Ko)

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 Me

pour 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 Sub

Est-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
Rechercher des sujets similaires à "msgbox formulaire"