Simplification de macro

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
 

Florian53

XLDnaute Impliqué
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.
 

M12

XLDnaute Accro
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
 

laetitia90

XLDnaute Barbatruc
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:rolleyes: 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

  • test.xlsm
    19.5 KB · Affichages: 46

Florian53

XLDnaute Impliqué
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
 

M12

XLDnaute Accro
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
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour Florian53, à tous :),

Un exemple dans le fichier joint (soit dit en passant, vous auriez pu joindre votre propre fichier :mad:)
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

  • Florian53- code VBA- v1.xlsm
    20.3 KB · Affichages: 21
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 020
dernier inscrit
Mzghal