IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

ImageList : manipulation basique [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Points : 204
    Points
    204
    Par défaut ImageList : manipulation basique
    Bonjour à tous,

    dans le cadre d'une application excel je dois présenter un tableau qui peut être trié par collonnes. Le tableau étant destiné à être locké en permanence et le niveau des utilisateurs étant moyen, j'ai fait le choix de leur présenter des CommandButton auxquel j'associe une image "flèche en haut", et "flèche en bas", histoire de laisser la chose intuitive.

    J'associe donc à l'évènement worksheet.acivate le chargement d'une ImageList de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ListeImages.ListImages.Add , "imUp", LoadPicture("FlecheHaut.bmp")
    ListeImages.ListImages.Add , "imDown", LoadPicture("FlecheBas.bmp")
    tout en sachant que ListeImage est déclaré As ListImages, bien entendu.

    Ma première question est : ayant parcouru en long en large et en travers ma seule source d'informations sur le sujet à travers le web, à savoir ce tuto, je ne trouve pas de réponse basique à la question : est-il possible de définir des chemins relatifs? parce que l'erreur que j'obtiens jusqu'à maintenant est file not found, alors que les fichiers bmp se trouvent à la racine du classeur vous pouvez me croire.

    j'associe donc la propriété "picture" d'un CommandButton (ici, CbTriColC) à un item de cette ImageList

    d'autre part, je manque cruellement d'informations pour manipuler, par exemple, un item de la list avec son libellé (ici, "imDown"' par exemple). Je ne sais pas commentr faire, donc voici la méthode choisie :

    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
    Public Sub CbTriColC_Click()
    If StopEvent Then Exit Sub
        Ini_Sub
        NomProc = "CbTriColC_Click"  'Gestion des erreurs (procédure en cours)
        If TP_Exploit Then On Error GoTo Erreur
     
        'Si le bouton est en mode descendant
        If w_Tranches.CbTriColC.Caption = "down" Then
        w_Tranches.CbTriColC.Caption = "up"
        w_Tranches.CbTriColC.Picture = ListeImages.ListImages(1).Picture
        Else
        w_Tranches.CbTriColC.Caption = "down"
        w_Tranches.CbTriColC.Picture = ListeImages.ListImages(2).Picture
        End If
     
     
     
    Sortie:
        Fin_Sub
        Exit Sub
    Erreur:
    ' Gestion globale des erreurs
        Call ErreurGrave("CbTriColC_Click")
        GoTo Sortie
    End Sub
    évidemment, ça me crache une erreur, et la clarté des messages d'erreur de vba excel étant légendaire, je me remet à votre savoir/sagesse (cf. rayer la mention inutile) pour éclairer ma lanterne.

    Merci.

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Tout d'abord attention avec Activate, celui ci est déclenché a chaque fois que l'onglet est slectionné, mais bon ne connaissant pas le code, peut etre est ce l'effet escompté.

    Pour ce qui est du chemin relatif, il te suffit de faire reference au chemin de ton classeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim PathWb as string
     
    PathWb = thisworkbook.path
     
    ListeImages.ListImages.Add , "imUp", LoadPicture(PathWb & "\FlecheHaut.bmp")
    Pas testé, mais ce doit être dans ce gout la.

    Pour l'utilisation des Key, c'est super simple, le paramètre Index de la fonction ListImages est polymorphe, elle accepte donc aussi bien un index numérique, qu'une chaine de caractères.

    ainsi tu peux écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture = ImageList1.ListImages(1).Picture
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture = ImageList1.ListImages("imUp").Picture

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre actif Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Points : 204
    Points
    204
    Par défaut
    Merci de ta réponse.

    Avec ce code :

    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
    Private Sub Worksheet_Activate()
     
       Dim NomProcApp   As String
     
       NomProcApp = NomProc
       NomProc = "Worksheet_Activate"
       If StopEvent Then Exit Sub
       Ini_Sub
     
    'Attribuer à une liste d'images les sprites pour les boutons de tri
    ListeFleches.ListImages.Add , , LoadPicture(ThisWorkbook.Path & "\FlecheHaut.bmp")
    ListeFleches.ListImages.Add , , LoadPicture(ThisWorkbook.Path & "\FlecheBas.bmp")
     
    Sortie:
       NomProc = NomProcApp
       Fin_Sub
       Exit Sub
    Erreur:
       Call ErreurGrave("Worksheet_Activate")
       Resume Sortie
    End Sub
    il me crache l'erreur suivante :

    "Variable objet ou variable de bloc with non définie"

    ce que je ne sais absolument pas à quoi cela correspond. Je n'ai pas de bloc with du tout dans ce code. Quid?

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Ouep
    Et il te la "crache" ou ton erreur? Par ce que j'avoue ne pas trop saisir ce que tu fais dans ton code

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre actif Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Points : 204
    Points
    204
    Par défaut
    il me la "crache" au niveau de l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListeFleches.ListImages.Add , , LoadPicture(ThisWorkbook.Path & "\FlecheHaut.bmp")
    ce que je souhaite faire c'est charger dans une images list ces deux flèches, une fois que l'utilisateur clique sur un cmdbutotn avec comme image la flèche "haut" l'image flèche "bas" se charge à sa place, et vice-versa. Pour moi c'est ce qui a de plus intuitif pour un utilisateur basique.

    peut-être m'y prends-je de la mauvaise manière?

  6. #6
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Puisque les images sont petit et donc ne feront pas enfler ton fichier excel, pourquoi tu ne les rajoutes pas directement dans ta listimages au moment de la création?

    1/ Dans Excel, tu vas dans le menu "Boite à outils contrôles"
    2/Tu clique sur le bouton 'Autres contrôles" l'icône représente un clou et un marteau
    3/Dans la liste de composant tu cherches "Microsoft ImageList contrôle"
    4/tu poses se composant sur ta feuille
    5/Clique droit sur le composant -> ObjectImageListCtrl -> Propriétés
    6/Dans la fenetre ui s'ouvre tu rajoutes tes images et defini tes Key

    comme ça tu auras plus de soucis avec tes images, inutile de les trimballer a coté de ton fichier

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Complément
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CommandButton1_Click()
    If CBool([A1]) Then
        CommandButton1.Picture = ImageList1.ListImages("FlecheUp").Picture
    Else
        CommandButton1.Picture = ImageList1.ListImages("FlecheDown").Picture
    End If
     
    [A1] = Not CBool([A1])
     
    End Sub
    dans ThisWorkBook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_Open()
    'Initialisation du bouton
    Feuil1.CommandButton1.Picture = Feuil1.ImageList1.ListImages("FelcheUp").Picture
    'ici tu mets une cellule cachée sous le bouton
    Feuil1.[A1] = CStr(True)
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Membre actif Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Points : 204
    Points
    204
    Par défaut
    Parfait ! merci !

    juste une dernière question, à quoi sert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.[A1] = CStr(True)
    à ce que j'ai pu voir CStr(True) renvoie "true"... comprends pas, ça marche très bien sans.

    en tout cas, merci beaucoup

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    C'est pour initialiser la valeur de la cellule a une valeur renvoyant True, ça évite d'avoir a cliquer 2 fois sur le bouton avant qu'il ne change d'état.
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/07/2014, 10h09
  2. Manipulation des handle contexte
    Par rockbiker dans le forum DirectX
    Réponses: 1
    Dernier message: 09/05/2003, 18h51
  3. Réponses: 2
    Dernier message: 18/01/2003, 17h06
  4. Fonctions de manipulation des chaines et des dates
    Par Fares BELHAOUAS dans le forum Débuter
    Réponses: 3
    Dernier message: 09/11/2002, 22h43
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo