Macro copier/coller sous forme d'image

kgigant Messages postés 223 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'ai actuellement un code qui sélectionne une plage de donnée de ma feuil1 pour les recoller sous forme d'une image dans la feuil3. Je n'arrive pas à faire simple pour que les images se collent les une en dessus des autres dans la feuil3 (j'ai essayé de contourner un peu le problème sans grand résultats).

Voilà mon code :

Sub Macro1()

Sheets("Feuil3").Select
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "a"
Sheets("Feuil1").Select
Range("C3:L23").Select
Selection.Copy
Sheets("Feuil3").Select
Range("A65536").End(xlUp).Offset(0, 1).Select
ActiveSheet.Pictures.Paste.Select
ActiveSheet.Shapes.Range(Array("Picture 3")).Select
Sheets("Feuil1").Select

End Sub

Merci de votre aide
KG

2 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Pour cela, il faut boucler sur toutes les images contenues dans la feuille Feuil3, comparer leurs propriétés .top (hauteur dans la feuille), et, l'image qui a le top le plus élevé est la dernière dans ta feuille. Par conséquent, ta nouvelle image devra être placée à :
    .Left = 0
    .Top = .TopDernImg + .HeightDernImg

    Cela te donne un code comme ceci :
    Sub AppelFonction()
    ActiveSheet.Shapes("Picture 3").Top = HauteurImgDansFeuil
    End Sub
    
    
    Function HauteurImgDansFeuil()
    Dim Obj As Shape
    Dim TopDernImg As Long, heightDernImg As Integer, TempTop As Long
    
    For Each Obj In Sheets("Feuil1").Shapes 'A ADAPTER nom de la feuille
        If Obj.Type = msoPicture Then
            TempTop = Obj.Top
            If TempTop > TopDernImg Then 
                TopDernImg = TempTop
                heightDernImg = CInt(Obj.Height)
            End If
        End If
    Next Obj
    HauteurImgDansFeuil = TopDernImg + heightDernImg + 3 '3 = marge d'arrondi
    End Function


    Cordialement,
    Franck P
    0
    1. kgigant Messages postés 223 Statut Membre 9
       
      merci, de ta réponse, mais je n'arrive pas à faire le lien entre ton code et le début du mien nottament pour sélectionner la plage de donnée
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      tu veux créer une nouvelle image à chaque exécution? C'est bien cela?
      A quoi te sers d'écrire "a" dans la première cellule vide col A feuil3?
      0
    3. kgigant Messages postés 223 Statut Membre 9
       
      Oui c'est bien ça, j'avais écris cette ligne de code car je cherchai une astuce pour réaliser ce que je voulai donc elle ne sert à rien !
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour,
      Donc essaie le code ci-dessous...
      0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Essaie ceci :
    Sub essai()
    Sheets("Feuil1").Select
    Range("C3:L23").Copy
    Sheets("Feuil3").Select
    Range("A65536").End(xlUp).Offset(0, 1) = "a" 'UTILITE????????
    ActiveSheet.Pictures.Paste.Select
    With Selection
        .Top = HauteurImgDansFeuil("Feuil3") 'ICI ADAPTE le nom de la feuille
        .Left = 30 'règle la marge de gauche
    End With
    Sheets("Feuil1").Select
    Application.CutCopyMode = False
    End Sub
    
    Function HauteurImgDansFeuil(Feuille As String)
    Dim Obj As Shape
    Dim TopDernImg As Long, heightDernImg As Integer, TempTop As Long
    
    For Each Obj In Sheets(Feuille).Shapes
        If Obj.Type = msoPicture Then
            TempTop = Obj.Top
            If TempTop > TopDernImg Then
                TopDernImg = TempTop
                heightDernImg = CInt(Obj.Height)
            End If
        End If
    Next Obj
    HauteurImgDansFeuil = TopDernImg + heightDernImg + 3 '3 = marge d'arrondi
    End Function 

    0