XL 2021 coller une image interne au classeur

  • Initiateur de la discussion Initiateur de la discussion Jouxte
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Jouxte

XLDnaute Occasionnel
Bonjour à toutes et tous,

J'utilise du code du regretté Jacques Boisgontier que j'ai modifié avec du code de patricktoulon pour l'insertion dans la cellule cible. Ce code se trouve dans la Worksheet.
Il me sert à coller en colonne F l'image correspondant à l'arrondissement de la colonne E.
J'ai nommé les images des arrondissement de la feuille" Ardt" : Paris 1, Paris 2, et ainsi de suite jusqu'à 20.
J'ai une erreur sur la ligne : ActiveSheet.Paste

Cette macro a fonctionné pour les 6 ou 7 premières lignes.

Par ailleurs, est-il possible de créer une fonction [=CollerImage(Nom de l'image)] qui irait chercher l'image correspondante du classeur pour la coller sur la cellule contenant la formule.

J'ai fait un fichier test avec seulement 4 arrondissements pour qu'il ne soit pas trop lourd.
Merci par avance.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ratio#, W#, H#
If Target.Column = 5 And Target.Count = 1 Then
'-- suppression
For Each S In ActiveSheet.Shapes
If S.Type = 13 Then
If S.TopLeftCell.Address = Target.Offset(0, 1).Address Then
S.Delete
End If
End If
Next S
'--
If Target <> "" Then
Sheets("Ardt").Shapes(Target).Copy
Target.Offset(0, 1).Select
ActiveSheet.Paste

With Selection
.ShapeRange.LockAspectRatio = msoTrue ' lock leratio indéformable
ratio = .Width / .Height ' calcul ratio
W = ActiveCell.Width ' width range
H = ActiveCell.Height ' height range
If (W / H < ratio) Then
.Width = W - 2 'en redimentionant le width le height se redimentionne automatiquement
Else 'ou
.Height = H - (2 / ratio) 'en redimentionant le height le width se redimentionne automatiquement
End If
.Left = ActiveCell.Left + ((ActiveCell.Width - .Width) / 2) + 1
.Top = ActiveCell.Top + ((ActiveCell.Height - .Height) / 2)
.Placement = 1
End With

Target.Select

End If
End If
End Sub
 
non

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ratio#, W#, H#
    If Target.Column = 5 And Target.Count = 1 Then
        '-- suppression
        For Each S In ActiveSheet.Shapes
            If S.Type = 13 Then
                If S.TopLeftCell.Address = Target.Offset(0, 1).Address Then
                    S.Delete
                End If
            End If
        Next S
        
        '--
        If Target <> "" Then
            Set cible = Target.Offset(0, 1)
            Sheets("Ardt").Shapes("Paris " & Target).Copy
        
            cible.PasteSpecial
    
            With Selection 'il s'agit de l'image qui vient d'être collée
                .ShapeRange.LockAspectRatio = msoTrue    ' lock leratio indéformable
                ratio = .Width / .Height     ' calcul ratio
                W = cible.Width       ' width  range
                H = cible.Height      ' height range
                If (W / H < ratio) Then
                    .Width = W - 2    'en redimentionant le width le height se redimentionne automatiquement
                Else    'ou
                    .Height = H - (2 / ratio)    'en redimentionant le height le width se redimentionne automatiquement
                End If
                .Left = cible.Left + ((cible.Width - .Width) / 2) + 1
                .Top = cible.Top + ((cible.Height - .Height) / 2)
                .Placement = 1
            End With
    
            Target.Select
        End If
    End If
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
250
Réponses
1
Affichages
467
Réponses
0
Affichages
379
Retour