FAQ Excel

FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
Sommaire→Les boîtes de dialogues intégrées- 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 SubDans 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 SubAppuyez 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 SubDepuis 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 SubPour 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 SubPour 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 SubPour 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!", vbExclamationUn 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 IfCi-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.HelpContextVous 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 FunctionIl 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 SubLa 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 SubL'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 SubVous 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 SubNota :
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.AddressVé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 SubNota :
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).ShowFaites 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, 2Remarque :
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).ExecuteCet 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 SubIl 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.



