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
A voir également:

2 réponses

pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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
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
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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
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
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
Bonjour,
Donc essaie le code ci-dessous...
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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