Bonjour à tous,
Comme le titre l'indique je cherche à créer la liste des noms des polices de caractères disponibles sous office puis de la mettre dans un combobox.
Une idée, parceque là je sèche complètement ?
Bonjour à tous,
Comme le titre l'indique je cherche à créer la liste des noms des polices de caractères disponibles sous office puis de la mettre dans un combobox.
Une idée, parceque là je sèche complètement ?
Est-ce que tu cherches la liste des toutes les polices installées dans Windows ou la liste des polices utilisées dans un documents ?
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
Bonjour,
Je cherche la liste des polices windows
En VBA, ça ne va pas être facile. Le plus difficile sera de trouver dans quelle bibliothèque d'objets se trouve cette collection.
En tout cas, ce n'est pas dans la bibliothèque Excel.
Tu auras peut-être plus de chance en posant la question dans la rubrique "Général Visual Basic".
A moins que ton but soit simplement de permettre à l'utilisateur de choisir une police de caractère et, dans ce cas, peut-être que l'appel à la fenêtre Font (Diaglogs(xlDialogFont)) suffirait.
https://docs.microsoft.com/fr-FR/off.../excel.dialogs
https://docs.microsoft.com/fr-FR/off...lbuiltindialog
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
Bonjour,
Les polices sont dans le dossier : Windows - Fonts
donc avec la fonction DIR de VBA tu dois pouvoir lister les fichiers de polices de caractères
ceci n'est qu'une idée
A+
Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)
n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !
Bonjour,
Voici du code qui pourrait te servir :
Source
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Dim ligne Sub arborescence() Application.ScreenUpdating = False racine = "C:\Windows\Fonts" If racine = "" Then Exit Sub Range("A1:E20000").ClearContents Range("A1").Select Set fs = CreateObject("Scripting.FileSystemObject") Set dossier_racine = fs.GetFolder(racine) ligne = 1 Lit_dossier dossier_racine, 1 End Sub Sub Lit_dossier(ByRef dossier, ByVal niveau) Cells(ligne, 1) = String(4 * (niveau - 1), " ") & "[" & dossier.Path & "]" Cells(ligne, 1).Interior.ColorIndex = 36 ligne = ligne + 1 For Each f In dossier.Files Cells(ligne, 1) = String(4 * niveau, " ") & f.Name Cells(ligne, 1).Interior.ColorIndex = xlNone ligne = ligne + 1 Next For Each d In dossier.SubFolders Lit_dossier d, niveau + 1 Next End Sub
Bien à toi.
Dans Windows/Font se trouve les fichiers de police mais pas les noms de polices.
Il y a au moins deux inconvénients majeur à tirer une liste depuis ce répertoire.
D'abord, beaucoup de fichiers ont des noms qui sont différents du nom de la police. Le nom de fichier est souvent un abrégé mais parfois, ça n'a même pas de rapport (par exemple "TT1018M" pour "Freehand521").
Ensuite, le nombre de fichier est plus important que le nombre de police car certaines polices ont plusieurs fichiers pour permettre les options Gras, Italique, light, condensé, etc.
La seule façon d'avoir la vraie liste de police est d'aller piocher dans la base de registres.
Mais ça, en VBA, ça ne doit pas être simple (ou plutôt, ça n'est pas très documenté).
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
@ Menhir
Je suis d'accord sur le principe mais quand je vais sous WINDOWS-Fonts (Widows 7) j'ai ceci
Pourquoi ne pourait-on pas récupérer ce "Nom" que j'ai en première colonne ?
A+
Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)
n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !
Ce que tu vois-là est une interprétation de l'Explorateur Windows.
Depuis les versions postérieures à XP, l'explorateur présente de manière différente le contenu pour certains répertoires, entre autre pour Windows/Font.
Ce que tu montres, ce ne sont pas les nom de fichiers mais les noms de polices.
Parce que la fonction Dir() que tu conseille ne récupèrera pas le nom de police mais le nom de fichier.Pourquoi ne pourait-on pas récupérer ce "Nom" que j'ai en première colonne ?
Dans ton explorateur Windows, fais :
Organiser > Disposition > Coche "Barre de menus"
Menu Affichage > Choisir les détail > Coche "Noms de fichiers de police"
Une nouvelle colonne apparait qui présente les noms de fichiers. Tu peux voir les différences avec les noms de polices.
Autre méthode, tu vas dans l'invite de commande, la fenêtre MS-DOS (si tu ne l'as pas sur ton bureau, tu peux y accéder dans le groupe "Accessoires" du menu démarrer).
Tu fais cd \Windows\Fonts pour te placer dans le répertoire des polices puis dir pour avoir la liste des fichiers.
Tu verras que c'est très différent de ce qu'on obtient dans la fenêtre classique de Windows.
Mais le plus simple pour t'en convaincre est que tu lances cette petite macro :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Sub ListFont() Dim nom As String, Ligne As Long Ligne = 1 nom = Dir("\windows\fonts\*.*") While Len(nom) > 0 Cells(Ligne, 1).Value = nom Ligne = Ligne + 1 nom = Dir() Wend End Sub
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
J'ai fini par trouver:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 Sub Polices_listing() Dim i As Long Dim TabPolice() As String 'Barre d'outils Set FontList = Application.CommandBars("Formatting").FindControl(ID:=1728) 'Mettre le nom des polices dans un tableau ReDim TabPolice(FontList.ListCount) For i = 1 To FontList.ListCount TabPolice(i) = FontList.List(i) Next 'Mettre le nom des polices sur une feuille Range("E:E").Clear For i = 1 To FontList.ListCount Worksheets("Stock").Cells(i, 5).Value = TabPolice(i) Next End Sub
Je ne comprends pas l'intérêt de passer par la variable TabPolice au lieu d'utiliser sinplement FontList dans la dernière boucle ???
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager