Formulaires: les champs indicés

Accueil

Controls
TotalChampIndices
ModuleClasse
Création checkbox
Changement de zone automatique
Saisie limitée à 5 options

Controls(nomContrôle)

Permet de référencer dans une boucle une liste de contrôles qui ont des noms génériques.
Sur l’exemple, les champs ont pour nom note1,note2,......

x="note2"
Controls(x) ou Me(x) donne le contenu du champ note2

Champs Indicés
TotalClasseSaisie
TotalClasseSaisie2
FormComboBox

Private Sub b_ok_Click()
   '--- ' contrôles
   For i = 1 To 5
   If Not IsNumeric(Controls("note" & i)) Then
      MsgBox "Erreur!"
      Me("note" & i).SetFocus
      Exit Sub
   End If
   Next i
   '---transfert BD
   [A65000].End(xlUp).Offset(1, 0).Select
   ActiveCell = Me.nom
   For i = 1 To 5
     ActiveCell.Offset(0, i) = CDbl(Me("note" & i))
   Next i
   raz
End Sub

Sub raz()
  Me.nom = ""
  For i = 1 To 5
    Me("note" & i) = ""
  Next i
End Sub

Affichage du total de plusieurs textbox indicés

On veut obtenir le total de TextBox indicés au fur et à mesure de la saisie

TotalZonesIndices

Private Sub TextBox1_AfterUpdate()
   total
End Sub

Private Sub TextBox2_AfterUpdate()
   total
End Sub

Private Sub TextBox3_AfterUpdate()
   total
End Sub

Private Sub TextBox4_AfterUpdate()
  total
End Sub

Sub total()
  For i = 1 To 4
    If IsNumeric(Me("textbox" & i)) Then
       t = t + CDbl(Me("textbox" & i))
    End If
    Next i
    Me.TextBoxTotal = t
End Sub

Avec Module de classe

Dim Txt(1 To 4) As New ClasseSaisie

Private Sub UserForm_Initialize()
For b = 1 To 4: Set Txt(b).GrSaisie = Me("textbox" & b): Next b
End Sub

Module de classe ClasseSaisie

Public WithEvents GrSaisie As MSForms.TextBox

Private Sub GrSaisie_change()
For i = 1 To 4
   If IsNumeric(UserForm1("textbox" & i)) Then
     t = t + CDbl(UserForm1("textbox" & i))
   End If
   Next i
   UserForm1.TextBoxTotal = t
End Sub

Changement de zone automatique si 3 caractères saisis

FormSaisie3Caractères

Module de classe:
Public WithEvents GrSaisie As MSForms.TextBox
Private Sub GrSaisie_Change()
  If Len(GrSaisie.Value) = 3 Then
    temp = GrSaisie.Name
    Position = ""
    For i = 1 To Len(temp)
      If IsNumeric(Mid(temp, i, 1)) Then Position = Position & Mid(temp, i, 1)
    Next i
    If Val(Position) = 12 Then Position = 0
       UserForm1("textbox" & Position + 1).SetFocus
    End If
End Sub

Formulaire:

Dim Txt(1 To 12) As New ClasseSaisie
Private Sub UserForm_Initialize()
For b = 1 To 12: Set Txt(b).GrSaisie = Me("textbox" & b): Next b
End Sub

Création de checkBox

Permet de cacher les colonnes cochéés.

FormCréeChekBox

Module de classe nommé classeSaisie

Public WithEvents GrSaisie As MSForms.CheckBox
Private Sub GrSaisie_Change()
nomcheck = GrSaisie.Name
col = Val(Mid(GrSaisie.Name, 9))
Columns(col).Hidden = UserForm1.Controls(nomcheck).Value
End Sub

Formulaire

Dim n
  Dim Chk(1 To 100) As New ClasseSaisie
  Private Sub UserForm_Initialize()
    n = 26
    For b = 1 To n
      retour = Me.Controls.Add("Forms.Label.1", "Label" & b, True)
      Me("Label" & b).Caption = Split(Cells(1, b).Address, "$")(1)
      Me("Label" & b).Top = 50
      Me("Label" & b).Left = 12 + (b - 1) * 12

      retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & b, True)
      Me("CheckBox" & b).Top = 60
      Me("CheckBox" & b).Left = 10 + (b - 1) * 12
    Next
    '--
    For b = 1 To n: Set Chk(b).GrSaisie = Me("Checkbox" & b): Next b
End Sub

Private Sub b_result_Click()
  For b = 1 To n
    On Error Resume Next
    If Me("CheckBox" & b) Then MsgBox b
  Next
End Sub

Private Sub B_sup_Click()
  For b = 1 To n
    On Error Resume Next
    Me.Controls.Remove "Checkox" & b
  Next
End Sub

Saisie limitée à 5 options

FormCheckBox


Dim Chk(1 To 24) As New ClasseSaisie
Private Sub UserForm_Initialize()
  For b = 1 To 24: Set Chk(b).GrSaisie = Me("Checkbox" & b): Next b
  Me.b_ok.Enabled = False
End Sub

Private Sub b_ok_Click()
  ligne = 8
  For i = 1 To 24
     If Me("checkbox" & i) Then
       Cells(ligne, 6) = Me("checkbox" & i).Caption
       ligne = ligne + 1
     End If
  Next i
End Sub

Module de classe ClasseSaisie:

Public WithEvents GrSaisie As MSForms.CheckBox
   Private Sub GrSaisie_Change()
   n = 0
   For i = 1 To 24
     If Selection_titres("Checkbox" & i) Then n = n + 1
   Next i
   Selection_titres.TextBox1.Value = n
   If n > 5 Then Selection_titres(GrSaisie.Name) = False
   Selection_titres.b_ok.Enabled = IIf(n > 0, True, False)
End Sub

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

Exemples

Champs Indices
Total Zones Indices