Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EXTRACTION DES ICÔNES DES MENU D'OFFICE


Information sur la source

Catégorie :VBA Classé sous : office, icone, image, boutons, barredoutils Niveau : Débutant Date de création : 11/07/2006 Date de mise à jour : 01/11/2006 17:43:45 Vu / téléchargé: 14 146 / 1 125

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note


Description

Chose demander plusieurs fois sur le forum.
J'ai donc décider de faire un petit code simple qui permet cela.
Mais, ce code ne marche que pour office Xp, 2002, 2003, 2007.

Pour office 2000, j'ai fait le code en vb6 car c'était plus simple à faire et plus rapide.
Donc, le projet est dans le zip (il faudra ajouter les références "Microsoft Excel Object Library" et "Microsoft Office Object Library" pour que ca marche.
 

Source

  • Option Explicit
  • Public Sub GetOfficeButton()
  • ' Affiche une boîte de dialogue pour choisir le dossier d'extraction
  • Dim Dlg As Office.FileDialog
  • Set Dlg = Application.FileDialog(msoFileDialogFolderPicker)
  • Dlg.AllowMultiSelect = False
  • Dlg.Show
  • Dlg.InitialFileName = Application.ThisWorkbook.Path & "\"
  • If Dlg.SelectedItems.Count > 0 Then
  • Const FileExt As String = ".bmp"
  • Const nbFileDigit As Integer = 5
  • Dim ExtractDirectory As String: ExtractDirectory = Dlg.SelectedItems(1)
  • If Right$(ExtractDirectory, 1) <> "\" Then ExtractDirectory = ExtractDirectory & "\"
  • ' Bouton temporaire
  • Dim TblBtn As Office.CommandBarButton
  • Set TblBtn = Application.CommandBars(1).Controls.Add(Office.msoControlButton)
  • ' Extraction
  • On Error Resume Next
  • Dim nBtn As Integer
  • Do ' Comme on ne connait pas le nombre de boutons
  • nBtn = nBtn + 1 ' Incrémente le nombre de boutons trouvés
  • TblBtn.FaceId = nBtn ' Attribut l'image du bouton
  • If Err.Number = -2147467259 Then Exit Do ' Si le bouton n'a pas été trouvé (on est arrivé à la fin), on quitte la boucle
  • Dim BtnId As String: BtnId = FormatInt(nBtn, nbFileDigit) ' Formatage du nom de l'image
  • SavePicture TblBtn.Picture, ExtractDirectory & BtnId & FileExt ' Enregistre l'image
  • Loop
  • Err.Clear
  • On Error GoTo 0
  • MsgBox "Terminer" & vbNewLine & nBtn & " images extraites.", vbInformation, "GetOfficeButton"
  • TblBtn.Delete ' Supprime le bouton temporaire
  • End If
  • End Sub
  • Private Function FormatInt(ByVal n As Integer, ByVal Lenght As String) As String
  • Dim sn As String: sn = CStr(n)
  • If Len(sn) < Lenght Then
  • FormatInt = String(Lenght - Len(sn), "0") & sn
  • Exit Function
  • End If
  • FormatInt = n
  • End Function
Option Explicit

Public Sub GetOfficeButton()

  ' Affiche une boîte de dialogue pour choisir le dossier d'extraction
  Dim Dlg As Office.FileDialog
  Set Dlg = Application.FileDialog(msoFileDialogFolderPicker)
  Dlg.AllowMultiSelect = False
  Dlg.Show
  Dlg.InitialFileName = Application.ThisWorkbook.Path & "\"
  If Dlg.SelectedItems.Count > 0 Then
  
    Const FileExt As String = ".bmp"
    Const nbFileDigit As Integer = 5
  
    Dim ExtractDirectory As String: ExtractDirectory = Dlg.SelectedItems(1)
    If Right$(ExtractDirectory, 1) <> "\" Then ExtractDirectory = ExtractDirectory & "\"

    ' Bouton temporaire
    Dim TblBtn As Office.CommandBarButton
    Set TblBtn = Application.CommandBars(1).Controls.Add(Office.msoControlButton)

    ' Extraction
    On Error Resume Next
    Dim nBtn As Integer
    Do ' Comme on ne connait pas le nombre de boutons
      nBtn = nBtn + 1 ' Incrémente le nombre de boutons trouvés
      TblBtn.FaceId = nBtn ' Attribut l'image du bouton
      If Err.Number = -2147467259 Then Exit Do ' Si le bouton n'a pas été trouvé (on est arrivé à la fin), on quitte la boucle
      Dim BtnId As String: BtnId = FormatInt(nBtn, nbFileDigit) ' Formatage du nom de l'image
      SavePicture TblBtn.Picture, ExtractDirectory & BtnId & FileExt ' Enregistre l'image
    Loop
    Err.Clear
    On Error GoTo 0
      
    MsgBox "Terminer" & vbNewLine & nBtn & " images extraites.", vbInformation, "GetOfficeButton"
    
    TblBtn.Delete ' Supprime le bouton temporaire
  End If
End Sub

Private Function FormatInt(ByVal n As Integer, ByVal Lenght As String) As String
  Dim sn As String: sn = CStr(n)
  If Len(sn) < Lenght Then
    FormatInt = String(Lenght - Len(sn), "0") & sn
    Exit Function
  End If
  FormatInt = n
End Function

Conclusion

Avec ca on à 15934 icônes pour office 2007.
Pour l'amélioration, faudra filtrer les images ; la moitié des images extraites sont vides !!! (les menus sans icônes)
Pour le projet vb6, il détecte les images vides et les sauvegarde pas. Reste a le faire pour le projet vba.
Testé sous office 2000, 2003 et 2007.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

14 juillet 2006 20:52:02 :
Ajoute du projet vb6 pour la compabilité avec office 2000.
01 novembre 2006 17:43:45 :
Ajout d'une progression

Commentaires et avis

signaler à un administrateur
Commentaire de PCPT le 11/07/2006 22:57:08 administrateur CS

(ne fonctionne apparemment pas sous Excel 2000)

signaler à un administrateur
Commentaire de littlemaelstrom le 12/07/2006 08:59:12

Je confirme, cela ne fonctionne pas sous Office 2000 à cause du "Office.FileDialog" qui n'existe pas.

Dommage car c'était une très bonne idée. Peut-être qu'il existe une fonction équivalente à FileDialog dans le vba de excel 2000 qui pourrait faire l'affaire ?

Merci quand même pour ce code !

signaler à un administrateur
Commentaire de PCPT le 12/07/2006 09:15:41 administrateur CS

chemin remplaçable (voir chemin du dialogbox par défaut), c'est après que c'est gênant ...

signaler à un administrateur
Commentaire de Charles Racaud le 12/07/2006 11:56:18

Merci pour votre constatation, je corrige ca si je trouve un office 2000 dans les parages.
Oui, sinon, y'a la possibilité de remplacer le chemin  par une constante, c'est pas un problème, reste juste à savoir si le reste marche.

signaler à un administrateur
Commentaire de PCPT le 12/07/2006 12:18:53 administrateur CS

(rappel : sous Excel 2000) à part les 2 constantes, tout virer avant le comm :
' Bouton temporaire

y mettre en dessous :
Dim ExtractDirectory As String
ExtractDirectory = Application.ThisWorkbook.Path & "\"

l'erreur (malgré le On Error) est sur :
SavePicture TblBtn.Picture, ExtractDirectory & BtnId & FileExt

est sélectionnée la propriété ".Picture" (Méthode introuvable)

sinon c'est la 2e fois que je lance VBA...
à défaut de pouvoir regarder tes sources en DotNet... quelle déception ^^
++

signaler à un administrateur
Commentaire de Charles Racaud le 12/07/2006 18:36:10

Bon, après quelques essais:
La boite de dialogue peut être remplacer par APIs
Par contre, pour la propriété Picture qui n'existe pas, elle peut être remplacer par la méthode CopyFace qui place l'image dans le presse-papier, mais pour la récupéré, c'est une autre histoire.
L'objet ClipBoard n'existe pas en VBA, et les APIs, galère galère, ca ne donne rien de bon.

Voilà, je continue toujours à chercher.

Hhaa, ce .net si différant du vb6 ...

signaler à un administrateur
Commentaire de Charles Racaud le 14/07/2006 20:54:04

Voila une maj:
Le projet vb6 permet d'extraire et de filtrer les images pour office 2000.

Merci à PCPT pour son aide.

signaler à un administrateur
Commentaire de Exploreur le 01/11/2006 15:16:36

salut,

c'est exactement ce que je chercher.
9/10
A+
Exploreur

signaler à un administrateur
Commentaire de Exploreur le 01/11/2006 16:11:17

Serait cool que tu mettes une progress abr pour avoir l'avancement de l'extration des icones...j'ai eu + de 10000 fichiers et je me demandais si le prog avait planter !Lol.
Serait bien aussi de pouvoir enregistrer les extractions dans un répertoire choisi par l'utilisateur au lieu de la faire dans le répertoire choisi pour faire commencer l'extraction.
A+
Exploreur

signaler à un administrateur
Commentaire de Charles Racaud le 01/11/2006 16:31:04

Ok, merci pour tes commentaires.
Je vais reprendre un peu tout ca.

signaler à un administrateur
Commentaire de Pym Corp le 29/11/2006 11:38:23

Tu pourrais faire une version .NET qui conserve les canaux alpha ?
Les images ressortent sur fond noir :(
Une sortie en .png ou .ico serait cool :)

signaler à un administrateur
Commentaire de Charles Racaud le 29/11/2006 21:47:04

Oui, je verrai ca. C'est vrai qu'on pourrait faire un meilleur traitement. Par contre, ca jouera  sur la rapidité de l'extraction.
__
Kenji

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Image listbox [ par Lokki ] Bon je suis entrein de faire un ti logiciel mais jaimerais savoir comment faire pour mettre un icone ou image ou tout autre dans une list box ! exempl urgent: Icones et Boutons [ par sonnyc ] Sur le controle Bouton, les icones sont placés automatiquement au milieu mais est ce que c'est possible de mettre un icone sur la gauche (ou la droite Aider moi a inserer une image ou icone dans un ritch text SVP [ par Pheniar ] J' aimerais integrer une icone ou une image dans un ritch text manuelement et non en drag & drop,si certain me comprenne.Merci a toutes les solutions ### {{{ une aide sur les boutons avec une image }}} ### [ par ayperos ] je voudrais connetre la procedure pour mettre une image sur un bouton sur vb (je sais c surment une question bette, mais je debutte, et je n'ai pas d' affichage icone dans un toolbar [ par snook ] Bonjour,J'ai un probleme d'affichage d'icone dans les boutons detoolbar:1- j'associe une ImageList a ma barre d'outils.2- je charge les icones à parti Cherche bouton office 2000/XP [ par Seb_d_angers ] Bonjour,je cherche désespérement à récupérer une bibliothèque d'icone office 2000 ou XP (icone OUVRIR, IMPRIMER, GRAS...)pour l'insérer dans mon appli Pbl d'icone image list - toolbar [ par themaste ] Bonjour a tous!J'ai un pbl avec mes icones.En fait, j'ai mis ds mon imagelist des icones style win XP (toute bell et plein de couleur etc).J'associe d image quadrillée: paramétrer des boutons dans cette image [ par philtor ] je cherche comment réaliser un objet paramétrable qui permet de placer des boutons dans une image quadrillée. la taille des boutons correspond à la la Comment Mettre une image dans un menu (Urgent) [ par Fredo ] Comment mettre une image dans un menu.(Comme dans VB lorsque l'on clique sur fichier il y a une liste de commande et à côté de certaines il y a une ic Problème simple d'icone ! HELP ! [ par bubble44 ] Bon j'ai honte mais j'arrive pas a trouver un programme de conversion potable (peut etre parce que mon image bmp a un nombre de couleurs qui lui plait


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,530 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.