besoins de stoker plus de 350 image(icon)

patricktoulon

XLDnaute Barbatruc
bonsoir a tous
je voulais lister les imagemso du ruban dans un listview mais malheureusement le control imagelist ne peut en contenir que 350

quelqu'un aurait une idée pour pallier a ce problème


VB:
Private Sub UserForm_Activate()
    For i = 2 To 350    'Cells(Rows.Count, 1).End(xlUp).Row
        Me.ImageList1.ListImages.Add , "A" & i - 1, Application.CommandBars.GetImageMso(Cells(i, 1).Text, 40, 40)
    Next

    With ListView1
        .SmallIcons = ImageList1 'association de la liste d image a la listview
     
        With .ColumnHeaders: .Clear: .Add , , "icon", 150: End With

        For i = 1 To 349
            .ListItems.Add , , Cells(i + 1, 1).Text
            .ListItems(i).SmallIcon = "A" & i
        Next

         .View = 3

    End With
End Sub
 

Pièces jointes

  • listview imagemso viewer.xlsm
    39.7 KB · Affichages: 19
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
autant pour moi c'est une erreur provoqué par une idmso
VB:
Private Sub UserForm_Activate()
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        On Error Resume Next
        Me.ImageList1.ListImages.Add , "A" & i - 1, Application.CommandBars.GetImageMso(Cells(i, 1).Text, 40, 40)
        If Err.Number > 0 Then
            Err.Clear
            Me.ImageList1.ListImages.Add , "A" & i - 1, Application.CommandBars.GetImageMso(Cells(2, 1).Text, 40, 40)
        End If

    Next

    With ListView1
        .SmallIcons = ImageList1    'association de la liste d image a la listview

        With .ColumnHeaders: .Clear: .Add , , "icon", 150: End With

        For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row - 1
            .ListItems.Add , , Cells(i + 1, 1).Text
            .ListItems(i).SmallIcon = "A" & i
        Next

        .View = 3

    End With
End Sub
 

patricktoulon

XLDnaute Barbatruc
Bonjour Thierry
voila la boite de dialog Icon aboutie
au lieu de charger les 1133 icon sans doublons dans la liste je les charge en fonction de la premiere lettre (26 bouton lettre plus rapide a charger)
j'ai ajouter le moteur de recherche selon l'expression saisi dans le textbox (click sur la loupe)
je l'ai construite sous deux versions différente pour ceux qui ne veulent pas installer le listview

tu me diras ce que tu en pense
 

Pièces jointes

  • Icon dialog 1 avec listview.xlsm
    47.5 KB · Affichages: 11
  • icon dialog2 sans listview.xlsm
    45.7 KB · Affichages: 13

_Thierry

XLDnaute Barbatruc
Repose en paix
Hello Patrick

Tu es un grand malade ;), Bravo !
Tu va chercher toujours de ces trucs et barbatrucs !

VB:
Private Sub Btx_Click(): GeticonExcelDialog.Caption = "liste des noms commencants par " & Btx.Caption: remplissage Btx.Caption: End Sub    'event for All  button lettre
J'ai encore du mal à digérer comment des Label finissent par déclencher cette ligne BTX .... Scratch- Scratch Intense derrière la tête !!!

Comme développeur, évidemment je cherchais comment améliorer pour récupérér l'Icon Name sans le taper ...

1592564238545.png


Et donc j'ai modifié ton code pour le lancement comme suit :
VB:
Sub test()
Dim objClipBoard As MSForms.DataObject
Dim IconName As String

Set objClipBoard = New MSForms.DataObject
IconName = GeticonExcelDialog.GetIconMsoName
MsgBox IconName & vbCrLf & "Ready in ClipBoard"

With objClipBoard
.SetText CStr(IconName)
.PutInClipboard
End With

Range("H1") = IconName 'Là j'ai bien le nom !
End Sub

Et là mon Excel 2013 PRO PLUS 32 (Win 8.1 64) me colle cette saleté :
1592565204117.png

(Ou rien du tout dans Notepad)

Ca n'a rien à voir avec ton programme, mon excel fait ca sur n'importe quoi avec MSForms.DataObject, pourtant la librairie est bien référencée...

Enfin bon ce n'est pas grave, je regarderai sur d'autres machines.
Mais en tout cas chapeau bas !

Merci de nous faire profiter de ton travail.
Bien à toi
@+Thierry
 

patricktoulon

XLDnaute Barbatruc
re
btx et btc sont des events dynamiques
EXACTEMENT !!
de la même manière que dans un module classe
sauf que tout est dans le userform (c'est la même méthode que mon calendrier)
puisque après tout les modules userform sont des modules classe a part entière
private sub btx_click()
remplace
private sub label1_click()
private sub label2_click()
private sub label3_click()
private sub label4_click()
etc...etc.. jusqu'à 26


et la public function geticonname fait office de loader , show ,et enfin return quand une selection est faite et renvoie donc la variable valeur lors du hide puis enfin le unload

voila comment on transforme un userform non pas en applicatif mais en dialog modal
comme n'importe quel dialog (msgbox , les dialog excel , les dialog picker ,etc...)
si tu comprends pas je te fait un exemple plus simple avec 3 boutons il n'y a pas de soucis

pour le data object
peut etre une histoire d'encodage uft8 ou autre
mais je ne vois pas l’Intérêt de passer par lui

TOUT SIMPLEMENT
Range("H1") = GeticonExcelDialog.GetIconMsoName

comme je l'ai dit l'userform devient a la fois une fonction , un dialog qui renvoie une valeur
et surtout TOUT TOTOMATIC' ;)
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Patrick

Oui tout à fait l'exemple sur trois CommandButtons sur un classeur vierge est tout à fait parlant !
Bien vu........

J'entrevois déjà plein de possibilités dans certaines opérations, dommage que je ne savais pas avant !

Encore merci
@+Thierry
 

Discussions similaires

Réponses
6
Affichages
298

Statistiques des forums

Discussions
312 176
Messages
2 085 965
Membres
103 069
dernier inscrit
jujulop