IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ Excel

FAQ ExcelConsultez toutes les FAQ

Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022 

 
OuvrirSommaireLes boîtes de dialogues intégrées

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 ...".

Créé le 2 octobre 2007  par SilkyRoad

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.

Vba
Sélectionnez
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 :

Vba
Sélectionnez
    Fichier = Application.GetOpenFilename _
        ("Fichiers Images (*.jpg), *.jpg" & _
        ",Fichiers Images (*.gif), *.gif")

Pour visualiser uniquement deux types de fichiers en même temps, utilisez :

Vba
Sélectionnez
    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 :

Vba
Sélectionnez
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.

Créé le 2 octobre 2007  par SilkyRoad
Vba
Sélectionnez
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
Créé le 2 octobre 2007  par SilkyRoad

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 :

Vba
Sélectionnez
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 :

Vba
Sélectionnez
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":

Vba
Sélectionnez
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":

Vba
Sélectionnez
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
Créé le 2 octobre 2007  par Zazaraignée, SilkyRoad

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 :

Vba
Sélectionnez
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.

Créé le 14 février 2004  par Bidou

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.

Vba
Sélectionnez
MsgBox "Bonjour!"

buttons
Définit le type et l'ordre des boutons à afficher, le style d'icône.

Vba
Sélectionnez
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 :

Vba
Sélectionnez
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.

Vba
Sélectionnez
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.

Vba
Sélectionnez
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 :

Vba
Sélectionnez
MsgBox "Bonjour " & Environ("username") & _
            vbCrLf & vbCrLf & _
            "Nous sommes le " & Date, _
            vbCritical, "Accueil"

Utilisation de l'énumération VbMsgBoxStyle :

Vba
Sélectionnez
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 ?

Mis à jour le 26 mai 2008  par SilkyRoad

Lien : VBA EXCEL, La MsgBox décortiquée

Vba
Sélectionnez
'---------------------------------------------------------------------------------------
' 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
Créé le 22 mars 2009  par Fred65200

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 :

Vba
Sélectionnez
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 :

Vba
Sélectionnez
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):

Vba
Sélectionnez
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é.

Vba
Sélectionnez
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 ?

Créé le 2 octobre 2007  par SilkyRoad

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.

Vba
Sélectionnez
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.

Créé le 20 septembre 2008  par SilkyRoad

Un exemple de message qui s'affiche pendant 3 secondes :

Vba
Sélectionnez
CreateObject("Wscript.shell").Popup "Mon Texte", 3, "Le Titre"
Créé le 2 octobre 2007  par SilkyRoad

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.

Créé le 2 octobre 2007  par Arkham46
Vba
Sélectionnez
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é.

Créé le 30 juin 2007  par SilkyRoad, Starec

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 :

Vba
Sélectionnez
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
Créé le 2 octobre 2007  par SilkyRoad

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".

Vba
Sélectionnez
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.

Vba
Sélectionnez
'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 :

Vba
Sélectionnez
'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":

Vba
Sélectionnez
'Enregistrer sous
CommandBars.FindControl(ID:=748).Execute
Créé le 5 décembre 2007  par SilkyRoad

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.

Vba
Sélectionnez
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
Créé le 19 février 2008  par SilkyRoad

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é".

Vba
Sélectionnez
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.

Créé le 19 février 2008  par SilkyRoad

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.

Créé le 20 septembre 2008  par SilkyRoad

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 © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.