La liste de toutes les boîtes de dialogues existantes se trouve ici (fichier XLS)
Le principe d'appel est toujours le même :
Application.Dialogs(NomDeLaBoiteDeDialogue).Show "Paramètre éventuel", "Autre paramètre", ...
Exemple : Admettons qu'on veuille affichier la boîte de dialogue Zoom (Affichage/Zoom) :
Sub MacroQuelconque
Application.Dialogs(xlDialogZoom).Show
End Sub
Et si maintenant on voulait que cette boîte affiche par défaut 75 %, on l'appellerait comme ceci :
Application.Dialogs(xlDialogZoom).Show "75"
Vous pouvez donc visualiser la totalité des boîtes de dialogues d'Excel ici. En fait, ce fichier Excel n'est qu'une copie de l'aide intégrée, à la rubrique "Dialogs". On constate que l'aide concernant les paramètres des différentes boîtes de dialogue est pour le moins lapidaire. En effet, si vous recherchez justement xlDialogZoom, (facile, c'est la dernière tout en bas...), on constate :
xlDialogZoom magnification
ou magnification est donc le degré de zoom. Bien, mais faut il indiquer 75, 75%, 75 %, "75", "75%" ou "75 %" pour obtenir une valeur par défaut de 75 % ? Ce n'est qu'après quelques tâtonnements que j'ai trouvé
Application.Dialogs(xlDialogZoom).Show "75"
Pour une raison qui me laisse perplexe, certaines boîtes de dialogue acceptent des paramètres, d'autres pas alors que des renseignements peuvent être données. Prenons l'exemple de la boîte "Format/Mise en forme conditionnelle" (xlDialogConditionalFormatting): d'après la liste de référence, aucun paramètre n'est accepté. Pourtant, voyons la boîte :
Afin de pallier à cette insuffisance, la méthode SendKeys est valable. Je rappelle que SendKeys envoie purement et simplement des touches du clavier via VBA.
Exemple :
Sub FormatConditionnel()
SendKeys ("{TAB}{TAB}2{TAB}7")
Application.Dialogs(xlDialogConditionalFormatting).Show
End Sub
Affiche la boîte comme ceci :
Une autre lacune des boîtes de dialogues intégrées et leur incapacité à renvoyer une valeur. Par exemple, lors de l'appel à la boîte de dialogue "Fichier/Ouvrir", on pourrait s'attendre à récupérer le nom du fichier ouvert, de cette façon :
Sub FichierOuvrir()
FichierAOuvrir = Application.Dialogs(xlDialogOpen).Show
MsgBox FichierAOuvrir
End Sub
Mais il se contente de renvoyer VRAI...
Application.Dialogs permet donc uniquement d'appeler les boîtes de dialogues et éventuellement des les pré-remplir.
Fort heureusement, dans la plupart des cas, nous n'avons pas besoin d'une valeur de retour. Mais dans le cas de la sélection d'un fichier, c'est important, car on ne veut pas forcément l'ouvrir, mais un autre traitement.
Application.GetOpenFilename
est l'instruction qu'il nous faut. Et le fichier sélectionné est renvoyé, comme ceci :
ATTENTION : Application.GetOpenFilename ne fonctionne apparemment pas dans Word. Si vous voulez l'utiliser dans Word, il faut écrire Excel.:Application.GetOpenFilename, en prenant soin d'avoir inclu la bibliothèque Excel avec Outils/Références : cocher "Microsoft Excel XX.X Object Library"
Sub ChoixFichier()
FichierChoisi = Application.GetOpenFilename
MsgBox FichierChoisi
End Sub
FichierChoisi contient le chemin suivi du nom du fichier (C:\Dossier\SousDossier\Fichier.ext)
Si on clique sur Annuler, FichierChoisi contient Faux (0)
GetOpenFileName est une méthode très puissante qui accepte de nombreux paramètres. Par exemple :
FichierChoisi = Application.GetOpenFilename("Poèmes textuels, *.txt")
Va afficher ceci (Filtre de tous les fichiers se terminant en .TXT et qu'on surnomme "Poèmes textuels") :
Voici un filtre plus élaboré :
Application.GetOpenFilename("Textes purs, *.txt,Fichiers office, *.xls;*.doc;*.ppt")
Va nous proposer soit la liste des textes purs .TXT - OU - Les fichiers Office, c'est à dire qui se terminent par DOC, PPT ou XLS
Cette petite variante donne la même chose, mais ce sont directement les fichiers office qui sont sélectionnés par défaut, car ils sont 2ème dans la liste des filtres :
Application.GetOpenFilename("Textes purs, *.txt,Fichiers office, *.xls;*.doc;*.ppt" , 2)
Cette variante affiche comme titre de la boîte de dialogue à la place de ouvrir : Tasse de café :
FichierChoisi = Application.GetOpenFilename("Textes purs, *.txt", , "Tasse de café")
Cette variante permet de sélectionner plusieurs fichiers à la fois :
FichierChoisi = Application.GetOpenFilename("Textes purs, *.txt", , , , True)
Attention toutefois avec cette méthode car tout à coup, il faudra récupérer les noms de nos fichiers dans un tableau, comme ceci :
Sub ChoixFichier()
FichiersChoisis = Application.GetOpenFilename("Textes purs,
*.txt", , , , True)
For Ctr = 1 To UBound(FichiersChoisis)
MsgBox FichiersChoisis(Ctr)
Next
End Sub
Il est possible d'appeler la méthode apparentée GetSaveAsFilename
FichierCible = Application.GetSaveAsFilename
MsgBox FichierCible
La défférence principale est que le nom de fichier peut ne pas exister.
La variante suivante propose le dossier D:\Atelier, et le nom de fichier truc.xls. Lorsqu'on essaie, il met truc.xls entre guillemets ("truc.xls"), mais lors de son affichage avec MsgBox, les guillements disparaissent... Troublant...
FichierCible = Application.GetSaveAsFilename("d:\atelier\truc.xls")
MsgBox FichierCible
---