ACCESS : Fenêtres de saisie étendues

Ce module permet de créer des InputBox étendues.
On peut, par exemple, ajouter à une InputBox standard un contrôle calendrier ou une liste déroulante.
Il est également possible d'utiliser ces InputBox étendues en critères de requête.

Version actuelle : v0.4 (compatible 64bits)

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction


Ce module donne la possibilité d'ajouter de nouvelles fonctionnalités à la boîte de saisie InputBox standard.

On peut ainsi :

  • Saisir une date à l'aide du calendrier Windows.
  • Saisir une date et une heure avec un Date/Time picker.
  • Saisir une valeur dans une liste déroulante.
  • Saisir une valeur dans une zone de liste.
  • Utiliser des images dans les listes.
  • Changer la couleur de fond de la boîte.
  • Changer la taille, la police et la couleur du texte d'information.
  • Changer la taille et la police du texte saisi.
  • Masquer le texte saisi (pour un mot de passe).
  • Limiter la longueur de la saisie.
  • Ajouter un texte additionnel en bas de la fenêtre.
  • Centrer la fenêtre.
  • Utiliser ces boîtes de saisie en critère d'une requête.
  • Fermer automatiquement la fenêtre avec une minuterie.

Exemples en images :

Calendrier : Liste déroulante :
Image non disponible
Image non disponible
Zone de liste : Date/Time picker :
Image non disponible
Image non disponible
Mot de passe : Fermeture sur minuterie
Image non disponible
Image non disponible

Merci à Tofalu, caféine et hiko-seijuro pour leur relecture.

II. Compatibilité / Installation

Le module a été testé sur les couples :

  • Access 2010 + Windows 10
  • Access 2007 + Windows 7
  • Excel 2010 + Windows 10
  • Excel 2007 + Windows 7

Il n'y a pas de référence à définir pour les différents contrôles.
Par contre il est nécessaire, pour Access de sélectionner la référence à DAO car les boîtes de saisie avec « Zone de liste » utilisent DAO pour lire les données à insérer dans la liste.

Pour ajouter la référence, allez dans l'éditeur VBA puis :

  • Outils --> Références
  • Sélectionnez la référence Microsoft DAO 3.x Object Library dans la liste.

Le module est disponible au format texte dans la section Les téléchargements

Pour Excel : modifier la variable de compilation au début du module :

 
Sélectionnez
' Pour Access
#Const AppVersion = "ACCESS"
' Pour Excel
'#Const AppVersion = "EXCEL"

doit être changé en :

 
Sélectionnez
' Pour Access
'#Const AppVersion = "ACCESS"
' Pour Excel
#Const AppVersion = "EXCEL"

III. Sélection de date avec un calendrier

La nouvelle fonction pour la boîte de saisie avec calendrier est InputBoxDate.

Seul le paramètre Prompt est obligatoire.

Paramètre Type Explication
Prompt String

Texte d'information

Deux parties séparées par deux points-virgules :

  • le texte standard en haut, sur lequel agissent CaptionFontName et CaptionFontSize
  • un texte additionel en bas, dans la police standard
    Exemple : "Prompt de saisie;;Texte addionnel"
Title String Titre de la fenêtre
Default Date Date par défaut
XPos Single Position horizontale de la fenêtre en pixels
-1 pour centrer horizontalement
YPos Single Position verticale de la fenêtre en pixels
-1 pour centrer verticalement (au 1/3 de l'écran en fait)
HelpFile String Fichier d'aide (paramètre identique à l'InputBox standard)
Context String Contexte de l'aide (paramètre identique à l'InputBox standard)
ForeColor Long Couleur du texte d'information
BackColor Long Couleur de fond de la fenêtre
CaptionFontName String Nom de la police de caractères du texte d'information
CaptionFontSize Long Taille de la police de caractères du texte d'information
CalendarFontName String Nom de la police de caractères des textes du calendrier
CalendarFontSize Long Taille de la police de caractères des textes du calendrier
Utiliser ce paramètre pour agrandir le calendrier.
DisplayWeeks boolean Affichage des numéros de semaine
EditFontName String Nom de la police de caractères de la zone d'édition
EditFontSize Long Taille de la police de caractères de la zone d'édition
pTimer Integer Minuterie en secondes.
Le temps restant s'affiche dans la zone de texte additionnel, en remplacement de [Timer].
(Ex de paramètre Prompt: "Test Timer;;Fermeture dans [Timer] secondes")
Lorsque la minuterie est écoulée le bouton d'annulation est cliqué automatiquement.
pBoldDays Tableau

Tableau de jours à mettre en gras dans le calendrier.
Les éléments de ce tableau sont soit :

  • des dates : Array(Date,#8/15/2007#)
  • des entiers pour préciser le jour de la semaine entre 1 et 7  : Array(6,7) met en gras les samedi et dimanche
  • un mélange de ces deux types d'élements

La fonction s'utilise comme la fonction InputBox standard.
Elle renvoie une chaîne de caractères, il est donc utile de vérifier que la date est valide.

Exemple :

Affichage d'une fenêtre de saisie de date
Sélectionnez
Dim lDate As String
lDate = InputBoxDate("Date test", , Now() + 20, , , , , , , _
                     "Comic sans MS", 12, "Comic sans MS", 15, True, "Arial", 15)
If Not IsDate(lDate) Then MsgBox "Date Invalide"

IV. Sélection d'une date et heure : Date/Time picker

La nouvelle fonction pour la boîte de saisie avec Date/Time picker est InputBoxDateTime.

Seul le paramètre Prompt est obligatoire.

Paramètre Type Explication
Prompt String

Texte d'information
Deux parties séparées par deux points-virgules :

  • le texte standard en haut, sur lequel agissent CaptionFontName et CaptionFontSize
  • un texte additionel en bas, dans la police standard

Exemple : "Prompt de saisie;;Texte addionnel"

Title String Titre de la fenêtre
Default Date Date par défaut
XPos Single Position horizontale de la fenêtre en pixels
-1 pour centrer horizontalement
YPos Single Position verticale de la fenêtre en pixels
-1 pour centrer verticalement (au 1/3 de l'écran en fait)
HelpFile String Fichier d'aide (paramètre identique à l'InputBox standard)
Context String Contexte de l'aide (paramètre identique à l'InputBox standard)
ForeColor Long Couleur du texte d'information
BackColor Long Couleur de fond de la fenêtre
CaptionFontName String Nom de la police de caractères du texte d'information
CaptionFontSize Long Taille de la police de caractères du texte d'information
CalendarFontName String Nom de la police de caractères des textes du calendrier
CalendarFontSize Long Taille de la police de caractères des textes du calendrier
Utiliser ce paramètre pour agrandir le calendrier.
DisplayWeeks boolean Affichage des numéros de semaine
EditFontName String Nom de la police de caractères de la zone d'édition et de la liste
EditFontSize Long Taille de la police de caractères de la zone d'édition et de la liste
DateFormat String Format d'affichage de la date et de l'heure
UpDown Boolean Utiliser des boutons haut-bas au lieu du la flèche d'affichage du calendrier
pTimer Integer Minuterie en secondes.
Le temps restant s'affiche dans la zone de texte additionnel, en remplacement de [Timer].
(Ex de paramètre Prompt: "Test Timer;;Fermeture dans [Timer] secondes")
Lorsque la minuterie est écoulée le bouton d'annulation est cliqué automatiquement.

La fonction s'utilise comme la fonction InputBox standard.
Elle renvoie une chaîne de caractères Date + Heure formatée en fonction des paramètres régionaux.

Exemple :

Affichage d'une fenêtre de saisie de date/heure
Sélectionnez
    Dim lDate As String
    lDate = InputBoxDateTime("Date + Heure", , Now(), , , , , vbRed, _
                             RGB(200, 255, 255), "Arial", 15, "Comic sans MS", _
                             15, True, "Arial", 15, "ddddMMMdd', 'yyy HH':'mm':'ss")
    If lDate <> "" Then MsgBox "Saisie :" & vbCrLf & lDate
Affichage d'une fenêtre de saisie de date uniquement
Sélectionnez
    Dim lDate As String
    lDate = InputBoxDateTime("Date", , Now(), , , , , vbRed, _
                             RGB(200, 255, 255), "Arial", 15, "Comic sans MS", _
                             15, True, , , "ddddMMMdd', 'yyy")
    If lDate <> "" Then MsgBox "Saisie :" & vbCrLf & DateValue(lDate)
Affichage d'une fenêtre de saisie d'heure uniquement
Sélectionnez
    Dim lDate As String
    lDate = InputBoxDateTime("Heure", , Now(), , , , , vbRed, _
                             RGB(200, 255, 255), "Arial", 15, "Comic sans MS", _
                             15, True, , 15, "HH':'mm':'ss", True)
    If lDate <> "" Then MsgBox "Saisie :" & vbCrLf & TimeValue(lDate)

V. Sélection d'une valeur dans une zone de liste déroulante

La nouvelle fonction pour la boîte de saisie avec zone de liste déroulante est InputBoxCombo.

Les paramètres Prompt et Items sont obligatoires.

Paramètre Type Explication
Prompt String

Texte d'information
Deux parties séparées par deux points-virgules :

  • le texte standard en haut, sur lequel agissent CaptionFontName et CaptionFontSize
  • un texte additionel en bas, dans la police standard

Exemple : "Prompt de saisie;;Texte addionnel"

Items Variant

Au choix :

  • Un tableau de valeurs : Array("Choux","Carotte","Haricot")
  • Ou une requête pour Access : "Select distinct legumes from matable"
  • Ou un Range pour Excel : ThisWorkbook.Sheets("ArrayTests").Range("A15:B17")

La première colonne contient les valeurs.
La deuxième colonne contient les chemins (absolus ou relatifs) des images.

Title String Titre de la fenêtre
Default String Valeur par défaut
XPos Single Position horizontale de la fenêtre en pixels
-1 pour centrer horizontalement
YPos Single Position verticale de la fenêtre en pixels
-1 pour centrer verticalement (au 1/3 de l'écran en fait)
HelpFile String Fichier d'aide (paramètre identique à l'InputBox standard)
Context String Contexte de l'aide (paramètre identique à l'InputBox standard)
ListHeight Long Hauteur de la liste déroulante en nombre de lignes
ForeColor Long Couleur du texte d'information
BackColor Long Couleur de fond de la fenêtre
CaptionFontName String Nom de la police de caractères du texte d'information
CaptionFontSize Long Taille de la police de caractères du texte d'information
EditFontName String Nom de la police de caractères de la zone d'édition et de la liste
EditFontSize Long Taille de la police de caractères de la zone d'édition et de la liste
DisplayImg Boolean Si vrai alors la deuxième colonne contient le chemin (absolu ou relatif) des images
Les tailles des images doivent être identiques.
pTimer Integer Minuterie en secondes.
Le temps restant s'affiche dans la zone de texte additionnel, en remplacement de [Timer].
(Ex de paramètre Prompt: "Test Timer;;Fermeture dans [Timer] secondes")
Lorsque la minuterie est écoulée le bouton d'annulation est cliqué automatiquement.

La fonction s'utilise comme la fonction InputBox standard.
Elle renvoie une chaîne de caractères.

Exemple :

Sélection avec valeurs dans un tableau
Sélectionnez
Dim lValue As String
lValue = InputBoxCombo("Choisissez un légume",Array("Choux","Carotte","Haricot"), _
                        "Test Combo Box Tableau", , , , , , , vbRed, RGB(200, 255, 255), "Comic sans MS", 20)
If lValue <> "" Then MsgBox "Saisie :" & vbCrLf & lValue
Sélection avec valeurs d'une table
Sélectionnez
Dim lValue As String
lValue = InputBoxCombo("Choisissez un légume","Select distinct legumes from matable", _
                        "Test Combo Box Table", , , , , , , vbRed, RGB(200, 255, 255), "Comic sans MS", 20)
If lValue <> "" Then MsgBox "Saisie :" & vbCrLf & lValue
Sélection avec valeurs dans un tableau et avec images
Sélectionnez
    Dim lItems
    Dim lValue As String
    lItems = Array("Ligne Test 1", "MonImage1.bmp", _
                   "Ligne Test 2", "MonImage2.bmp", _
                   "Ligne Test 3", "MonImage3.bmp")
    lValue = InputBoxCombo("Test Combo Box Tableau + Images", lItems, , lItems(4), , , , , _
                           300, vbRed, RGB(200, 255, 255), "Comic sans MS", 20, "Arial", 15, True)
    If lValue <> "" Then MsgBox "Saisie :" & vbCrLf & lValue
Sélection avec valeurs d'une table et avec images
Sélectionnez
    Dim lValue As String
    lValue = InputBoxCombo("Test Combo Box Recorset + Images", _ 
                           "select TList.texte,TImages.chemin from Tlist", , , , , , , 300, vbRed, _
                           RGB(200, 255, 255), "Comic sans MS", 20, "Arial", 15, True)
    If lValue <> "" Then MsgBox "Saisie :" & vbCrLf & lValue

VI. Sélection d'une valeur dans une zone de liste

La nouvelle fonction pour la boîte de saisie avec zone de liste est InputBoxListView.

Les paramètres Prompt et Items sont obligatoires.

Paramètre Type Explication
Prompt String

Texte d'information
Deux parties séparées par deux points-virgules :

  • le texte standard en haut, sur lequel agissent CaptionFontName et CaptionFontSize
  • un texte additionel en bas, dans la police standard

Exemple : "Prompt de saisie;;Texte addionnel"

Items Variant

Au choix :

  • Un tableau de tableaux de valeurs : Array(Array("Légume1","Choux"), Array("Légume2","Carotte"), Array("Légume3","Haricot"))
    Pour une colonne unique, utilisez un tableau à une dimension : Array("Choux","Carotte","Haricot")
  • Ou une requête pour Access : "Select distinct num,legumes from matable"
  • Ou un Range pour Excel : ThisWorkbook.Sheets("ArrayTests").Range("A15:B17")
LinkedColumn Integer Colonne contenant la valeur à renvoyer.
(la numérotation commence par 0)
HasHeader Boolean Affiche les en-têtes de colonne.
Pour un tableau, la première ligne contient les en-tête.
Pour un recordset, les en-têtes sont les légendes ou à défaut les noms de champs.
Title String Titre de la fenêtre
Default String Valeur par défaut
Pour une sélection multiple, séparez les valeurs avec le séparateur défini dans le paramètre MultiSelectSep
XPos Single Position horizontale de la fenêtre en pixels
-1 pour centrer horizontalement
YPos Single Position verticale de la fenêtre en pixels
-1 pour centrer verticalement (au 1/3 de l'écran en fait)
HelpFile String Fichier d'aide (paramètre identique à l'InputBox standard)
Context String Contexte de l'aide (paramètre identique à l'InputBox standard)
ListHeight Long Hauteur de la liste déroulante en nombre de lignes
ListWidth Long Largeur de la liste déroulante en pixels
ForeColor Long Couleur du texte d'information
BackColor Long Couleur de fond de la fenêtre
CaptionFontName String Nom de la police de caractères du texte d'information
CaptionFontSize Long Taille de la police de caractères du texte d'information
ListFontName String Nom de la police de caractères de la liste
ListFontSize Long Taille de la police de caractères de la liste
AutoResize Boolean Redimensionnement automatique des colonnes
DisplayGrid Boolean Affiche la grille
ImageCol Integer Colonne contenant le chemin des images.
La numérotation commence par 0.
Les images s'affichent dans la première colonne de la liste.
Les tailles des images doivent être identiques.
DisplayImageCol Boolean La colonne contenant le chemin des images est masquée par défaut.
Mettre ce paramètre à vrai pour l'afficher.
ColSize Variant Tableau contenant la taille des colonnes en pixels.
Mettre -1 pour les colonnes redimensionnées automatiquement.
(si AutoResize = Vrai).
MultiSelectSep String Séparateur pour sélection multiple
pTimer Integer Minuterie en secondes.
Le temps restant s'affiche dans la zone de texte additionnel, en remplacement de [Timer].
(Ex de paramètre Prompt: "Test Timer;;Fermeture dans [Timer] secondes")
Lorsque la minuterie est écoulée le bouton d'annulation est cliqué automatiquement.
pCheckBox Boolean Si Vrai, affichage de case à cocher à gauche de chaque ligne.

La fonction s'utilise comme la fonction InputBox standard.
Elle renvoie une chaîne de caractères.

Exemple :

Sélection avec valeurs dans un tableau
Sélectionnez
    Dim lValue As String
    lValue = InputBoxlistView("Test ListView Tableau", _
                              Array(Array("En-Tête 1", "En-Tête 2"), _
                                    Array("Lig 1 Col 1", "Lig1 Col 2"), _
                                    Array("Lig 2 Col 1", "Lig2 Col 2")), _
                                    1, True, "Titre fenêtre", , , , , , 300, , 255, RGB(0, 255, 255), _
                                    "Comic sans MS", 20, "Arial", 15, True, True)
    If lValue <> "" Then MsgBox "Saisie :" & vbCrLf & lValue
Sélection avec valeurs d'une table
Sélectionnez
    Dim lValue As String
    lValue = InputBoxlistView("Test ListView Recordset", _
                              "select Nom,Lieu,format(DateEvent,""Long Date"") as [Date ] from Tevenements", _
                              0, True, "Test Titre", , , , , , 300, 800, 255, RGB(0, 255, 255), _
                              "Comic sans MS", 20, "Arial", 15, True, True, , , Array(150, 250, -1))
    If lValue <> "" Then MsgBox "Saisie :" & vbCrLf & lValue
Sélection avec valeurs dans un tableau et avec images
Sélectionnez
    Dim lValue As String
    lValue = InputBoxlistView("Test ListView Tableau", _
                              Array(Array("En-Tête 1", "En-Tête 2", ""), _
                                    Array("Lig 1 Col 1", "Lig1 Col 2", "rhume.bmp"), _
                                    Array("Lig 2 Col 1", "Lig2 Col 2", "laugh.bmp")), _
                                    1, True, "Titre fenêtre", , , , , , 300, , 255, RGB(0, 255, 255), _
                                    "Comic sans MS", 20, "Arial", 15, True, True, 2)
    If lValue <> "" Then MsgBox "Saisie :" & vbCrLf & lValue
Sélection avec valeurs d'une table et avec images
Sélectionnez
    Dim lValue As String
    lValue = InputBoxlistView("Test ListView Recordset", _
                              "select Null as Status,TList.texte,TImages.chemin from Tlist", _
                              0, True, "Test Titre", , , , , , 300, 800, 255, RGB(0, 255, 255), _
                              "Comic sans MS", 20, "Arial", 15, True, True, 2, False)
    If lValue <> "" Then MsgBox "Saisie :" & vbCrLf & lValue

VII. Saisie simple

Cette boîte de dialogue plus simple permet tout de même de :

  • de changer les couleurs de fond et du texte d'information;
  • de changer la police de caractères du texte d'information;
  • de changer la police de caractères du texte saisi;
  • de masquer les caractères (pour la saisie d'un mot de passe);
  • de limiter la saisie à un nombre de caractères.

La nouvelle fonction pour cette boîte de saisie étendue est InputBoxEx.

Seul le paramètre Prompt est obligatoire.

Paramètre Type Explication
Prompt String

Texte d'information
Deux parties séparées par deux points-virgules :

  • le texte standard en haut, sur lequel agissent CaptionFontName et CaptionFontSize
  • un texte additionel en bas, dans la police standard

Exemple : "Prompt de saisie;;Texte addionnel"

Title String Titre de la fenêtre
Default String Valeur par défaut
XPos Single Position horizontale de la fenêtre en pixels
-1 pour centrer horizontalement
YPos Single Position verticale de la fenêtre en pixels
-1 pour centrer verticalement (au 1/3 de l'écran en fait)
HelpFile String Fichier d'aide (paramètre identique à l'InputBox standard)
Context String Contexte de l'aide (paramètre identique à l'InputBox standard)
ForeColor Long Couleur du texte d'information
BackColor Long Couleur de fond de la fenêtre
CaptionFontName String Nom de la police de caractères du texte d'information
CaptionFontSize Long Taille de la police de caractères du texte d'information
EditFontName String Nom de la police de caractères de la zone d'édition et de la liste
EditFontSize Long Taille de la police de caractères de la zone d'édition et de la liste
PasswordChar String Caractère de masquage du texte (par exemple pour un mot de passe)
TextLength Long Nombre de caractères maximum pouvant être saisis
pTimer Integer Minuterie en secondes.
Le temps restant s'affiche dans la zone de texte additionnel, en remplacement de [Timer].
(Ex de paramètre Prompt: "Test Timer;;Fermeture dans [Timer] secondes")
Lorsque la minuterie est écoulée le bouton d'annulation est cliqué automatiquement.

La fonction s'utilise comme la fonction InputBox standard.
Elle renvoie une chaîne de caractères.

Exemple :

Saisie d'un mot de passe
Sélectionnez
Dim lValue As String
lValue = InputBoxEx("Mot de passe", "InputBoxEx Password", , , , , , _ 
                    vbRed, vbYellow, "Comic sans MS", 20, "Arial", 15, "*")
If lValue <> "" Then MsgBox lValue
Limitation de la saisie à 5 caractères
Sélectionnez
Dim lValue As String
lValue = InputBoxEx("Saisir 5 caractères", "Saisie limitée", , , , , , _
                    vbRed, vbYellow, "Comic sans MS", 20, "Arial", 15, , 5)
If lValue <> "" Then MsgBox lValue

VIII. Utiliser les InputBox étendues en critère d'une requête

L'avantage des InputBox c'est qu'on peut les utiliser comme critère dans une requête.
Pour cela il suffit de créer, dans un module, une fonction qui appelle l'InputBox.

Fonction d'appel d'InputBoxDate pour requête
Sélectionnez
Public Function GetDate()
    GetDate = InputBoxDate("Saisir une date", , Now(), , , , , _
                        vbRed, RGB(255, 255, 200), "Comic sans MS", 20, "Comic sans MS", 15)
End Function

Ensuite on utilise cette fonction comme critère de la requête.

Image non disponible

A l'exécution de la requête le calendrier va s'ouvrir pour demander une date.

IX. Les téléchargements

Télécharger le module au format texte

Une fois téléchargé et décompressé, importez le fichier MInputBoxPlus.bas dans votre projet.

Dans le menu : Fichier => Importer un fichier … (ou glisser-déposer le fichier dans le projet).

Télécharger la base Access de démonstration au format ACCESS 2000

Télécharger la base Access de démonstration au format Excel

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2014 Thierry GASPERMENT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.