Les formulaires

Créer un formulaire

FormulaireSimple2.xls
Fomulaire.zip

Pour créer un formulaire:

Boite à outils

Affichage/Boîteà outils

Les contrôles d’un formulaire

Textbox

Pour créer la zone de saisie du nom :

Label

Pour créer le libellé Nom :

Pour créer le menu déroulant Service :

Pour alimenter un ComboBox ou une ListBox, on spécifie dans la propriété RowSource

La propriété RowSource peut être alimentée par VBA

Private Sub UserForm_Initialize()
  Me.ComboBox1.RowSource = "B2:B" & [B65000].End(xlUp).Row
  'Me.ComboBox1.RowSource = "Feuil2!B2:B5" ' autre feuille
  'Me.ComboBox1.RowSource = "Feuil2!B2:B" & Sheets("Feuil2").[B65000].End(xlUp).Row
  'Me.ComboBox1.RowSource = "liste4" ' nom de champ
End Sub

Private Sub UserForm_Initialize()
  Me.Service.List = Array("Etudes", "Informatique", "Marketing", "Production")
  Me.Ville.List = Array("Boulogne", "Lyon", "Paris", "Versailles")
End Sub

Si la liste est dans un autre classeur ouvert

Me.ComboBox1.RowSource = "'[ClasseurSource.xls]Feuil1'!A2:A10"
Me.ComboBox1.RowSource = "'[ClasseurSource.xls]Feuil1'!LaListe"

Récupération du choix :

Private Sub ComboBox1_Change()
  Me.TextBox1 = Me.ComboBox1.Value
End Sub

Positionnement sur le premier élément de la liste

Private Sub UserForm_Initialize()
   Me.ComboBox1.ListIndex = 0 "positionne sur le premier élément
End Sub

Case à cocher

Une case à cocher returne la valeur VRAI ou FAUX

Pour obtenir OUI ou NON, utiliser la fonction ci-dessous.

Function OuiNon(valeur)
  OuiNon = IIf(valeur, "Oui", "Non")
End Function

Groupe d’options civilité

Pour connaître l'option choisie dans un groupe, utiliser une boucle For Each x In Groupe.Controls.

Sur l'exemple, on récupère le libellé de l'option (propriété Caption)

Private Sub B_ok_Click()
  temp = ""
  For Each c In Me.Civilité.Controls
     If c.Value Then temp = c.Caption
  Next c
  MsgBox temp 
End Sub

Afficher le formulaire

Show vbModal ou vbModeless

Sub appel_Simple()
  F_création_simple.Show
End Sub

Créer un bouton avec la barre d’outils Formulaires et lui affecter la macro

Clic-droit/Affecter une macro

Bouton fin

Unload formulaire

Private Sub B_fin_Click()
  Unload Me
End Sub

Limiter le choix du service à la liste

Positionner la propriété MatchRequery à true

Définir la position d’affichage du formulaire

Positionner la propriété StartUpPosition à Manual puis définir les valeurs des propriétés Left et Top

Ordre de saisie

La commande Affichage / Ordre de tabulation permet de définir l’ordre de saisie.

Initialisation du formulaire

Pour initialiser les menus déroulants avec l'événement Initialize du formulaire:

Transfert des zones saisies dans la feuille de calcul

Private Sub b_validation_Click()
   '--- Contrôles
   If Me.nom = "" Then
      MsgBox "Saisir un nom!"
      Me.nom.SetFocus
      Exit Sub
   End If
   If Me.Salaire = "" Then
      MsgBox "Saisir un Salaire!"
      Me.nom.SetFocus
      Exit Sub
   End If
   '-- Date?
   If Not IsDate(Me.date_naissance) Then
      MsgBox "Saisir une date!"
      Me.date_naissance = ""
      Me.date_naissance.SetFocus
      Exit Sub
   End If
   If Not IsNumeric(Me.Salaire) Then
      MsgBox "Saisir du num!"
      Me.Salaire = ""
      Me.Salaire.SetFocus
      Exit Sub
   End If
   '--- Positionnement dans la base
   [A65000].End(xlUp).Offset(1, 0).Select
   '--- Transfert Formulaire dans BD
   ActiveCell.Offset(0, 1).Value = Application.Proper(Me!nom)
   ActiveCell.Offset(0, 2).Value = Application.Proper(Me!prenom)
   ActiveCell.Offset(0, 3).Value = OuiNon(Me.Marié)
   ActiveCell.Offset(0, 4).Value = CVDate(Me.date_naissance)
   ActiveCell.Offset(0, 5).Value = Me.Service
   ActiveCell.Offset(0, 6).Value = Me.Ville
   ActiveCell.Offset(0, 7).Value = CDbl(Me.Salaire)
   '-- Civilité
   temp = ""
   For Each c In Me.Civilité.Controls
     If c.Value = True Then
       temp = c.Caption
     End If
   Next c
   ActiveCell.Value = temp
   '--
   nettoie
End Sub

Sub nettoie()
  Me.prenom = ""
  Me.nom = ""
  Me.date_naissance = ""
  Me.Service = ""
  Me.Ville = ""
  Me.Salaire = ""
  For Each c In Me.Civilité.Controls
    c.Value = False
  Next c
  Me.Marié = False
End Sub

Private Sub b_fin_Click()
  Unload Me
End Sub

Vérification doublons

Ajouter dans la validation:

  Set result = Range("A9:A10000").Find(What:=Me.nom, LookIn:=xlValues, lookat:=xlWhole)
   If Not result Is Nothing Then
      MsgBox "Existe déjà"
      Exit Sub
   End If

Différentes façons d’alimenter une liste déroulante dynamique avec VBA

Me.Service.RowSource = "J2:" & "J" & [B65000].End(xlUp).Row
Me.Service.RowSource =”Maliste”                          ' nom de champ
Me.ComboBox1.RowSource = "Additem!B2:B5"     ' autre feuille

AddItem élément,position

AddItem ajoute un élément à un comboBox ou ListBox.

Private Sub UserForm_Initialize()
   Me.Service.AddItem "Etudes"
   Me.Service.AddItem "Informatique"
   Me.Service.AddItem "Marketing"
   Me.Service.AddItem "Production"
   '---
   Me.Ville.AddItem "Boulogne"
   Me.Ville.AddItem "Lyon"
   Me.Ville.AddItem "Paris"
   Me.Ville.AddItem "Versailles"
 End Sub

RemoveItem position,nombre

RemoveItem supprime un élément d’un comboBox ou ListBox.

ListIndex
ListIndex=position

ListIndex donne la position de l’élément choisi.

  MsgBox ListBox1.ListIndex

ListIndex=position  positionne sur la position spécifiée.

  Me.ListBox1.ListIndex = 3   ‘ positionne sur le 4eme

ListIndex=-1 supprime la sélection

  Me.ListBox1.ListIndex = -1

List

Private Sub UserForm_Initialize()
   Dim Tbl(1 To 7, 1 To 2)
   For j = 1 To 7
      Tbl(j, 1) = Format(Date + j - 1, "dddd")
      Tbl(j, 2) = Date + j - 1
   Next j
   Me.ListBox1.ColumnCount = 2
   Me.ListBox1.ColumnWidths = "40,60"
   Me.ListBox1.List = Tbl
End Sub

List permet également de récupèrer dans un tableau la liste d’un ComboBox avec ListBox

  Tbl = Me.ListBox1.List
  MsgBox UBound(Tbl, 1)
  MsgBox LBound(Tbl, 1)

List(ligne,colonne)

Donne la valeur de la ligne et colonne spécifiées

Column(noColonne)

Donne la valeur de la colonne spécifiée:

Me.TextBox1 = Me.ListBox1.Column(1)

Le no de première colonne est 0

ListCount

Donne le nombre de lignes du ComboBox ou ListBox

  MsgBox ListBox1.ListCount

Clear

Efface les options du ComboBox ou ListBox

Collection des contrôles d’un formulaire

Controls

Une boucle For Each c  In Me.controls permet d’accéder à tous les contrôles du formulaire actif.

Dim c As Control
For Each c In Me.Controls
      MsgBox c.Name & " " & TypeName(c)
Next

Raz des contrôles d’un formulaire.

Private Sub B_raz_Click()
  Dim c As Control
  For Each c In Me.Controls
     Select Case TypeName(c)
        Case "TextBox"
          c.Value = ""
        Case "CheckBox"
          c.Value = False
        Case "ListBox", "ComboBox"
          c.ListIndex = -1
     End Select
  Next c
End Sub

Image d’arrière plan (Picture/PictureAlignement/PictureSizeMode)

Liste des feuilles du classeur actif

Private Sub UserForm_Initialize()
  For i = 1 To Sheets.Count
    Me.ComboBox1.AddItem Sheets(i).Name
  Next i
End Sub