FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
- Comment utiliser l'assistant formulaire dans Excel 2007 ?
- Comment choisir un fichier sur le PC et récupérer son nom (utilisation de GetOpenFilename) ?
- Comment choisir un répertoire (utilisation de BrowseForFolder) ?
- Comment utiliser la boîte de dialogue FileDialog ?
- Quelles différences entre FindFile et GetOpenFilename ?
- Comment utiliser les MsgBox ?
- Comment placer un icône personnel dans la barre de titre d'un MsgBox ?
- Quelle est la différence entre InputBox et Application.InputBox ?
- Pourquoi la méthode Application.InputBox renvoie parfois une erreur de manière aléatoire ?
- Comment afficher un MsgBox temporaire ?
- Comment créer et utiliser des fenêtres de message étendues ?
- Comment utiliser le compagnon Office par macro ?
- Comment utiliser les MS agents dans Excel ?
- Comment afficher les boîtes de dialogue intégrées par macro ?
- Comment créer une barre de progression dans la barre d'état ?
- Pourquoi j'ai parfois un message d'erreur lorsque j'utilise le formulaire (grille de données) ?
- Comment faire une copie d'écran de la fenêtre affichée au premier plan ?
Dans les versions antérieures d'Excel, l'assistant était accessible depuis le menu Données/Formulaire.
Dans Excel 2007 :
Cliquez sur le bouton "Office".
Bouton "Options Excel"
Menu "Personnaliser"
Sélectionnez "Toutes les commandes" dans le menu déroulant "Choisir les commandes dans les catégories ...".
Sélectionnez l'option "Formulaire" dans la liste.
Cliquez sur le bouton "Ajouter" pour que l'icône soit transféré dans la barre d'outils Accès rapide.
Cliquez sur le bouton OK pour valider.
Vous pouvrez désormais utiliser le formulaire de manière identique aux versions précédentes, depuis la barre d'outils Acces rapide.
Nota :
Passer la plage de cellules source sous forme
de tableau permet d'éviter le message d'alerte
"Microsoft Excel ne parvient pas à identifier la ligne de votre liste ou sélection ...".
Utilisez la méthode GetOpenFilename pour visualiser l'arborescence des fichiers sur le PC, et renvoyer le nom sélectionné.
GetOpenFilename affiche la boîte de dialogue "Ouvrir" mais ne sert qu'à récupérer le nom du fichier choisi.
Sub
ChoixFichier
(
)
'La variable est de type Variant car elle peut prendre les valeurs :
'Booleenne: (Vrai/Faux) quand l'utilisateur ne sélectionne rien, ou annule l'opération.
'String: pour renvoyer le nom du fichier sélectionné.
Dim
Fichier As
Variant
'Affiche la boîte de dialogue "Ouvrir"
Fichier =
Application.GetOpenFilename
(
"Tous les fichiers (*.*),*.*"
)
'On sort si aucun fichier n'a été sélectionné ou si l'utilisateur
'a cliqué sur le bouton "Annuler", ou sur la croix de fermeture.
If
Fichier =
False
Then
Exit
Sub
'Affiche le chemin et le nom du fichier sélectionné.
MsgBox
Fichier
End
Sub
Dans ce premier exemple,
Application.GetOpenFilename
(
"Tous les fichiers (*.*),*.*"
)
permet de sélectionner tout type de fichier présent sur le PC.
Pour restreindre le choix de l'utilisateur entre une ou plusieurs extensions particulières, utilisez :
Fichier =
Application.GetOpenFilename
_
(
"Fichiers Images (*.jpg), *.jpg"
&
_
",Fichiers Images (*.gif), *.gif"
)
Pour visualiser uniquement deux types de fichiers en même temps, utilisez :
Fichier =
Application.GetOpenFilename
_
(
"Fichiers Images (*.jpg; *.gif),*.jpg;*.gif"
)
Pour gérer la multi-sélection de fichiers depuis la boîte de dialogue "Ouvrir", utilisez :
Sub
ChoixMultiFichiers
(
)
Dim
Fichiers As
Variant
Dim
i As
Integer
'Affiche la boîte dialogue "Ouvrir" en filtrant sur les classeurs Excel
'(C'est l'argument True qui autorise la multi-sélection)
Fichiers =
Application.GetOpenFilename
(
"Fichiers Excel (*.xls), *.xls"
, , , , True
)
'Boucle sur le tableau pour récupérer le nom du ou des classeurs sélectionnées.
'(IsArray(Fichiers) renvoie False si aucun fichier n'a été sélectionné).
If
IsArray
(
Fichiers) Then
For
i =
1
To
UBound
(
Fichiers)
MsgBox
Fichiers
(
i)
Next
End
If
End
Sub
Appuyez sur la touche clavier Ctrl en même temps que vous choisissez les fichiers, afin de créer une multi-sélection.
Vous remarquerez que dans cet exemple, la variable "Fichiers" est un tableau de type Variant.
Sub
ChoixRepertoire
(
)
Dim
objShell As
Object, objFolder As
Object, oFolderItem As
Object
Dim
Chemin As
String
Set
objShell =
CreateObject
(
"Shell.Application"
)
Set
objFolder =
objShell.BrowseForFolder
(&
H0&
, "Choisir un répertoire"
, &
H1&
)
On
Error
Resume
Next
Set
oFolderItem =
objFolder.Items.Item
Chemin =
oFolderItem.Path
MsgBox
Chemin
End
Sub
Depuis la version 2002, Excel met à disposition une nouvelle fenêtre multifonctions: FileDialog. En fonction de l'argument msoFileDialogType, vous pouvez sélectionner, ouvrir, enregistrer des fichiers ou sélectionner des répertoires sur votre poste :
msoFileDialogFilePicker : Sélection de fichier.
msoFileDialogFolderPicker : Sélection de dossier.
msoFileDialogOpen : Ouverture de fichier.
msoFileDialogSaveAs : Enregistrement de fichier.
Un exemple pour sélectionner un ou plusieurs fichiers :
Sub
Utilisation_FileDialog_SelectionFichier
(
)
Dim
x As
Long
With
Application.FileDialog
(
msoFileDialogFilePicker)
'Définit un titre pour la boîte de dialogue
.Title
=
"Le tite de la fenêtre:"
'Autorise la multi-sélection
.AllowMultiSelect
=
True
'Définit un nom de fichier par défaut
'.InitialFileName = "Nom document.doc"
'Efface les filtres existants.
.Filters.Clear
'Définit une liste de filtres pour le champ "Type de fichiers".
.Filters.Add
"Classeurs Excel"
, "*.xls; *.xlsx; *.xlsm"
'La valeur 1 permet de spécifier que ce filtre est positionner en premier dans la liste de choix.
.Filters.Add
"Documents Word"
, "*.doc; *.docx; *.docm"
, 1
'Définit le filtre qui s'affiche par défaut dans le champ "Type de fichiers".
.FilterIndex
=
2
'Indique le type d'affichage dans la boîte de dialogue (exemple visualisation des propriétés)
.InitialView
=
msoFileDialogViewProperties
'Affiche la boîte de dialogue
.Show
'Boucle sur les fichiers sélectionnés
For
x =
1
To
.SelectedItems.Count
MsgBox
.SelectedItems
(
x)
Next
x
End
With
End
Sub
Pour sélectionner un dossier :
Sub
Utilisation_FileDialog_SelectionDossier
(
)
Dim
x As
Long
With
Application.FileDialog
(
msoFileDialogFolderPicker)
'Définit un titre pour la boîte de dialogue
.Title
=
"Le tite de la fenêtre:"
'Affiche la boîte de dialogue
.Show
'Affiche le nom du dossier sélectionné
If
.SelectedItems.Count
>
0
Then
MsgBox
.SelectedItems
(
1
)
End
If
End
With
End
Sub
Pour afficher la boîte de dialogue "Sauvegarder":
Sub
Utilisation_FileDialog_Sauvegarde
(
)
Dim
objSaveBox As
FileDialog
'Définit la fenêtre "Enregistrer sous"
Set
objSaveBox =
Application.FileDialog
(
msoFileDialogSaveAs)
With
objSaveBox
'Définit un nom par défaut dans le champ "Nom de fichier".
.InitialFileName
=
"Nom fichier.xls"
'Définit le type de fichier par défaut :
'(la valeur 4 Permet de spécifier les classeurs "Excel 97-2003" lorsque vous êtes dans Excel 2007)
.FilterIndex
=
4
'Affiche la boîte de dialogue
.Show
'Enregistre
.Execute
End
With
End
Sub
Pour afficher la boîte de dialogue "Ouvrir":
Sub
Utilisation_FileDialog_Ouvrir
(
)
Dim
objOuvrir As
FileDialog
Dim
objFichiers As
FileDialogSelectedItems
Dim
x As
Long
Dim
Wb As
Workbook
'Affiche la fenêtre "Ouvrir"
With
Application.FileDialog
(
msoFileDialogOpen)
.InitialFileName
=
""
'Efface les filtres existants.
.Filters.Clear
'Définit une liste de filtres pour le champ "Type de fichiers".
.Filters.Add
"Classeurs Excel"
, "*.xls; *.xlsx; *.xlsm"
'Indique le type d'affichage dans la boîte de dialogue
.InitialView
=
msoFileDialogViewDetails
.Show
End
With
'Définit le ou les fichiers à ouvrir
Set
objFichiers =
Application.FileDialog
(
msoFileDialogOpen).SelectedItems
'On sort si aucun fichier n'a été sélectionné
If
objFichiers.Count
=
0
Then
Exit
Sub
Application.ScreenUpdating
=
False
'Boucle sur le ou les fichiers Excel sélectionnés pour les ouvrir
For
x =
1
To
objFichiers.Count
Set
Wb =
Workbooks.Open
(
objFichiers
(
x))
'
'traitement
'
'Referme le classeur sans enregistrer les modifications.
Wb.Close
False
Next
Application.ScreenUpdating
=
True
End
Sub
Principalement FindFile ouvre le fichier alors que GetOpenFilename renvoie le nom du fichier sélectionné.
Cependant GetOpenFilename permet d'utiliser un filtrage ce que ne permet pas la méthode FindFile.
Par exemple :
NomFichier =
Application.GetOpenFilename
(
"Classeurs Excel(*.xls),*.xls, Macros complémentaires (*.xla),*.xla"
)
Il y a une plus grande sécurité à utiliser la méthode GetOpenFilename.
La fonction MsgBox permet d'afficher un message à l'écran. La boîte de dialogue reste à l'écran et bloque la procédure en cours, tant que l'utilisateur n'a pas cliqué sur un bouton.
La syntaxe et les arguments sont :
MsgBox(prompt[, buttons]
[, title] [, helpfile, context])
prompt
Indique le message à afficher.
MsgBox
"Bonjour!"
buttons
Définit le type et l'ordre des boutons à afficher, le style d'icône.
MsgBox
"Bonjour!"
, vbExclamation
Un ensemble de constantes est disponible pour gérer les différents boutons et icônes :
Constante | Valeur | Description |
---|---|---|
vbOKOnly | 0 | Affiche le bouton OK uniquement |
vbOKCancel | 1 | Affiche les boutons OK et Annuler |
vbAbortRetryIgnore | 2 | Affiche le bouton Abandonner, Réessayer et Ignorer |
vbYesNoCancel | 3 | Affiche les boutons Oui, Non et Annuler |
vbYesNo | 4 | Affiche les boutons Oui et Non |
vbRetryCancel | 5 | Affiche les boutons Réessayer et Annuler |
vbCritical | 16 | Affiche l'icône Message critique |
vbQuestion | 32 | Affiche l'icône Requête d'avertissement |
vbExclamation | 48 | Affiche l'icône Message d'avertissement |
vbInformation | 64 | Affiche l'icône Message d'information |
vbDefaultButton1 | 0 | Le premier bouton est le bouton par défaut |
vbDefaultButton2 | 256 | Le deuxième bouton est le bouton par défaut |
vbDefaultButton3 | 512 | Le troisième bouton est le bouton par défaut |
vbDefaultButton4 | 768 | Le quatrième bouton est le bouton par défaut |
vbApplicationModal | 0 | Boîte de dialogue modale |
vbSystemModal | 4096 | Modal système |
vbMsgBoxHelpButton | 16384 | Ajoute le bouton Aide à la zone de message |
VbMsgBoxSetForeground | 65536 | Indique la fenêtre de zone de message comme fenêtre de premier plan |
vbMsgBoxRight | 524288 | Le teste est aligné à droite |
vbMsgBoxRtlReading | 1048576 | Indique que le texte doit apparaître de droite à gauche sur les systèmes hébraïques et arabes |
Lorsque vous cliquez sur les boutons, des valeurs sont renvoyées et peuvent être utilisées dans la suite de votre projet.
Un exemple qui pose une question à l'utilisateur. Celui ci doit répondre par oui ou par non :
Dim
Reponse As
Long
Reponse =
MsgBox
(
"Voulez vous continuer ?"
, vbQuestion
+
vbYesNo
)
If
Reponse =
vbYes
Then
MsgBox
"On continue ..."
, vbExclamation
Else
MsgBox
"Au revoir ..."
, vbInformation
End
If
Ci-dessous les valeurs renvoyées, en fonctions des types de boutons et du choix de l'utilisateur :
Constante | Valeur | Description |
---|---|---|
vbOK | 1 | OK |
vbCancel | 2 | Annuler |
vbAbort | 3 | Abandonner |
vbRetry | 4 | Réessayer |
vbIgnore | 5 | Ignorer |
vbYes | 6 | Oui |
vbNo | 7 | Non |
title
Indique un titre dans la boîte de dialogue.
MsgBox
"Bonjour "
&
Environ
(
"username"
), vbInformation
, "Accueil"
helpfile
Définit le chemin d'accès complet à un fichier d'aide. Cet argument est associé avec l'argument context.
context
Définit l'identificateur de rubrique du fichier d'aide qui a été indiqué dans l'argument helpfile.
Dim
Msg As
String
Dim
Cellule As
Range
On
Error
Resume
Next
'Va provoquer une erreur 'définie par l'application ou par l'objet' car
'Cells(0, 1) ne peut pas exister.
Set
Cellule =
Cells
(
0
, 1
)
'MsgBox Err.HelpContext
Msg =
"Cliquez sur le bouton AIDE pour consulter la rubrique relative à cette erreur."
MsgBox
Msg, vbMsgBoxHelpButton, "Erreur"
, Err
.HelpFile
, Err
.HelpContext
Vous pouvez aussi spécifier des fichiers d'aide personnels. Pour plus d'infos, consultez le tutoriel pour gérer les erreurs.
Il ne vous reste plus qu'à faire des essais et tester toutes les options disponibles dans l'application.
Quelques exemples supplémentaires.
Afficher le message sur plusieurs lignes :
MsgBox
"Bonjour "
&
Environ
(
"username"
) &
_
vbCrLf
&
vbCrLf
&
_
"Nous sommes le "
&
Date
, _
vbCritical
, "Accueil"
Utilisation de l'énumération VbMsgBoxStyle :
Dim
Reponse As
Long
Dim
cstMsgBox As
VbMsgBoxStyle
cstMsgBox =
vbYesNo
+
vbDefaultButton2
Reponse =
MsgBox
(
"Bonjour"
, cstMsgBox)
If
Reponse =
vbYes
Then
MsgBox
"Oui"
Il semblerait que les arguments context et helpfile ne soient plus utilisables dans Excel 2007.
En attendant un futur pack de mise à jour, vous pouvez utiliser d'autres méthodes proposées dans ce lien :
Comment ouvrir des fichiers d'aide personnels .chm ?
'---------------------------------------------------------------------------------------
' Module : modIconeDansMsgBox
' Auteur : fred65200 - Frédéric CHAPIN -
'https://www.developpez.net/forums/private.php?do=newpm&u=190475
' Date : 06/02/2009
' Description : Placer une icône perso dans la barre de titre d'un MsgBox
' Plus lourd qu'un UserForm, intéressant pour l'utilisation des APIs
'---------------------------------------------------------------------------------------
Option
Explicit
'Constantes des MsgBox Windows
Private
Const
MB_OK =
0
Private
Const
MB_OKCANCEL =
1
Private
Const
MB_ABORTRETRYIGNORE =
2
Private
Const
MB_YESNOCANCEL =
3
Private
Const
MB_YESNO =
4
Private
Const
MB_RETRYCANCEL =
5
Private
Const
MB_ICONHAND =
16
Private
Const
MB_ICONQUESTION =
32
Private
Const
MB_ICONEXCLAMATION =
48
Private
Const
MB_ICONASTERISK =
64
Private
Const
MB_ICONINFORMATION =
64
Private
Const
MB_ICONSTOP =
16
Private
Const
MB_DEFBUTTON1 =
0
Private
Const
MB_DEFBUTTON2 =
256
Private
Const
MB_DEFBUTTON3 =
512
Private
Const
MB_APPLMODAL =
0
Private
Const
MB_SYSTEMMODAL =
4096
Private
Const
MB_TASKMODAL =
8192
'Valeurs renvoyées par les MsgBox Windows
Private
Const
IDOK =
1
Private
Const
IDCANCEL =
2
Private
Const
IDABORT =
3
Private
Const
IDRETRY =
4
Private
Const
IDIGNORE =
5
Private
Const
IDYES =
6
Private
Const
IDNO =
7
Private
Const
IDPROMPT =
&
HFFFF&
Private
Const
HWND_DESKTOP =
0
Private
X As
Long
Private
Const
WH_CBT =
5
Private
Const
GWL_HINSTANCE =
(-
6
)
Private
Const
HCBT_ACTIVATE =
5
Private
Type
MSGBOX_HOOK_PARAMS
hwndOwner As
Long
hHook As
Long
End
Type
Private
MHP As
MSGBOX_HOOK_PARAMS
Private
Declare
Function
ExtractIconA Lib
"shell32.dll"
(
_
ByVal
hInst As
Long
, _
ByVal
lpszExeFileName As
String
, _
ByVal
nIconIndex As
Long
) As
Long
Private
Declare
Function
GetCurrentThreadId Lib
"kernel32"
(
) As
Long
Private
Declare
Function
GetWindowLong Lib
"user32"
_
Alias "GetWindowLongA"
(
_
ByVal
hwnd As
Long
, _
ByVal
nIndex As
Long
) As
Long
Private
Declare
Function
MessageBox Lib
"user32"
_
Alias "MessageBoxA"
(
_
ByVal
hwnd As
Long
, _
ByVal
lpText As
String
, _
ByVal
lpCaption As
String
, _
ByVal
wType As
Long
) As
Long
Public
Declare
Function
SendMessageA Lib
"user32"
(
_
ByVal
hwnd As
Long
, _
ByVal
wMsg As
Long
, _
ByVal
wParam As
Integer
, _
ByVal
lParam As
Long
) As
Long
Private
Declare
Function
SetDlgItemText Lib
"user32"
_
Alias "SetDlgItemTextA"
(
_
ByVal
hDlg As
Long
, _
ByVal
nIDDlgItem As
Long
, _
ByVal
lpString As
String
) As
Long
Private
Declare
Function
SetWindowsHookEx Lib
"user32"
_
Alias "SetWindowsHookExA"
(
_
ByVal
idHook As
Long
, _
ByVal
lpfn As
Long
, _
ByVal
hmod As
Long
, _
ByVal
dwThreadId As
Long
) As
Long
Private
Declare
Function
UnhookWindowsHookEx Lib
"user32"
(
_
ByVal
hHook As
Long
) As
Long
Sub
Test
(
)
monMsgBox MB_OK, "monTitre"
, "Bla bla"
monMsgBox MB_YESNO +
MB_ICONQUESTION, "monTitre"
, "Bla bla"
monMsgBox MB_OKCANCEL +
MB_ICONEXCLAMATION, "monTitre"
, "Bla bla"
monMsgBox MB_OKCANCEL +
MB_ICONHAND, "monTitre"
, "Bla bla"
monMsgBox MB_ABORTRETRYIGNORE +
MB_ICONASTERISK +
MB_DEFBUTTON2, "monTitre"
, "Bouton 2 par défaut"
End
Sub
Function
monMsgBox
(
_
boutons As
Long
, _
titre As
String
, _
texte As
String
) As
Long
'Interception du Hook
With
MHP
.hwndOwner
=
HWND_DESKTOP
.hHook
=
SetWindowsHookEx
(
WH_CBT, _
AddressOf MsgBoxHookProc, _
GetWindowLong
(
HWND_DESKTOP, GWL_HINSTANCE), _
GetCurrentThreadId
(
))
End
With
'Appel de la fonction API
monMsgBox =
MessageBox
(
HWND_DESKTOP, _
texte, _
titre, _
boutons)
End
Function
Function
MsgBoxHookProc
(
_
ByVal
uMsg As
Long
, _
ByVal
wParam As
Long
, _
ByVal
lParam As
Long
) As
Long
'Le MsgBox va bientôt s'afficher
If
uMsg =
HCBT_ACTIVATE Then
'Bouton Ok personnalisé
SetDlgItemText wParam, IDOK, "C'est b&on"
SetDlgItemText wParam, IDCANCEL, "&Annule moi ça"
SetDlgItemText wParam, IDYES, "&Ouuuui!"
SetDlgItemText wParam, IDNO, "&Nooooon!"
'icône Word pour le sujet
X =
ExtractIconA
(
0
, Application.Path
&
Application.PathSeparator
&
"Winword.exe"
, 0
)
SendMessageA wParam, &
H80, False
, X
'«Unhook»
UnhookWindowsHookEx MHP.hHook
End
If
MsgBoxHookProc =
False
End
Function
Il existe deux utilisations possibles pour InputBox : La fonction et la méthode.
La fonction InputBox affiche une boîte de dialogue permettant à l'utilisateur de saisir un texte. La fonction renvoie l'information en donnée de type String, lorsque vous cliquez sur le bouton OK. Si l'utilisateur clique sur le bouton Annuler ou sur la croix de fermeture, une chaîne vide est renvoyée.
La syntaxe est: InputBox
(
prompt[, title] [, default
] [, xpos] [, ypos] [, helpfile, context])
prompt
Définit la description dans la boite de dialogue (comme pour les MsgBox, il est possible d'aller à la ligne dans le texte).
title
Définit un titre facultatif pour la boîte de dialogue.
default
Définit la donnée facultative qui s'affiche par défaut dans le champ de saisie.
xpos et ypos
Définissent la position (en twips) de la boîte de dialogue à l'écran.
1 twips = 1/1440 pouces
xpos définit la position horizontale.
ypos définit la position verticale.
si xpos et ypos sont omis, la boite de dialogue s'affiche au milieu de l'écran.
helpfile
Définit le chemin et le nom du fichier d'aide qui peut être associé à la boîte de dialogue. Si vous utilisez helfile, l'argument
context doit aussi être précisé.
context
Définit le numéro de la rubrique dans le fichier d'aide.
Le bouton d'aide apparait dans la fenêtre uniquement si les 2 arguments helpfile et context sont spécifiés.
Un exemple :
Sub
Test_V01
(
)
Dim
Valeur As
String
Valeur =
InputBox
(
"Saisissez votre prénom:"
, _
"Le titre"
, "Donnée par défaut."
, 100
, 400
)
MsgBox
Valeur
End
Sub
La méthode InputBox est précédée de l'objet Application.
Elle aussi affiche une boîte de dialogue pour saisir des données mais se différencie de la fonction par :
* La position de la boîte de dialogue qui est exprimée en points.
* L'argument Type, qui permet plus d'options dans le champ de saisie, et pas uniquement des données de type String comme dans la
fonction.
La syntaxe est:
Application.InputBox
(
Prompt, Title, Default
, Left
, Top, HelpFile, HelpContextId, Type
)
prompt
Définit la description dans la boite de dialogue.
title
Définit un titre facultatif pour la boîte de dialogue.
default
Définit la donnée facultative qui s'affiche par défaut dans le champ de saisie.
Left et Top
Définissent la position (en points) de la boîte de dialogue à l'écran.
Un point = 1/72 de pouce.
Left définit la position horizontale.
Top définit la position verticale.
HelpFile
Définit le chemin et le nom du fichier d'aide qui peut être associé à la boîte de dialogue.
HelpContextId
Définit le numéro de la rubrique dans le fichier d'aide.
Type
Spécifie le type des données renvoyées. Si vous ne spécifiez pas cet argument, la boîte de dialogue renvoie du texte.
L'argument Type peut avoir une ou la somme des valeurs suivantes.
Valeur | Type de donnée |
---|---|
0 | Formule |
1 | Nombre |
2 | Texte |
4 | Valeur logique (True ou False) |
8 | Référence de cellule (objet Range) |
16 | Valeur d'erreur |
64 | Tableau de valeurs |
Un exemple qui permet de sélectionner une plage de cellules :
Sub
Test_V02
(
)
Dim
Plage As
Range
set
Plage =
Application.InputBox
(
"Sélectionnez une plage de cellule"
, _
"Le titre"
, , , , "C:\dossier\FichierAide.hlp"
, 100
, Type
:=
8
)
MsgBox
Plage.Address
End
Sub
L'exemple suivant limite la saisie à des données numériques (utilisation de Type:=1):
Sub
Test_V03
(
)
Dim
Valeur As
Single
'Type:=1 définit un type de donnée numérique
Valeur =
Application.InputBox
(
"Saisissez une valeur"
, Type
:=
1
)
If
Valeur =
0
Then
Exit
Sub
'On multiplie la saisie par 5
MsgBox
Valeur *
5
End
Sub
Vous pouvez aussi gérer l'utilisation du bouton "Annuler" et la croix de fermeture. Utilisez une variable type Variant. Celle ci prend la valeur False si un des deux boutons est cliqué.
Sub
Test_V04
(
)
Dim
Donnee As
Variant
Donnee =
Application.InputBox
(
"Saisissez une valeur:"
, "Le titre"
)
'Intercepte l'utilisation du bouton "Annuler" et la croix de fermeture.
If
VarType
(
Donnee) =
vbBoolean
Then
MsgBox
" opération annulée"
Exit
Sub
End
If
MsgBox
Donnee
End
Sub
Nota :
Il semblerait que les arguments context et helpfile ne soient plus utilisables dans Excel 2007.
En attendant un futur pack de mise à jour, vous pouvez utiliser d'autres méthodes proposées dans ce lien :
Comment ouvrir des fichiers d'aide personnels .chm ?
La procédure suivante utilisée pour sélectionner une plage de cellule provoque parfois une erreur et sans que vous puissiez exactement déterminer la cause.
Dim
Source As
Range
Set
Source =
Application.InputBox
(
"Sélectionnez une plage de cellules : "
, , , , , , , 8
)
MsgBox
Source.Address
Vérifiez si les cellules qui posent problème contiennent des mises en forme conditionnelles de type "la formule est".
C'est un bug connu de la méthode Application.InputBox jusqu'à Excel 2003. Application.InputBox ne renvoie rien dans ce
cas et provoque une erreur dans la suite de la procédure.
Nota :
Le problème est résolu dans Excel 2007.
Un exemple de message qui s'affiche pendant 3 secondes :
CreateObject
(
"Wscript.shell"
).Popup
"Mon Texte"
, 3
, "Le Titre"
Cet outil permet de créer des MsgBox étendues affichant du texte formaté (RTF).
Elles sont auto-refermables et on peut également modifier le texte des boutons.
Suivez ce lien pour consulter le tutoriel. OFFICE : Fenêtres de message étendues.
Sub
UtilisezCompagnon_Personnalise
(
)
Dim
i As
Byte
With
Assistant.NewBalloon
.Animation
=
msoAnimationEmptyTrash
.Button
=
msoButtonSetOK
.Heading
=
"Consultez les ressources DVP."
.Text
=
"Sélectionnez un élément puis cliquez sur le bouton 'OK'."
.CheckBoxes
(
1
).Text
=
"Les sources Excel"
.CheckBoxes
(
2
).Text
=
"Le forum Excel"
.CheckBoxes
(
3
).Text
=
"La FAQ VBA"
.CheckBoxes
(
4
).Text
=
"Les cours VBA"
.Icon
=
msoIconTip
.Show
For
i =
1
To
4
If
.CheckBoxes
(
i).Checked
=
True
Then
Select
Case
i
Case
1
ThisWorkbook.FollowHyperlink
"https://excel.developpez.com/sources/"
Case
2
ThisWorkbook.FollowHyperlink
"https://www.developpez.net/forums/f542/logiciels/microsoft-office/excel/"
Case
3
ThisWorkbook.FollowHyperlink
"https://vb.developpez.com/faqvba/"
Case
4
ThisWorkbook.FollowHyperlink
"https://vb.developpez.com/cours/"
End
Select
Exit
For
End
If
Next
End
With
Assistant.Visible
=
False
End
Sub
Nota :
L'assistant Office n'est pas disponible dans Excel 2007.
Le compagnon Office ne fonctionne pas sur les environnements Citrix pour cause d'incompatibilité.
Les MS agents sont des personnages que vous pouvez piloter (positon, dialogues, attitudes) par programmation VBA.
Les fichiers .asc (qui contiennent les caractéristiques de chaque personnage) sont généralement stockés dans le répertoire :
C:\Windows\Msagent\Chars
Sinon, consultez le site Microsoft pour
télécharger les personnages et les licences de distribution.
Le site dispose aussi d'une page d'aide pour les développeurs
(Samples, SDK, outils linguistiques et vocaux, un éditeur pour personnaliser vos agents personnels...)
Si vous rencontrez des problèmes pour faire parler le personnage :
Output Problems
Comment configurer et utiliser la conversion vocale de texte dans Windows XP.
Cet exemple nécessite d'activer la référence "Microsoft agent control 2.0"
Activez le son du PC avant de lancer la procédure :
Sub
Utiliser_MSagent
(
)
Dim
Chemin As
String
Dim
ArrayAttitude As
Variant
Dim
j As
Integer
Dim
Ag As
AgentObjects.Agent
Dim
Personnage As
AgentObjects.IAgentCtlCharacter
'Liste des attitudes
ArrayAttitude =
Array
(
"Alert"
, "Announce"
, "Blink"
, "Confused"
, "Congratulate"
, "Congratulate_2"
, _
"Decline"
, "DoMagic2"
, "DontRecognize"
, "Explain"
, "GestureDown"
, "GestureLeft"
, "GetAttention"
, _
"GetAttentionReturn"
, "Greet"
, "Idle1_1"
, "Idle1_2"
, "LookDown"
, "LookDownBlink"
, _
"LookDownReturn"
, "LookUp"
, "MoveDown"
, "Pleased"
, "Process"
, "Read"
, "ReadContinued"
, _
"ReadReturn"
, "RestPose"
, "Search"
, "StartListening"
, "StopListening"
, "Suggest"
, "Surprised"
, _
"Wave"
, "Write"
, "WriteContinued"
, "WriteReturn"
)
'Définit le fichier du personnage
Chemin =
Environ
(
"windir"
) &
"\msagent\chars\merlin.acs"
Set
Ag =
New
AgentObjects.Agent
Ag.Connected
=
True
Ag.Characters.Load
"Merlin"
, Chemin
'&h409 anglais
'&H40C français
Ag.Characters
(
"Merlin"
).LanguageID
=
&
H409
Set
Personnage =
Ag.Characters
(
"Merlin"
)
With
Personnage
'Affichage
.Show
'Définit la largeur du personnage
.Width
=
200
'Définit la hauteur
.Height
=
200
'Position à l'écran
.MoveTo
400
, 300
End
With
On
Error
Resume
Next
For
j =
0
To
UBound
(
ArrayAttitude)
'Texte
Personnage.Speak
ArrayAttitude
(
j)
'Attitude
Personnage.Play
ArrayAttitude
(
j)
'Pause: 3 secondes
Application.Wait
(
TimeSerial
(
Hour
(
Now
(
)), Minute
(
Now
(
)), Second
(
Now
(
)) +
3
))
Next
j
On
Error
GoTo
0
Personnage.Speak
"\Chr=""Whisper""\Au revoir! "
&
Environ
(
"username"
)
'Pause: 3 secondes
Application.Wait
(
TimeSerial
(
Hour
(
Now
(
)), Minute
(
Now
(
)), Second
(
Now
(
)) +
3
))
Set
Personnage =
Nothing
Set
Ag =
Nothing
End
Sub
Utilisez la propriété Dialogs. La syntaxe est :
Application.Dialogs
(
Nom_Boite_De_Dialogue).Show
L'énumération spécifiée (XlBuiltInDialog) permet d'indiquer la boîte de dialogue à afficher.
Cet exemple affiche la fenêtre "Enregistrer sous".
Application.Dialogs.Item
(
xlDialogSaveAs).Show
Faites une recherche sur le mot clé "Dialogs" dans l'aide Excel pour obtenir la liste des boîtes de dialogues disponibles, ainsi que leurs arguments paramétrables par macro.
Cette adaptation du premier exemple permet de paramétrer un nom par défaut dans le champ "Nom de fichier" et un mot de passe pour la lecture.
'Application.Dialogs.Item(xlDialogSaveAs).Show document_text, type_num, prot_pwd, backup,
'write_res_pwd, read_only_rec
Application.Dialogs.Item
(
xlDialogSaveAs).Show
"NomClasseur.xls"
, , "PassWord"
Un autre exemple qui affiche la boîte de dialogue "Copier une image" et qui montre comment en paramétrer les options :
'Paramètre par macro les arguments de la boite de dialogue xlDialogCopyPicture
'1= 1ere option de chaque argument
'2= 2eme option de chaque argument
Application.Dialogs.Item
(
xlDialogCopyPicture).Show
1
, 2
Remarque :
La méthode FindControl permet aussi d'afficher les boîtes de dialogues intégrées. Exemple pour afficher
la fenêtre "Enregistrer sous":
'Enregistrer sous
CommandBars.FindControl
(
ID:=
748
).Execute
Cet exemple ne nécessite pas un comptage préalable du nombre d'itérations.
Lancez la procédure depuis la feuille de calcul pour visualiser le résultat.
Sub
ProgressionStatusbar
(
)
Dim
i As
Long
Dim
InitSB As
Boolean
Dim
Indice As
Integer
Dim
Debut As
Date
Debut =
Now
'Récupére la valeur de la barre d'état afin de pouvoir la redéfinir à son état initial
'en fin de procédure.
'(Renvoie True si la barre d'état est affichée, sinon False)
InitSB =
Application.DisplayStatusBar
'Affiche la barre d'état si ce n'est pas déjà le cas
Application.DisplayStatusBar
=
True
'Exemple de boucle pour tester l'affichage dans la barre d'état.
For
i =
1
To
150000
'
'la procédure
'
'---
If
Debut <>
Now
Then
Indice =
Indice +
1
Debut =
Now
If
Indice >
10
Then
Indice =
1
End
If
Application.StatusBar
=
Application.Rept
(
Chr
(
7
), Indice)
'd'autres exemples de symboles pour le défilement dans la barre.
'Application.StatusBar = Application.Rept(Chr(8), Indice)
'Application.StatusBar = Application.Rept(Chr(62), Indice)
'---
Next
'Restaure la donnée par défaut de la barre d'état
Application.StatusBar
=
False
'Réinintialise le mode d'affichage de la barre.
Application.DisplayStatusBar
=
InitSB
End
Sub
Il peut arriver que vous ayez le message d'erreur "La commande n'a pas pu être exécutée avec la plage spécifiée" lorsque vous essayez d'afficher la grille de données (Menu Outils / Données / Formulaire).
La boîte de dialogue "Formulaire" permet de visualiser les enregistrements contenus dans la feuille. Les grilles de
données permettent d'ajouter, modifier, atteindre et supprimer des enregistrements.
Pour éviter le message d'erreur, privilégiez une structure classique pour votre base de données:
La première ligne sert à indiquer le nom des champs à partir de la première colonne.
N'utilisez pas de colonnes vides dans la base de données.
Evitez les lignes vides en tête de feuille.
Sélectionnez une cellule de la base de données avant le lancer le formulaire.
Un message d'erreur est renvoyé si ces règles ne sont pas respectées.
Par macro, la procédure renverra un message d'erreur 1004 "La méthode ShowDataForm de la classe Worksheet a échoué".
Worksheets
(
"Feuil1"
).ShowDataForm
MsgBox
"Fermeture du formulaire"
Pour utiliser la grille de données depuis Excel 2007 :
Cliquez sur le bouton Office.
Cliquez sur le bouton "Options d'Excel".
Sélectionnez le menu "Personnaliser".
Choisissez l'option "Commandes non présentes sur le ruban".
Sélectionnez la ligne "Formulaire".
Cliquez sur le bouton "Ajouter", puis sur le bouton OK pour valider.
Le formulaire est désormais disponible depuis la barre d'outils accès rapide.
Utilisez le raccourci clavier Alt + ImprimEcran.
Ensuite, effectuez un collage dans la feuille de calcul (Ctrl+V).
Cette opération fonctionne pour toutes les boîtes de dialogues prédéfinies, les inputbox, les MsgBox et les UserForms.