ACCESS et EXCEL : Fenêtres de saisie étendues

Thierry GASPERMENT

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)

- Titre : ACCESS et EXCEL : Fenêtres de saisie étendues

- Auteur : Thierry GASPERMENT

- Parution : 20 juin 2007

- Mise à jour : 4 mars 2018

- Licence : 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.

Sommaire

- I. Introduction

- II. Compatibilité / Installation

- III. Sélection de date avec un calendrier

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

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

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

- VII. Saisie simple

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

- IX. Les téléchargements

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 :

Zone de liste :

Date/Time picker :

Mot de passe :

Fermeture sur minuterie

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

II - Compatibilité / Installation

Le module a été développé pour Access et Excel.

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 x.x Object Library dans la liste, ou Microsoft Office xx.x Access database engine Object Library pour les versions plus récentes (à partir de 2007).

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 :

' Pour Access
#Const AppVersion = "ACCESS"
' Pour Excel
'#Const AppVersion = "EXCEL"

doit être changé en :

' 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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