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 :

Supprimer une image d'un UserForm après l'avoir chargée [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut Supprimer une image d'un UserForm après l'avoir chargée
    Bonjour,

    C'est encore moi avec mes images !
    Bon... J'ai un UserForm dans lequel je charge 32 images.
    Par la suite, je souhaite pouvoir les "retirer" quand je clique dessus.

    Ainsi, grâce à l'aide de Robert et Patrick, j'initialise mon UserForm de la sorte :
    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
    Option Explicit
     
    Dim MesImages(1 To 32) As New Classe1
     
    Private Sub UserForm_Initialize()
    Dim i As Byte
     
    For i = 1 To 32
        Set MesImages(i).Bt = Me.Controls("Image" & i)
        MesImages(i).Id_Joueur = Int((i - 1) / 8 + 1)
    Next i
     
    Call Load_image
     
    End Sub
    Je charge mes images (dans un module) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Load_image()
    Dim i As Byte, j As Byte
     
    For j = LBound(oJoueur, 1) To UBound(oJoueur, 1)
        For i = LBound(oJoueur, 2) To UBound(oJoueur, 2)
            UserForm1.Controls("Image" & (j - 1) * 8 + i).Picture = LoadPicture("mon_chemin" & oJoueur(j, i).Nombre & "_" & oJoueur(j, i).Couleur & ".jpg")
            UserForm1.Controls("Image" & (j - 1) * 8 + i).Tag = oJoueur(j, i).Nombre & "_" & oJoueur(j, i).Couleur
            UserForm1.Controls("Image" & (j - 1) * 8 + i).PictureSizeMode = 1
        Next i
    Next j
     
    End Sub
    Et quand je clique dessus (dans un module de classe) :
    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
    Public WithEvents Bt As MSForms.Image
    Public Id_Joueur As Byte
     
    Private Sub Bt_Click()
    Dim oStr() As String
     
    'Bt.Picture = LoadPicture()
    MsgBox Bt.Picture 'Premier point
    Bt.Picture = Nothing
    MsgBox Bt.Picture 'Second point
    Bt.PictureSizeMode = 0
    oStr = Split(Bt.Tag, "_")
     
    UserForm1.Controls("Carte_J" & Id_Joueur).Picture = LoadPicture("mon_chemin" & oStr(LBound(oStr)) & "_" & oStr(UBound(oStr)) & ".jpg")
    UserForm1.Controls("Carte_J" & Id_Joueur).PictureSizeMode = 1
     
    Call Poser_carte(oStr(LBound(oStr)), oStr(UBound(oStr)), Id_Joueur)
     
    'MsgBox Id_Joueur
     
    End Sub
    Or, quand j'applique la méthode Bt.Picture = LoadPicture("") ou Bt.Picture = LoadPicture() ou Bt.Picture = Nothing l'image ne disparaît pas "physiquement"... J'entend par là que je peux toujours la voir... Cependant, il semble que le lien entre mon image et le UserForm soit bien supprimé...

    Dans le code précédent, j'ai précisé deux commentaires.
    Le 'Premier point me permet de récupérer une valeur pour m'assurer que l'image est bien sétée :
    Nom : exe1.png
Affichages : 1398
Taille : 2,5 Ko
    Ensuite, je tente de supprimer l'image et là, erreur :
    Nom : exe2.png
Affichages : 1587
Taille : 4,8 Ko
    ... sur la ligne :
    Nom : exe3.png
Affichages : 1405
Taille : 3,6 Ko

    Donc je pense bien que l'image n'est plus liée mais... elle est toujours visible...
    Nom : exe4.png
Affichages : 1468
Taille : 9,8 Ko
    Qu'est-ce que je fais de mal ?

    Par avance, je vous remercie et reste disponible pour tout complément !

    Cordialement,
    Kimy

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    essaie un repaint, des fois c'est simplement une surcharge de memoire graphique

    cpendant ceci me gene un peu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MesImages(i).Id_Joueur = Int((i - 1) / 8 + 1)
    c'est .bt qu'il devrait y avoir
    c'est peut etre ce qui explique l'errer ici
    Or, quand j'applique la méthode Bt.Picture = LoadPicture("") ou Bt.Picture = LoadPicture() ou Bt.Picture = Nothing l'image ne disparaît pas
    puisque tu charge pas mesimages(x).bt mais mesimages(x).idjoueur ce qui est dépourvu de sens donc ta classcontrol"bt" n'est pas instancier tout du moins correctement
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Une astuce en créant une image vide (Image3).
    Essayez le code suivant (UserForm1, Image1, Image2, Image3). Dans mon exemple, les images sont stockés dans le UserForm mais on peut tout aussi bien les stocker ailleurs et les monter avec LoadPicture.
    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
    Private Sub Image1_Click()
    Static passe% 'pour illustrer l'exemple
     
    If passe% = 0 Then
      Image1.Picture = Image3.Picture
      passe% = 1
    Else
      Image1.Picture = Image2.Picture
      passe% = 0
    End If
     
    Me.Repaint
    End Sub
     
    Private Sub UserForm_Initialize()
    Image1.Picture = Image2.Picture
    End Sub
    Fichiers attachés Fichiers attachés

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unload Bt
    Set Bt = Nothing
    !

    Ou

    Dernière modification par Invité ; 25/09/2015 à 23h59.

  5. #5
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour à tous !

    Comme d'habitude, je vous remercie vivement pour vos réponses !

    @Patrick : le Repaint fonctionne parfaitement ! Je pensais bien que c'était une histoire de cache et ne connaissait pas cette propriété.
    En revanche, je ne comprends pas ta remarque concernant MesImages(i).Id_Joueur = Int((i - 1) / 8 + 1).
    En effet, dans mon module de classe j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public WithEvents Bt As MSForms.Image
    Public Id_Joueur As Byte
    Sauf, si j'ai très mal compris (ce qui n'est ABSOLUMENT pas à exclure ! ), j'ai bien deux variables, Bt As MSForms.Image, avec les événements et Id_Joueur As Byte.
    Donc, je pense que c'est bon. Ca fonctionne bien comme ça, mais... peut-être un coup de bol !

    @PMO2017 : c'est la méthode Repaint qui me fallait principalement que tu utilises également, d'ailleurs. Je te remercie pour tes conseils !

    @Robert : La méthode Unload ne fonctionne pas. Autant sur Bt que sur Bt.Picture.
    Saurais-tu pourquoi ?

    Merci encore à tous ! Sujet !

    Cordialement,
    Kimy

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    J'ai trouvé ça, pas testé:picBox.clear

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/09/2008, 12h27
  2. Réponses: 3
    Dernier message: 09/11/2006, 18h22
  3. impossible de supprimer une image!
    Par pierrot67 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/09/2006, 15h03
  4. Réponses: 2
    Dernier message: 26/06/2006, 15h34
  5. comment supprimer une image ?
    Par Death83 dans le forum Langage
    Réponses: 4
    Dernier message: 30/01/2006, 11h49

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