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 :

Selection de cellule contenant une image par méthode Intersect


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 120
    Points : 64
    Points
    64
    Par défaut Selection de cellule contenant une image par méthode Intersect
    Bonjour,

    je souhaite sélectionner par la méthode "Intersect" des cellules contenant chacune une image.
    Mais l'image est placée "sur" la cellule et ne permet pas à la méthode intersect de fonctionner. (c'est en tout cas ce que je crois comprendre)
    Comment puis-je résoudre ce problème ?
    Actuellement, voilà ce que je fais et qui marche si les cellules contiennent du texte mais pas si c'est une image :

    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    '
        Dim OK As Boolean
    '
        If OK = True Then Exit Sub
    '
    ==========================================
        If Not Intersect(Target, Range("B2")) Is Nothing Then
            OK = True
            ll = 2                              ' mémorisation de la ligne
            kk = 2                            ' mémorisation de la colonne
            OK = False
            GoTo MEP1                     
        End If
    '   ======================================================================
        If Not Intersect(Target, Range("D2")) Is Nothing Then
            OK = True
            ll = 2                             ' mémorisation de la ligne 
            kk = 4                           ' mémorisation de la colonne
            OK = False
            GoTo MEP1
        End If
    '  etc . . . . .
    Merci beaucoup de votre aide

  2. #2
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour
    l'attachement d'une image a une cellule est defini comme suit

    Imgcolumn = Feuil7.Shapes.Item(1).BottomRightCell.Column
    imgligne = Feuil7.Shapes.Item(1).TopLeftCell.Row

    On obtient donc une adresse feuil7.cells(imgligne, imgcolonne) que l'on peut comparer avec ....

  3. #3
    Inactif  
    Homme Profil pro
    Analyste-Programmeur / Intégrateur ERP
    Inscrit en
    Mai 2013
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur / Intégrateur ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 511
    Points : 10 335
    Points
    10 335
    Par défaut
    Bonjour,

    Je me servais d'une boucle dans ce genre, pour passer sur chaque objet d'une feuille, et je testais l'emplacement de l'image (pour effacer celle que je visais), peut être en adaptant un peu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim s as Object
     
                For Each s In ActiveSheet.DrawingObjects
                    If Not Intersect(s.TopLeftCell, Range("$AA40")) Is Nothing Then
                        s.Select False
                        s.Delete
                    End If
                Next s

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 120
    Points : 64
    Points
    64
    Par défaut
    Bonjour keygen08,

    merci de votre réponse, mais pour moi, à mon niveau, elle n'est pas exploitable en l'état . . .
    Certes je sais maintenant comment récupérer l'adresse d'une image contenue dans une cellule, mais ce n'est pas ce dont j'ai besoin.
    Je me suis sans doute mal exprimé.

    Par exemple : j'ai mis dans 4 cellules A1, A2, A3, A4 (par insertion image), 4 images : fleur, poisson, maison, bateau
    Je demande à l'utilisateur d'en choisir une en cliquant sur la cellule où se trouve l'image qu'il veut retenir et le programme détecte cette cellule par la méthode "intersect" qui me permet de récupérer l'adresse de la cellule "cliquée"
    Mais intersect ne fonctionne pas avec une image placée dans une cellule par "insertion image".

    Voilà .

    Merci de m'expliquer ce que je dois faire.

    Cordiales salutations.

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    Bonjour,

    en fait c'est bien plus simple de cliquer directement sur l'image !

    Sinon il y a tout ce qu'il faut dans les infos des deux précédents intervenants :
    suffit juste de comparer la cellule active avec les cellules associées aux images …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une autre idée.
    Lorsque tu fais un clic droit sur une image, tu peux lui affecter une macro. Tu pourrais donc utiliser la même procédure pour les quatre images où à l'aide de la propriété Caller de l'objet Application, tu peux connaître son nom.
    Il ne te reste plus qu'à exécuter le code que tu veux associer à cette image en utilisant pas exemple un Select Case
    Exemple d'une procédure qui affiche le nom de l'image sur laquelle on a cliqué.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub InterceptPicture()
     MsgBox Application.Caller
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 120
    Points : 64
    Points
    64
    Par défaut
    Bonjour Philippe Tulliez,

    je surnage, tout près de la noyade avec les réponses hyper pointues que je reçois . . . La vôtre me permet d'entrevoir l'embryon d'une solution.
    Etant d'un niveau élémentaire en Excel vba, je n'ai jamais utilisé ni msgBox ni Application.Caller.
    En effet si je clique sur la cellule où j'ai placé une image que j'ai nommée "Coccinelle" la Box m'affiche bien "Coccinelle", mais visualiser le nom ne me sert à rien, je veux le mémoriser quelque part. Ainsi ça serait parfait pour 1 image.
    Mais ensuite, comment faire pour n images ?

    Merci de votre infinie patience . . .

    Cordiales salutations

  8. #8
    Inactif  
    Homme Profil pro
    Analyste-Programmeur / Intégrateur ERP
    Inscrit en
    Mai 2013
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur / Intégrateur ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 511
    Points : 10 335
    Points
    10 335
    Par défaut
    Alors, pour moi, le plus simple c'est de lier chacune de tes images à la même macro (click droit sur l'image => Affecter une macro, comme l'a expliqué Philippe) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set S = ActiveSheet.Shapes(Application.Caller).TopLeftCell
    Cells(S.Row, S.Column).Select
    Macro qui sélectionne la cellule où se trouve l'image.


    Ensuite, dans un évènement Worksheet_SelectionChange sur ta feuille, tu peux donc employer la méthode Intersect et faire ton traitement en fonction de la cellule sélectionnée.

  9. #9
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    Dans ce cas sélectionner directement la cellule renvoyée par la propriété TopLeftCell ! […] .TopLeftCell.Select

    Mais normalement il est inutile de sélectionner la cellule comme d'utiliser la méthode Intersect,

    il suffit juste de comparer l'adresse de la cellule : Select Case ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  10. #10
    Inactif  
    Homme Profil pro
    Analyste-Programmeur / Intégrateur ERP
    Inscrit en
    Mai 2013
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur / Intégrateur ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 511
    Points : 10 335
    Points
    10 335
    Par défaut
    Citation Envoyé par Marc-L Voir le message

    Mais normalement il est inutile de sélectionner la cellule comme d'utiliser la méthode Intersect,
    Bien d'accord, je ne vois pas trop le but de l'Intersect ici non plus, mais bon, sans savoir le but du pourquoi du comment...


    Enfin, après un déduction suite à un autre fil de l'auteur, il s'agirait, de copier l'image sur un autre onglet, mais il doit y avoir d'autres éléments à prendre un compte pour vouloir passer par un Intersect.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 120
    Points : 64
    Points
    64
    Par défaut
    Bonjour à tous,

    A partir de ce que vous me suggérez tous (et que je ne peux utiliser à cause de mes faibles compétences) il semble que l'utilisation de la méthode Intersect telle que je la mentionnait dans l'énoncé de mon problème, soit inutile.

    En fait mon problème est simple à exposer :

    Dans la Feuil1 j'ai 40 images chargées dans 40 cellules, chacune avec un nom (pendule, girafe, maison, poisson, camion etc . . . )
    Parmi cet ensemble de 40 images, l'utilisateur doit en choisir 9 en cliquant successivement sur les 9 images qu'il veut retenir, et chacune de ces 9 images devront être copiées dans Feuil2 successivement en A1, A2, A3 . . . . . A9

    C'est tout pour l'instant


    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/10/2009, 15h01
  2. Outil pour mapper une image par selection de couleur
    Par SpaceFrog dans le forum Outils
    Réponses: 1
    Dernier message: 06/03/2009, 09h44
  3. Réponses: 4
    Dernier message: 20/11/2007, 13h22
  4. Réponses: 3
    Dernier message: 10/08/2007, 13h45
  5. Récupérer la cellule contenant une image
    Par phpphp dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/05/2007, 15h45

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