Bonsoir,

mon code place une image différente dans la cellule "A1" en fonction du mode protégé ou non de la feuille.
J'utilise l'évènement "SheetActivate" qui me parait le mieux car je ne sais capturer le changement dans le ruban.

En mode non protégée, cela fonctionne bien.
Hélas en mode non protégé, j'obtiens ceci après plusieurs activation de la feuille protégée :
Nom : 202614.png
Affichages : 138
Taille : 3,1 Ko

L'image du non protégée (en rouge) n'est pas effacée lors de l'activation de la protection mais en plus l'image "protégée" (en noire) se recopie avec un décalage à chaque fois que j'active la feuille.

Voici mon code
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    On Error Resume Next
 
    'Ne pas détruire les images utilisées en allant sur cet onglet
    If ActiveSheet.Name = "Dessin" Then Exit Sub
 
    'Choisi pour le classeur l'emplacement du pictogramme
    Dim EmplacementCadenas As String
    EmplacementCadenas = "A1"
 
    'Archive emplacement du curseur
    Dim ac As Range
    Set ac = ActiveCell
 
    'Efface les pictogrammes existants : si n'existe pas, il y a RESUME NEXT
    ActiveSheet.Shapes("CadenasOpen").Delete
    ActiveSheet.Shapes("CadenasClose").Delete
 
    'Traitement affichage de la bonne icone
    If ActiveSheet.ProtectContents = True Then
        'Feuille protégée - Copie l'icone adéquate
        Sheets("Dessin").Shapes("CadenasClose").Copy
 
        'Déprotége pour modification
        ActiveSheet.Unprotect
 
        'Copie l'icône en 2 lignes
        ActiveSheet.Range("A1").Select
        DoEvents
        ActiveSheet.Paste
 
        'cadrage dans la cellule
        With ActiveSheet.Shapes("CadenasClose")
            .Top = Range(EmplacementCadenas).Top + (Range(EmplacementCadenas).Height - .Height) / 2
            .Left = Range(EmplacementCadenas).Left + (Range(EmplacementCadenas).Width - .Width) / 2
        End With
 
        'Reprotége la feuille
        ActiveSheet.Protect
    Else
        'Feuille Non Protégée - Copie l'icone adéquate
        Sheets("Dessin").Shapes("CadenasOpen").Copy
 
        'Copie l'icône en 2 lignes
        Range("A1").Select
        ActiveSheet.Paste
 
        'Cadrage dans la cellule
        With ActiveSheet.Shapes("CadenasOpen")
            .Top = Range(EmplacementCadenas).Top + (Range(EmplacementCadenas).Height - .Height) / 2
            .Left = Range(EmplacementCadenas).Left + (Range(EmplacementCadenas).Width - .Width) / 2
        End With
    End If
 
    '--- Se replace dans la cellule avant la procédure
    ac.Select
    Set ac = Nothing
 
    '---
    On Error GoTo 0
End Sub
Quel est le problème ?
J'ai même mis un "Doevents" entre la déprotection et la re-protection de la feuille.

Merci.

ESVBA