Simplification de macro

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Florian53

XLDnaute Impliqué
Bonjour à tous,

Je vous contact pour savoir si il y a une possibilité de simplifier ce code:

Code:
If Menu_reception.Controls("ComboBox1") = "" Then
MsgBox ("Les champs marqués d'un astérisque (*) sont obligatoires.")
End If
If Menu_reception.Controls("TextBox2") = "" Then
MsgBox ("Les champs marqués d'un astérisque (*) sont obligatoires.")
End If
If Menu_reception.Controls("TextBox4") = "" Then
MsgBox ("Les champs marqués d'un astérisque (*) sont obligatoires.")
End If
If Menu_reception.Controls("TextBox7") = "" Then
MsgBox ("Les champs marqués d'un astérisque (*) sont obligatoires.")
End If
If Menu_reception.Controls("TextBox9") = "" Then
MsgBox ("Les champs marqués d'un astérisque (*) sont obligatoires.")
End If

Sachant que je souhaiterais garder la numérotation des textbox car j'ai déjà une macro qui copie les valeurs des textbox dans les cellules.

Code:
For I = 2 To 10
Cells(ligne, I).Value = Controls("TextBox" & I).Value
Next I

Merci à vous
 
Je viens d'essayer ceci :

Code:
Private Sub BtnValider_Click()
Dim I As Byte, J As Byte
If Menu_reception.Controls("ComboBox1") = "" Or Controls("TextBox2") = "" Or Controls("TextBox4") = "" Or Controls("TextBox7") = "" Or Controls("TextBox9") = "" Then
MsgBox ("Les champs marqués d'un astérisque (*) sont obligatoires.")
End If
Sheets(ComboBox1.Value).Select
ligne = Range("B65536").End(xlUp).Offset(1, 0).Row
For I = 2 To 10
Cells(ligne, I).Value = Controls("TextBox" & I).Value
ComboBox1.Value = ""
Controls("TextBox" & I).Value = ""
Next I
End Sub

Mais le problème est quand la combobox1 est vide le code plante car après la MsgBox, le code continu sur "Sheets(ComboBox1.Value).Select" et je souhaiterais que le code retourne au début si la MsgBix apparait.
 
Bonjour

A Tester
Code:
If Menu_reception.Controls("ComboBox1") = "" _
or Menu_reception.Controls("TextBox2") = "" _
or Menu_reception.Controls("TextBox4") = "" _
or Menu_reception.Controls("TextBox7") = "" _
or Menu_reception.Controls("TextBox9") = "" Then
MsgBox ("Les champs marqués d'un astérisque (*) sont obligatoires.")
ComboBox1.SetFocus
End If
 
bonjour tous🙂🙂🙂
plein de methodes pour faire cela
un exemple en manipulant TAG si beaucoup de controls avec des restrictions le code est plus simple
tu remarqueras dans proprietee des controls user.. posséde TAG vide un control free en quelque sorte🙄 on peu l'exploiter
dans mon cas j'ai mis 1 on peut mettre n'importe quoi on peut faire reference a un autre control egalement

VB:
Private Sub valider_Click()
For Each c In Me.Controls
If c.Tag = "1" And c = "" Then c.SetFocus: MsgBox "Les champs marqués d'un astérisque (*) sont obligatoires.": Exit Sub
Next c
'ton code
End Sub
 

Pièces jointes

Merci laeti j'ai essayé ta méthode mais j'ai une erreur "propriété ou méthodes non gérés" , du coup elle ne fonctionne pas. est ce j'ai fais une erreur?

Code:
Private Sub BtnValider_Click()
Dim I As Byte
For Each c In Me.Controls
If c.Tag = "1" And c = "" Then c.SetFocus: MsgBox "Les champs marqués d'un astérisque (*) sont obligatoires.": Exit Sub
Next c
Sheets(ComboBox1.Value).Select
ligne = Range("B65536").End(xlUp).Offset(1, 0).Row
For I = 2 To 10
Cells(ligne, I).Value = Controls("TextBox" & I).Value
ComboBox1.Value = ""
Controls("TextBox" & I).Value = ""
Next I
End Sub
 
Bonjour
Teste comme ceci
Code:
Private Sub BtnValider_Click()
Dim I As Byte, J As Byte
If UserForm1.Controls("ComboBox1") = "" Or Controls("TextBox2") = "" Or Controls("TextBox4") = "" Or Controls("TextBox7") = "" Or Controls("TextBox9") = "" Then
MsgBox ("Les champs marqués d'un astérisque (*) sont obligatoires.")
ComboBox1.SetFocus
Exit Sub
End If
'Ton code
End Sub
 
Bonjour Florian53, à tous 🙂,

Un exemple dans le fichier joint (soit dit en passant, vous auriez pu joindre votre propre fichier 😡)
Les contrôles à vérifier sont à inscrire dans la constante Ctrls.
le code de validation:
VB:
Private Sub CommandButton1_Click()
Const Ctrls = "combobox1;textbox2;textbox4;textbox7;textbox9"
Dim xctrl
  For Each xctrl In Split(Ctrls, ";")
    If Controls(xctrl) = "" Then
      MsgBox ("Les champs marqués d'un astérisque (*) sont obligatoires."), vbCritical
      Controls(xctrl).SetFocus
      Exit Sub
    End If
  Next xctrl
  ' suite du programme si tous les champs obligatoires sont saisis
  MsgBox "Suite du pgme...", vbInformation: Unload Me
End Sub
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
615
Réponses
10
Affichages
630
Réponses
2
Affichages
492
Réponses
5
Affichages
548
Réponses
4
Affichages
686
Réponses
9
Affichages
322
Retour