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 :
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 codeQuel est le problème ?
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
J'ai même mis un "Doevents" entre la déprotection et la re-protection de la feuille.
Merci.
ESVBA
Partager