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 :

Sélectionner une image pour la copier d'une feuille à une autre [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut Sélectionner une image pour la copier d'une feuille à une autre
    Bonjour,

    je prépare une boucle pour copier des photos d'une feuille à une autre en réduisant la taille au passage.
    Pour mettre au point, j'ai adapté ce que me donne l'enregistreur de macro et commencé par faire une boucle de 1 (pas de boucle)

    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
     
    Sub Macro3()
    Dim i As Integer
     
    For i = 2 To 2
     
    Workbooks("ES-Catalogue.xlsm").Activate
    Sheets("Param Services").Select
    'ActiveSheet.Shapes.Range(Array("Picture 170")).Select  Ce que ne donne l'enregistreur de macro
    ' remplacer par For Each pour préparer une boucle -> ensuite .Range("D" & i)
        For Each shp In ActiveSheet.Shapes
            If shp.Top = Workbooks("ES-Catalogue.xlsm").Sheets("Param Services").Range("D2").Top Then
            Selection.Copy
     
    ' Edition du catalogue actif
            Workbooks("ES-Edition du Catalogue des Services.xlsm").Activate
            Range("B8").Select
            ActiveSheet.Paste
            Selection.ShapeRange.ScaleHeight 0.4693333333, msoFalse, msoScaleFromTopLeft
        End If
        Next
     
    Next i
    End Sub
    Le résultat est bon, l'image est copiée et réduite au bon endroit (B8 de feuille2), le problème est que la photo copiée n'est pas D2 de feuille1 comme je voulais le faire, mais systématiquement la photo sur laquelle pointe le curseur sur Feuille2.
    Si je sélectionne D6 de feuile2 avec la souris c'est elle qui sera copiée...

  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 re
    re
    ben alors retraité pas reveillé?
    c'est normal que ce soit la selectionnée qui est copiée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each shp In ActiveSheet.Shapes
            If shp.Top = Workbooks("ES-Catalogue.xlsm").Sheets("Param Services").Range("D2").Top Then
            Selection.Copy'
    tu boucle sur les shapes avec "shp" sert toi en !
    apres tu teste le top tu a interet a ce que le top soit exact

    allez pour etre sur de ton coup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each shp In ActiveSheet.Shapes
            If shp.topleftcell= Workbooks("ES-Catalogue.xlsm").Sheets("Param Services").Range("D2") Then
            shp.Copy'
    et si l'image ne commence n'est pas exactementen d2 mais deborde sur c2 par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each shp In ActiveSheet.Shapes
            If shp.topleftcell.row= Workbooks("ES-Catalogue.xlsm").Sheets("Param Services").rows(2) Then
            shp.Copy'
    et bien que l'on pourrait debattre aussi sur le fait que tu boucle sur activesheet et tu teste sur nomclasseur.nomsheet.range ,on va pas le faire, je te le signale c'est tout ,au cas ou la macro travaillerait pendant qu'un autre sheet voir un autre classeur est activé

    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 éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut
    Ca ne marche plus du tout, plus de copie..

    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
     
    Sub Macro3()
    Dim i As Integer
     
    For i = 2 To 2
     
    Workbooks("ES-Catalogue.xlsm").Activate
    Sheets("Param Services").Select
    'ActiveSheet.Shapes.Range(Array("Picture 170")).Select  Ce qu ne donne l'enregistreur de macro
    ' remplacer par For Each pour préparer une boucle -> ensuite .Range("D" & i)
        For Each shp In ActiveSheet.Shapes
            If shp.TopLeftCell = Workbooks("ES-Catalogue.xlsm").Sheets("Param Services").Range("D2") Then
            shp.Copy
     
    ' Edition du catalogue actif
            Workbooks("ES-Edition du Catalogue des Services.xlsm").Activate
            Range("B8").Select
            ActiveSheet.Paste
            Selection.ShapeRange.ScaleHeight 0.4693333333, msoFalse, msoScaleFromTopLeft
        End If
        Next
     
    Next i
    End Sub

  4. #4
    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 re
    est tu sur que les image commence en d2 en terme de position

    comme j'ai editer
    tu boucle sur activesheet!, est tu sur l'ors de cette boucle que le sheets ayant l'image soit celui qui est activé
    perso pluto que de faire sur active sheet j'utiliserait une variable object ayant ciblé le bon sheet au préalable
    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

  5. #5
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut
    Oui mes images sont en D2, D3, D4 et ainsi de suite

    je veux les mettre en B8, B13, B18 et ainsi de suite de la seconde feuille par une simple boucle (mise en page pour être imprimer),

    Peut être y-a-t-il plus simple

    Je mets également du texte en page dans ma futur boucle par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim i As Integer
    Delta = 6
    For i = 2 To 2  ' pas de boucle pour commencer
    Range("B" & Delta) = Workbooks("ES-Catalogue.xlsm").Sheets("Param Services").Range("A" & i).Value
    Range("M" & Delta + 1) = Workbooks("ES-Catalogue.xlsm").Sheets("Param Services").Range("B" & i).Value
    Range("Q" & Delta + 2) = Workbooks("ES-Catalogue.xlsm").Sheets("Param Services").Range("E" & i).Value
    et c'est là que j'ai une image en ("D" & i) aussi à mettre en page pour chaque boucle en ("B" & Delta + 2) , dans l'esprit ça parait simple...

    En fait l'enregistreur de macro me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveSheet.Shapes.Range(Array("Picture 170")).Select
    je veux simplement remplacer "Picture170" par ("D" & i) dans ma boucle mais comment ?

  6. #6
    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 re
    j'avoue ne plus te comprendre on part maintenant sur des valeur de cells

    bon regarde bien cet exemple
    j'ai 2 classeurs ouverts (classeur1/classeur2)
    dans le classeur 1 je n'ai pas d'image j'ai juste la macro
    dans le classeur2 je n'ai pas de macro mais j'ai une image qui a son angle gauche et haut en D2

    regarde bien ce code attentivement

    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
     
    Sub test()
     
        Set sheetsimage = Workbooks("Classeur2").Sheets(1)    'le classeur2.sheet contenant les images
        ThisWorkbook.Activate 'on revient sur le classeur 1 qui doit recevoir l'image
        'on est donc dans le classeur 1 il n'est pas besoins que le (classeur2.sheet ou il ya les images) soit activé on utilise pas "activesheet"
        With sheetsimage    'with global
            For Each shp In .Shapes
                If shp.TopLeftCell = .Range("D2") Then    'si le coin haut gauche de la shapes est quelque part dans "D2" il sera shoppé!!
                    ' Debug.Print shp.Name 'juste pour controler
                    shp.Copy    'alors on le copie
                    ' Edition du catalogue actif
                    With Sheets(1)
                        .Range("B8").Select
                        .Paste
                        Selection.ShapeRange.ScaleHeight 0.4693333333, msoFalse, msoScaleFromTopLeft
                    End With
                End If
            Next
        End With
    End Sub
    fait moi plaisir test avec deux fichiers neufs
    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

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/03/2012, 04h48
  2. Affichage d'une image au passage de la souris sur une image mappée
    Par Pouet24 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 09/07/2009, 09h26
  3. Réponses: 1
    Dernier message: 27/02/2008, 13h55
  4. [FLASH 5]un bouton dans une image pour revenir sur une scene
    Par patato valdes dans le forum Flash
    Réponses: 7
    Dernier message: 28/04/2004, 20h21
  5. Comment copier un bitmap d'une image à une autre?
    Par gord's dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2003, 13h07

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