PB Utilisation Nom d'Objet en Variable

Bonsoir à Toutes et Tous,

En avant propos, merci à TOUS les membres de la communauté qui prendront le temps de lire ce message et plus particulièrement à celles / ceux qui y répondront ……

Concernant l'interprétation des éventuelles réponses, je possède un niveau, dira-t-on "éclairé en VBA ….

Voilà le problème :

Dan le cadre du développement d'une application sous EXCEL (2010), à titre de besoins professionnels, je souhaite utiliser plusieurs objets de type "IMAGELIST". Dans un POST précédent mais qui date fortement, j'en suis arriver à la conclusion que pour un usage facilité des fonctions de l'objet IMAGELIST, il était préférable d'utiliser et de placer cet Objet sur une feuille de Calcul (Sheet) plutôt que dans un USERFORM (Ce détail aura peut-être une incidence sur la solution au problème).

Je souhaiterai que les manipulations dans les différents IMAGELIST ( ajout, supprimer, renommer les images, exporter, etc ) puisse être faite par l'utilisateur.

Pour ce faire, il doit donc choisir l'Objet IMAGELIST associé à son action. Son choix se faisant depuis un USERFORM, disposant d'une Liste de Choix (COMBOLIST), dans laquelle figure TOUS les objets IMAGELIST figurant sur la Feuille de Calcul dédiée à cela.

L'alimentation du COMBOLIST se faisant par la récupération des Noms des Objets IMAGELIST existant sur la Feuille de Calcul dédiée au stockage des Images et où se trouve TOUS les IMAGELIST.

Cela fonctionne parfaitement, pas de problème, ci-dessous le Code s'y affairant.

[b][size=85]Private Sub UserForm_Initialize()

Dim ctl As Shape '*** Definition Variable OBJET dans la Feuille de Calcul

'*** INITIALISATION des COMBOLIST

Me.IM_CBX_Liste_IMAGELIST.Clear '*** Reinitialise le COMBOLIST de la Liste des IMAGELIST

For Each ctl In ThisWorkbook.Sheets("PARAMETRES").Shapes '*** BOUCLE sur TOUS les Objets présents dans la Feuille de Calcul

'*** Type=12 est un Objet de Type IMAGELIST,Type=1= Forme Dessin, Type=8= Bouton de Commande, etc ....

If ctl.Type = 12 Then '*** TEST si OBJET = IMAGELIST

Me.IM_CBX_Liste_IMAGELIST.AddItem ctl.Name '*** ALIMENTE le 1er COMBOLIST

End If

Next

'*** FIN INITIALISATION des COMBOLIST

End Sub

[/b][/size]

Arrive le problème ….. et en m'adressant à la Communauté, cela signifie que j'ai BEAUCOUP BEAUCOUP essayé et sutout pas trouvé la solution ……

En affichant le USERFORM, l'Utilisateur fait le choix de l'IMAGELIST dans le COMBOBOX, ce qui en code se traduit par la récupération d'une "Value" en Texte, que l'on assigne à une "Variable", jusque là pas de problème.

Mais maintenant, comment faire pour utiliser cette "Value" texte sous forme de variable pour pouvoir l'utiliser comme un nom d'OBJET ……. là je bloque …….

Ci dessous les bribes d'une version de mes essais …. mais cela ne fonctionne pas …… Objet du code, Afficher le nombre d'Images dans l'IMAGELIST sélectionné :

[b]Private Sub IM_CBX_Liste_IMAGELIST_Change()

Dim CHOIX_CBX_IMAGELIST As Object '*** Déclaration d'une variablede type Objet

Dim NB_IMAGES

Set CHOIX_CBX_IMAGELIST = Me.IM_CBX_Liste_IMAGELIST.Value '*** VALEUR du COMBOLIST choisie par l'Utilisateur (Liste des IMAGELIST)

'Option 1: Set CHOIX_CBX_IMAGELIST = Sheets("PARAMETRES").Controls(IM_CBX_Liste_IMAGELIST.Value)

'Option 2: Set CHOIX_CBX_IMAGELIST = Sheets("PARAMETRES").Shapes(IM_CBX_Liste_IMAGELIST.Value)

Set CHOIX_CBX_IMAGELIST = Sheets("PARAMETRES").Controls(IM_CBX_Liste_IMAGELIST.Value)

NB_IMAGES = CHOIX_CBX_IMAGELIST.ListImages.count

MsgBox (NB_IMAGES) '*** TENTATIVE d'Utilisation pour Afficher le Nombre d'Images dans l'objet IMAGELIST

Select Case Sheets("PARAMETRES").CHOIX_CBX_IMAGELIST.ListImages.count

Case Is = 0

Me.IM_AJOUTER_Image.Enabled = True

Me.IM_RENOMMER_Image.Enabled = False

Me.IM_SUPPRIMER_Image.Enabled = False

Me.IM_EXPORTER_Image.Enabled = False

Me.IM_TXT_Nbre_Images_Imagelist.Caption = "0"

Case Is > 0

Me.IM_AJOUTER_Image.Enabled = True

Me.IM_RENOMMER_Image.Enabled = True

Me.IM_SUPPRIMER_Image.Enabled = True

Me.IM_EXPORTER_Image.Enabled = True

Me.IM_TXT_Nbre_Images_Imagelist.Caption = Sheets("PARAMETRES").IMAGELIST_Application.ListImages.count

End Select

End Sub[/b]

Voilà, en espérant avoir été clair dans mes explications …….. avec un SUPER SUPER Merci aux membres de la communauté qui voudront bien se pencher sur mon problème et les pistes de solutions qu'ils évoqueront !!!!!!!

Cordialement.

Sweader ==> Un Utilisateur devenu dépressif à cause de ce problème !!!!

Bonjour,

à tester,

Set CHOIX_CBX_IMAGELIST = Sheets("PARAMETRES").DrawingObjects(Me.Controls(IM_CBX_Liste_IMAGELIST.Value))

Bonjour,

En l'absence de fichier il faut faire preuve de beaucoup d'imagination pour te suivre...

D'après ce que je crois comprendre il suffit de faire une table de correspondance "texte récupéré" => référence d'objet.

Après sous quelle forme tu fais ta table de correspondance ça je peux pas te dire, faute de connaissance précise de ton projet. Mais n'importe quel tableau, Array ou Dico peut faire l'affaire, le choix dépendra surtout du temps de réponse de ta fonction. Donc du nombre d'éléments à traiter...

?

A+

Bonjour,

En l'absence de fichier il faut faire preuve de beaucoup d'imagination pour te suivre...

D'après ce que je crois comprendre il suffit de faire une table de correspondance "texte récupéré" => référence d'objet.

Après sous quelle forme tu fais ta table de correspondance ça je peux pas te dire, faute de connaissance précise de ton projet. Mais n'importe quel tableau, Array ou Dico peut faire l'affaire, le choix dépendra surtout du temps de réponse de ta fonction. Donc du nombre d'éléments à traiter...

?

[EDIT] Bonsoir Isa, sorry !

A+

Bonsoir I20100 ou peut-être Vincent ??? …. lol …

Merci de ta réponse et contribution. Voici l'erreur en PJ, après la tentative de ta proposition .

GRRRR !!!!! En tout cas merci ….. d'essayer ….

Cordialement.

Pascal.

message erreur n 1

re,

à tester

Set CHOIX_CBX_IMAGELIST = Sheets("PARAMETRES").DrawingObjects(Me.IM_CBX_Liste_IMAGELIST.Value)

Bonsoir GALOPIN01,

Je comprends qu'il soit "difficile" de suivre littéralement et qu'un fichier soit plus simple à suivre.

Donc je joins le fichier ORIGINAL en ne conservant que le Principal du Problème ……

Pour accéder au USERFORM dont j'ai besoin d'utiliser un nom de variable en objet, il suffit de cliquer le bouton "Accès aux Fonctions de Gestion des IMAGELIST" sur la feuille "PARAMETRES".

Puis le problème intervient au niveau du choix dans la ComboBox : "Liste de Choix des IMAGELIST" ……

Par avance, merci de ton / Votre AIDE !!!!!

Pascal

image choix combolist

Bonsoir,

Essayer ceci

    Dim CHOIX_CBX_IMAGELIST As ImageList
    Dim liste_images  As ListImages
    Dim liste_image  As ListImage
    Dim image As StdPicture

    Set CHOIX_CBX_IMAGELIST = Sheets("PARAMETRES").OLEObjects(IM_CBX_Liste_IMAGELIST.Value).Object
    Set liste_images = CHOIX_CBX_IMAGELIST.ListImages
    nb_images = liste_images.Count
    For Each liste_image In liste_images
        Set image = liste_image.Picture
    Next liste_image

HOULALALALALA !!!!!!

Toutes mes plus SINCERES Félicitations et REMERCIEMENTS pour ce code qui fonctionne à merveille (une légère adaptation …).

Qui plus est dans un délai aussi rapide ……. un ENORME merci à toi, THEV !!!!

Du coup cela me débloque totalement ….. même si techniquement, je ne comprends pas bien le passage par OLEOBJECT ….

Si jamais à l'occasion et un peu de disponibilité, soit en réponse sur ce sujet, soit en MP, tu aurais l'amabilité de quelques explications technique, je suis preneur ……. Histoire de ne pas mourir "IDIOT" …..

En tout cas, BRAVO et une fois de plus mes plus sincères remerciements à toi ….. et à la communauté qui aura pris le temps de réfléchir et contribuer de son temps à mon problème !!!!

Merci THEV !!!

@+

'*** Type=12 est un Objet de Type IMAGELIST,

C'est plus général que cela..

Type=12 est un contrôle OLEOBJECT

voir la constante MsoShapeType = msoOLEControlObject = 12

Rechercher des sujets similaires à "utilisation nom objet variable"