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 :

Afficher x images selon x [XL-MAC 2011]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Afficher x images selon x
    Bonjour,

    Je suis actuellement en train de réaliser un programme sous visual basic et j'aurai besoin de votre aide concernant l'affichage des images.
    En effet, j'aimerai afficher X images les unes en dessous des autres selon la valeur d'une cellule, puis ensuite avoir Y cette colonne d'images selon la valeur d'une deuxième cellule.

    Je précise que j'ai longuement cherché sur le web et que vous êtes désormais mon derniers recours puisque mes recherches ont été infructueuses...
    J'espère que j'ai été assez clair dans l'énonciation de la problématique.

    En vous souhaitant un très bon vendredi !

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Il faudra être plus précis
    Les images sont elles sur le classeur ou bien un fichier
    Les X Y images sont identiques ou différentes
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Tout d'abord, merci pour votre réponse.

    Excusez moi pour mon manque de précision.

    Les images seraient dans le classeur, elles seront toutes identiques.
    Finalement, il s'agit de dupliquer en ligne et colonne une image déjà présente dans le classeur selon X et Y.

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Un exemple: Dupliquer X Y fois une image contenue sur la même feuille

    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
    26
    27
    'Shp: l'image à copier sur la même feuille
    'Cel: la cellule à partir de laquelle la duplication commence
    'X: le nombre de copies verticales
    'Y: le nombre de copies horizontales
     
    Private Sub PictureDuplicate(ByVal Shp As Shape, ByVal Cel As Range, ByVal X As Integer, ByVal Y As Integer)
    Dim i As Integer, j As Integer
    Dim G As Double, H As Double
     
    H = Cel.Top
    With Shp
        For i = 1 To X
            G = Cel.Left
            For j = 1 To Y
                .Duplicate
                With .Parent
                    With .Shapes(.Shapes.Count)
                        .Left = G
                        .Top = H
                    End With
                End With
                G = G + .Width
            Next j
            H = H + .Height
        Next i
    End With
    End Sub

    Par exemple: dupliquer sur la feuille nommée Feuil2 l'image Image 1 autant de fois que les valeurs verticales en A1 et horizontales en B1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
     
    With Worksheets("feuil2")
        PictureDuplicate .Shapes("Image 1"), .Range("C10"), .Range("A1"), .Range("B1")
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, par curiosité regarde ici ( il s'agit ici de fichiers pdf mais le principe est transposable )

    dans la procédure PosShapesIns, cette partie devrait t'intéresser, enfin je pense.

    Voir une copie d'écran ici pour visualiser la manière dont les pdf sont positionnés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        .....
        Nb = ShParam.Range("NbPagesH")
        For i = LBound(Tablo) To UBound(Tablo)
            L = (i Mod Nb) * (W + Pas)
            T = (i \ Nb) * (H + Pas)
            With ShRecap.Shapes(Tablo(i))
                .Left = L
                .Top = T
            End With
        Next i
        .....

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci Mercatog pour ta réponse ! Comme vous pouvez vous en rendre compte je suis débutant dans ce domaine, à vrai dire c'est pour un projet de recherche pour le Master Energétique que j'étudie, nous n'avons jamais fais de VBA..

    Je ne comprends pas comment assigner la variable Shp à mon image afin qu'elle puisse être intégrée dans le programme.

    Merci beaucoup pour votre aide.

    Kiki29, je regarde de suite le lien, j'espère que cela ne sera pas trop chinois pour moi

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Citation Envoyé par alexlg35 Voir le message
    Je ne comprends pas comment assigner la variable Shp à mon image afin qu'elle puisse être intégrée dans le programme.
    Dans la procédure test, tu as le nom de ton image à adapter
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Un exemple: Dupliquer X Y fois une image contenue sur la même feuille

    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
    26
    27
    'Shp: l'image à copier sur la même feuille
    'Cel: la cellule à partir de laquelle la duplication commence
    'X: le nombre de copies verticales
    'Y: le nombre de copies horizontales
     
    Private Sub PictureDuplicate(ByVal Shp As Shape, ByVal Cel As Range, ByVal X As Integer, ByVal Y As Integer)
    Dim i As Integer, j As Integer
    Dim G As Double, H As Double
     
    H = Cel.Top
    With Shp
        For i = 1 To X
            G = Cel.Left
            For j = 1 To Y
                .Duplicate
                With .Parent
                    With .Shapes(.Shapes.Count)
                        .Left = G
                        .Top = H
                    End With
                End With
                G = G + .Width
            Next j
            H = H + .Height
        Next i
    End With
    End Sub

    Par exemple: dupliquer sur la feuille nommée Feuil2 l'image Image 1 autant de fois que les valeurs verticales en A1 et horizontales en B1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
     
    With Worksheets("feuil2")
        PictureDuplicate .Shapes("Image 1"), .Range("C10"), .Range("A1"), .Range("B1")
    End With
    End Sub
    J'ai réussi à faire marcher ce code, en mettant bien le nom correspondant de l'image dans le code, quel joie quand j'ai vu les images se dupliquer lol

    Mais cela n'a fonctionné qu'une fois ! Maintenant j'ai un message d'erreur "Mémoire insuffisante"...

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Ok, le programme fonctionne et je t'en remercie Mercatog !

    Aurais-tu une idée afin qu'à chaque "clic" sur le bouton qui démarre ma macro, on commence par effacer tous les shapes ?
    Car une fois que ceux-ci sont affichés, ils restent affichés de façon permanente.

    Je ne sais pas si je m'exprime de façon assez claire..

    Merci encore

  10. #10
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu fais une boucle sur tes shapes et tu supprimes les images portant le nom désiré.
    On copie au préalable une image et on la colle après suppression pour ne garder qu'une à la fin (gymnastique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub DeletDuplicatedShapes()
    Dim Shp As Shape
     
    With Worksheets("Feuil2")
        .Shapes("Image 1").Copy
        For Each Shp In .Shapes
            If Shp.Type = msoPicture Then
                If Shp.Name = "Image 1" Then Shp.Delete
            End If
        Next Shp
        .Paste
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Je viens de m'en rendre compte qu'avec l'opération copier/coller, l'image est collée un peu n'importe ou à la fin.. Serait-il possible de supprimer tous les shapes, sauf le modèle (Image 1) et bien sur conserver le bouton de lancement.

    En effet, j'ai essayé ce code ci mais il me supprime tout, même image 1 et mon bouton de lancement.. Je pense ne pas avoir toutes les connaissances requises pour effectuer ce genre de choses qui doit être finalement très simple..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub suppr()
    For Each s In Shapes
        If s.Name <> "Image 1" Then
            s.Delete
        End If
    Next
     
    End Sub
    Edit : j'ai joins mon fichier

    Classeur test copie image.xlsm

  12. #12
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub DeletDuplicatedShapes()
    Dim Shp As Shape
    Dim c As Integer
     
    With Worksheets("Feuil2")
        For Each Shp In .Shapes
            If Shp.Type = msoPicture Then
                c = c + 1
                If c > 1 Then Shp.Delete
            End If
        Next Shp
    End With
    MsgBox c - 1 & " image(s) supprimée(s)"
    End Sub
    On ne supprime pas la première image
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup c'est génial ! Cela fonctionne sur mon fichier test
    Je passe le post en résolu. Encore merci, passez un bon week end Mercatog

  14. #14
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Je me permet de revenir sur le post car j'ai (encore) un soucis..

    En effet, la duplication d'image ne se fait pas dans la cellule que j'ai demandée, mais sur mon image référence légèrement en décalé...
    Pourtant, j'ai copié/collé le code de mon fichier test dans celui sur lequel je travaille.

    Pourrais-tu Mercatog, s'il te plait, jeter un coup d'oeil au fichier ci dessous ?

    En te remerciant par avance.

    Tableau Programme .xlsm

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Par tatonnement j'ai trouvé le problème..

    Je ne savais pas qu'un commentaire de cellule pouvait mettre le désordre dans l'affichage de mes images, si quelqu'un a une explication je suis preneur.

    Merci

  16. #16
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Private Sub PictureDuplicate(ByVal Shp As Shape, ByVal Cel As Range, ByVal X As Integer, ByVal Y As Integer)
    Dim i As Integer, j As Integer
    Dim G As Double, H As Double
     
    H = Cel.Top
    With Shp
        For i = 1 To X
            G = Cel.Left
            For j = 1 To Y
                With .Duplicate
                    .Left = G
                    .Top = H
                End With
                G = G + 1.5 * .Width
            Next j
            H = H + 1.2 * .Height
        Next i
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  17. #17
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Je me permet de revenir concernant la suppression des images car je travaille dorénavant un groupe d'image.
    Pas de soucis pour l'afficher mais en revanche, j'aimerai connaitre l'équivalent du code ci dessous pour un groupe d'image.

    Il me semble que la correspondance pour msoPicture est msoPictureGroup mais concernant .shapes ?
    Ci dessous le code de Mercatog publié plus haut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub DeletDuplicatedShapes()
    Dim Shp As Shape
    Dim c As Integer
    
    With Worksheets("Feuil2")
        For Each Shp In .Shapes
            If Shp.Type = msoPictureGroup Then
                c = c + 1
                If c > 1 Then Shp.Delete
            End If
        Next Shp
    End With
    MsgBox c - 1 & " image(s) supprimée(s)"
    End Sub
    Merci pour votre aide

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

Discussions similaires

  1. Afficher une image selon le contenu d'une celulle
    Par kitiara999 dans le forum Excel
    Réponses: 11
    Dernier message: 19/07/2019, 13h21
  2. Afficher une image selon la requete
    Par alitazichibi dans le forum iReport
    Réponses: 1
    Dernier message: 11/01/2013, 10h16
  3. [Toutes versions] Affiche d'images selon critères
    Par Rexena dans le forum Access
    Réponses: 13
    Dernier message: 23/04/2011, 10h23
  4. afficher une image selon condition
    Par sakia dans le forum VBA Access
    Réponses: 4
    Dernier message: 04/10/2007, 17h40
  5. Afficher 3 images selon le chiffre
    Par clementphp dans le forum Langage
    Réponses: 6
    Dernier message: 07/05/2006, 12h31

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