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 :

Copier coller une ligne ou des cellules contenant des images [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 94
    Par défaut Copier coller une ligne ou des cellules contenant des images
    Bonjour à tou·te·s,

    je cherche à copier coller des éléments d'une feuille à une autre.
    Que je copie toute une ligne pour la coller dans une autre feuille, ou bien que je passe par un copier/coller de chaque cellule de la ligne, dans les deux cas, ça me copie colle mes textes, mais il y a à chaque fois une cellule qui elle, contient une image. Or dans le résultat du code, ça ne copie pas l'image, là où évidemment, un copier coller manuel fonctionne.

    J'ai vu plusieurs sujets ici ou ailleurs abordant cette question, mais il s'agit là de copier des dizaines/centaines de lignes, toutes avec une image, et les solutions partaient souvent de l'inverse : balayer toutes les images de la feuille, chercher celle qui est sur telle cellule, et la copier. Or j'ai le sentiment que ça rajoute une boucle consommatrice de temps de rebalayer l'ensemble des images à chaque nouvelle ligne.
    En revanche, évidemment, je n'ai aucune idée du nom de chaque image, ni de leur numérotation (elles peuvent avoir été ajoutées au fichier Excel dans un ordre différent).

    En plus, mes images sont toutes dans la même colonne, donc lorsque mes boucles scannent mes différentes cellules, je peux savoir à chaque fois à quel moment il s'agit de copier l'image. N'y a-t-il pas moyen en ce cas de tester la présence d'une image ou de directement demander de copier le shape qui est présent dans la cellule en question ?

    J'espère que c'est assez clair,

    Merci par avance pour vos retours éclairés !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par GroFlo Voir le message
    Bonjour,

    Si vos images occupent une cellule, vous avez la possibilité de mettre le titre ou le nom de l'image dans la cellule préalablement. Lorsque vous aurez copié la ligne dans un autre onglet, il suffira d'aller chercher l'image dans l'onglet d'origine.

    Pour identifier vos images dans les cellules en utilisant la propriété Title de l'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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Option Explicit
     
    Sub ReferencerLesImages()
     
    Dim I As Integer
    Dim ColonneReference As Long, ColonneImage As Long
    Dim MaLigne As Variant
     
     
        With ActiveSheet
            If .Shapes.Count = 0 Then Exit Sub
            ColonneReference = 1: ColonneImage = 3
            For I = 1 To .Shapes.Count
                With .Shapes(I)
                     .Title = IdentificationCellule(ColonneReference, ColonneImage, .Top)
                     'Debug.Print I & " : " & .Title
                     MaLigne = Split(.Title, " ")
                End With
                .Cells(CLng(MaLigne(2)), ColonneImage) = Join(MaLigne, " ")
            Next I
        End With
     
    End Sub
     
     
    Function IdentificationCellule(ByVal ColonneReference2 As Long, ByVal ColonneImage2 As Long, ByVal DistanceVerticale As Double) As String
     
    Dim J As Long, DerniereLigne As Long
     
       IdentificationCellule = ""
       With ActiveSheet
            DerniereLigne = .Cells(.Rows.Count, ColonneReference2).End(xlUp).Row
            For J = 1 To DerniereLigne
                With .Cells(J, ColonneReference2)
                     If DistanceVerticale > .Top - 2 And DistanceVerticale < .Top + 2 Then  ' -2 +2 à ajuster
                        IdentificationCellule = "Image ligne " & J
                        Exit Function
                     End If
                End With
            Next J
       End With
     
    End Function
    Pour sélectionner l'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
     
    Sub SelectionnerUneImage(ByVal ShImage As Worksheet, ByVal TitreImage As String)
     
    Dim I As Integer
     
        With ShImage
             If .Shapes.Count = 0 Then Exit Sub
             For I = 1 To .Shapes.Count
                 With .Shapes(I)
                      If .Title = TitreImage Then .Select
                 End With
             Next I
        End With
     
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 94
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,

    Si vos images occupent une cellule, vous avez la possibilité de mettre le titre ou le nom de l'image dans la cellule préalablement. Lorsque vous aurez copié la ligne dans un autre onglet, il suffira d'aller chercher l'image dans l'onglet d'origine.
    Merci mais justement comme je l'ai précisé :*
    Citation Envoyé par GroFlo Voir le message
    Bonjour à tou·te·s,
    En revanche, évidemment, je n'ai aucune idée du nom de chaque image, ni de leur numérotation (elles peuvent avoir été ajoutées au fichier Excel dans un ordre différent).
    Or le fichier est préexistant avec un très grand nombre d'image, hors de question en l'occurrence de chercher à renommer l'ensemble des images.

    Merci néanmoins d'avoir pris le temps de répondre !

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Bonjour,
    Citation Envoyé par GroFlo Voir le message
    je cherche à copier coller des éléments d'une feuille à une autre.
    Que je copie toute une ligne pour la coller dans une autre feuille, ou bien que je passe par un copier/coller de chaque cellule de la ligne, dans les deux cas, ça me copie colle mes textes, mais il y a à chaque fois une cellule qui elle, contient une image. Or dans le résultat du code, ça ne copie pas l'image, là où évidemment, un copier coller manuel fonctionne.
    Si tu copies une ligne entière qui contient une image vers une autre feuille, tout est copié, y compris l'image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Worksheets(1).Rows("2:2").Copy Worksheets(2).Range("A8")

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 94
    Par défaut
    En effet ! Malheureusement, je copie certaines cellules de chaque ligne seulement. Je peux néanmoins explorer l'idée de copier les lignes et ensuite de supprimer les colonnes en trop, pour quoi pas, mais dans tous les cas, ça ne me permet d'identifier facilement mes images pour le travailler ensuite (par exemple les centrer dans la cellule, etc.)

    J'ai donc globalement résolu le problème en passant par la méthode que je suppose classique, car lue ici plusieurs fois et sur d'autres forums :*scanner toutes les images et vérifier si leur topleft.address est celle de ma cellule que je copie, auquel cas je sélectionne le shape, le colle et en profite pour renommer ma copie.

    Merci en tout cas pour ta remarque !

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 19/04/2019, 17h10
  2. Réponses: 4
    Dernier message: 12/04/2017, 16h00
  3. copier coller une ligne plusieurs fois selon une valeur de cellule
    Par ghaza dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 05/04/2017, 09h48
  4. Réponses: 3
    Dernier message: 05/03/2009, 07h16
  5. Copier Coller une ligne d'une table avec modif ?
    Par nolan76 dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/03/2004, 16h34

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