Bonjour,
Je ne sais pas trop ou poster ma demande.
Il s'agit de VBA pour libre office...
J'ai peur que mon post tombe aux oubliettes dans Libroffice car j'ai supposé le forum moins axé sur le VBA...
D’avance mes excuses aux modérateurs pour l'insolence de mon initiative!
Voilà j'avais le soucis de devoir protéger et déprotéger une feuille du tableur sans avoir à enlever le partage du fichier.
Cela ne se fait que par macro...
J'ai donc ma macro qui fonctionne parfaitement mais avant de la mettre en service auprès de mes collègues, je voudrais m'assurer qu'elle n'impactera pas le fichier.
A savoir que les fonctions de partage ne seront pas altérées par cette macro...
Par exemple, les utilisateurs pourront ils toujours modifier de leurs côtés et sauvegarder....
Je précise que j'ai mis un decalage sur le mot de passe pour ne pas qu'il soit lisible par des novices qui iraient voir la macro...
Pas optimal comme solution mais, je n'ai pas trouvé mieux...
Pouvez vous me dire si mon code vous parait bon et non bloquant sur les fonctions de partage je vous prie?
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 Sub protege() Dim oSheet As Object Dim sPassword As String ' Mot de passe (utilise un décalage de caractères) sPassword = "fxjjekr" sPassword = DecaleMotDePasse(sPassword, -2) ' Accède à la feuille spécifique oSheet = ThisComponent.Sheets.getByName("Feuille1") ' Masquer les colonnes F à M Dim i As Integer For i = 5 To 12 ' Index des colonnes F à M oSheet.getColumns().getByIndex(i).IsVisible = False Next i ' Si la feuille n'est pas protégée, applique la protection If Not oSheet.IsProtected Then oSheet.Protect(sPassword) MsgBox "Feuille1 verrouillé!" Else MsgBox "La feuille Feuille1 est déjà protégée." End If End Sub Sub deprotege() Dim oSheet As Object Dim sPassword As String ' Accède à la feuille spécifique oSheet = ThisComponent.Sheets.getByName("Feuille1") ' Si la feuille est protégée If oSheet.IsProtected Then ' Demande à l'utilisateur d'entrer le mot de passe sPassword = InputBox("Saisir le mot de passe:") ' Vérifie si le mot de passe est vide If sPassword = "" Then MsgBox "Le mot de passe ne peut pas être vide.", vbExclamation Exit Sub End If ' Essaye de déprotéger la feuille avec le mot de passe fourni On Error GoTo ErreurMotDePasse oSheet.Unprotect(sPassword) ' Afficher les colonnes F à M Dim i As Integer For i = 5 To 12 ' Index des colonnes F à M oSheet.getColumns().getByIndex(i).IsVisible = True Next i Else MsgBox "La feuille n'est pas protégée." End If Exit Sub ErreurMotDePasse: MsgBox "Mot de passe incorrect.", vbCritical End Sub ' Fonction pour décaler les lettres du mot de passe Function DecaleMotDePasse(mdp As String, decalage As Integer) As String Dim i As Integer Dim resultat As String Dim c As String resultat = "" ' Boucle sur chaque caractère du mot de passe For i = 1 To Len(mdp) c = Mid(mdp, i, 1) ' Décale chaque lettre dans l'alphabet resultat = resultat & Chr(Asc(c) + decalage) Next i DecaleMotDePasse = resultat End Function
Partager