Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 copier/coller des images aprés clique sur icone VBA

jeromeN95

XLDnaute Impliqué
Bonjour à tous,
Je recherche de l'aide svp :

J'ai 25 feuilles (de 1 à 25) strictement identique sauf les valeurs déjà connu de E4 jusqu'à E13
Au départ, j'avais utiliser la fonction "Appareil photo" d'Excel, mais étant donner qu'il y a environ :
13 images par page, et 25 pages, cela fait 325 images.
J'aimerais svp, une fonction VBA pour mettre les images lorsqu'on a fini de travailler sur le fichier.

Je joint un fichier où il y a le minimum avec le résultat attendu.

D'avance merci.
 

Pièces jointes

  • Inserer image en VBA.xlsm
    180.2 KB · Affichages: 10

job75

XLDnaute Barbatruc
Bonjour jeromeN95,

On ne voit pas à quoi peut bien servir la liste B33:B51 de la feuille "Sommaire".

Pour les feuilles 1 2 3 4 etc... il suffit de copier les images de la feuille "LISTE".

Le plus simple sera d'utiliser une macro Workbook_SheetActivate dans ThisWorkbook.

A+
 

job75

XLDnaute Barbatruc
La macro dans ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Not IsNumeric(Sh.Name) Then Exit Sub
Dim c As Range, s As Shape
Application.ScreenUpdating = False
Sh.DrawingObjects.Delete 'RAZ
On Error Resume Next
For Each c In Sh.[E:E].SpecialCells(xlCellTypeFormulas)
    Set s = Nothing
    Set s = Sheets("LISTE").Shapes(c)
    If Not s Is Nothing Then
        c(1, 0).Select
        s.CopyPicture
        Sh.Paste
        Selection.ShapeRange.LockAspectRatio = msoFalse
        Selection.Width = c(1, 0).Width
        Selection.Height = c(1, 0).Height
    End If
Next
Application.Goto Sh.[A1], True 'cadrage
ActiveCell.Copy ActiveCell 'vide le presse-papiers
End Sub
 

Pièces jointes

  • Inserer image en VBA(1).xlsm
    547.8 KB · Affichages: 9

jeromeN95

XLDnaute Impliqué
Bonjour Job75 & Merci.

La liste dans la feuille "Sommaire" de B33 à B51, c'est une liste déroulante pour l'utilisateur.
Elle même tire ses produits de la Feuille "LISTE" dans laquelle il y a tout. Une base de donnée en somme.

J'aimerai déclencher l'ajout des images uniquement après avoir cliquer.
En effet, j'ai peu que le fichier soit trop lourds sur certains ordinateurs...

Quel est la fonction stp? (enlever "Workbook_SheetActivate" et mettre Call sub ?)
 

job75

XLDnaute Barbatruc
Et on peut alléger le fichier en supprimant les images quand on quitte la feuille :
VB:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If IsNumeric(Sh.Name) Then Sh.DrawingObjects.Delete 'RAZ
End Sub
Fichier (2), il pèse 135.9 Ko contre 547.8 Ko pour le fichier (1).
 

Pièces jointes

  • Inserer image en VBA(2).xlsm
    135.9 KB · Affichages: 7

jeromeN95

XLDnaute Impliqué
Ah vraiment pas mal!
je ne savais pas que l'on pouvais faire ça.

Alors juste une dernière opération en supprimant stp.
Est'il possible de ne pas supprimer toute les images de la feuille car j'ai quelques logo et autre image que je souhaite conserver stp ?
Appliquer : "Sh.DrawingObjects.Delete" uniquement à la plage D4: D18

Edit : Petit autre problème en supprimant en "sortant" de la feuille, c'est lorsque je souhaite imprimer en PDF. Forcement, j'ai plus rien...
Et'il possible d'y remédier facilement ?
 
Dernière édition:

job75

XLDnaute Barbatruc
Est'il possible de ne pas supprimer toute les images de la feuille car j'ai quelques logo et autre image que je souhaite conserver stp ?
Appliquer : "Sh.DrawingObjects.Delete" uniquement à la plage D4: D18
Fichier (3) avec :
VB:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Not IsNumeric(Sh.Name) Then Exit Sub
Dim s As Shape
For Each s In Sh.Shapes
    If Not Intersect(s.TopLeftCell, Sh.Range("D4:D18")) Is Nothing Then s.Delete
Next
End Sub
Pour le PDF rien n'empêche d'imprimer avant la suppression des images.

Mais c'est une curieuse idée de le faire en quittant la feuille, utilisez plutôt un raccourci clavier.
 

Pièces jointes

  • Inserer image en VBA(3).xlsm
    135.8 KB · Affichages: 6

jeromeN95

XLDnaute Impliqué
Super merci pour la plage.

L'idée c'est d'utiliser une macro à la fin pour imprimer.
Dans la boite où je travail, il y à des gogols en informatique.
Du coup ok mais elle n'imprime pas tout les logo du coup :

VB:
Sub CrationPNDenPDF()
Dim sNomFichierPDF As String 'pour PDF
Dim i%
'Dim i As Integer   'pour logo et pictogramme
Dim stFeuille As String   'pour logo et pictogramme

''' Logo'''
 Application.ScreenUpdating = False
    Range("C2:D2").Select
    Application.CutCopyMode = False
    Selection.Copy
    
    For i = 3 To Sheets.Count
    Sheets(i).Select
    Range("D1:E1").Select
ActiveSheet.Pictures.Paste(Link:=True).Select
      Range("F1:J1").Select
Next i

    Sheets("Sommaire").Select
    Application.CutCopyMode = False
    Range("B2").Select
    
Application.ScreenUpdating = True ' a supp?
''' Logo'''

''' duplication des pictogramme'''
    Sheets("LISTE").Select
 Application.ScreenUpdating = False
    Range("C201").Select
    Application.CutCopyMode = False
    Selection.Copy
    
    For i = 3 To Sheets.Count
    Sheets(i).Select
    Range("B2").Select
ActiveSheet.Pictures.Paste(Link:=True).Select
      Range("F1:J1").Select
Next i

    Sheets("Sommaire").Select
    Application.CutCopyMode = False
    Range("B2").Select
    
    
'''PDF'''
If Sheets.Count < 3 Then Exit Sub

Sheets(3).Select
For i = 3 To Sheets.Count
    Sheets(i).Select False 'sélection multiple
Next
ActiveSheet.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\" & Range("Sommaire!B51").Value
Sheets(3).Select
'''PDF'''

    
    
Application.ScreenUpdating = True
    MsgBox "La création des PND est terminée. BRAVO !", vbInformation, "P.N.D."
End Sub
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…