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