Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Cacher / détailler certaines colonnes dans certains onglets avec mot de passe

Tsr75a

XLDnaute Nouveau
Bonjour,

Pour la toute première fois depuis que je suis dans l'informatique, je vais oser demander de l'aide à une communauté. ...
Voila, j'utilise Excel en Français sur MacOs, (mais possible qu'il y ai du Windows).

Je souhaite cacher la colonne B situées dans l'onglet A1, la colonne C dans l'onglet A2, puis la colonne E dans l'onglet A3.

Je veux utiliser un mot de passe quand je clic sur le bouton VBA. Ce mot de passe sera renseigné dans un fichier RTF (motdepasse.rtf). Ce fichier sera déposé dans le répertoire où sera positionné le tableau Excel.
J'ai un code qui fonctionne bien pour cacher les colonnes, mais pas l'inverse.

PS: ici le chemin du fichier contenant le mot de passe est en dur, mais au final je souhaiterais que le VBA le recherche depuis le répertoire courant ou est ma feuille de calcule (Mac et si OS = Win),

Pourriez-vous me corriger mes erreurs ? :
Merci par avance

.../
Sub CacherOuLibererColonnesAvecMotDePasse()
Dim MotDePasseFichier As String
Dim CheminFichier As String
Dim Onglet As Worksheet
Dim MotDePasseUtilisateur As String

' Spécifiez le chemin absolu du fichier RTF contenant le mot de passe
CheminFichier = "/chemin/absolu/vers/votre/dossier/motdepasse.rtf"

' Lisez le mot de passe depuis le fichier RTF
On Error Resume Next
Open CheminFichier For Input As #1
Line Input #1, MotDePasseFichier
Close #1
On Error GoTo 0

' Demandez le mot de passe à l'utilisateur
MotDePasseUtilisateur = InputBox("Entrez le mot de passe pour cacher ou libérer les colonnes :", "Mot de passe requis")

' Vérifiez si le mot de passe est correct
If MotDePasseUtilisateur = MotDePasseFichier Then
' Cacher ou libérer les colonnes spécifiques dans les onglets
For Each Onglet In ThisWorkbook.Sheets
Select Case Onglet.Name
Case "A1"
' Cacher ou libérer la colonne B dans l'onglet A1
Onglet.Columns("B").Hidden = Not Onglet.Columns("B").Hidden
Case "A2"
' Cacher ou libérer la colonne C dans l'onglet A2
Onglet.Columns("C").Hidden = Not Onglet.Columns("C").Hidden
Case "A3"
' Cacher ou libérer la colonne E dans l'onglet A3
Onglet.Columns("E").Hidden = Not Onglet.Columns("E").Hidden
End Select
Next Onglet
Else
MsgBox "Mot de passe incorrect. Veuillez réessayer.", vbExclamation, "Accès refusé"
End If
End Sub
 

ThierryP

XLDnaute Occasionnel
Bonjour,

à priori ton code fonctionne correctement, par contre pour la recherche du fichier motdepasse, soit tu lui indiques le dossier de départ par
VB:
Function ChoixDossier()
       With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = ActiveWorkbook.Path & "\"
        .Show
        If .SelectedItems.Count > 0 Then
           ChoixDossier = .SelectedItems(1)
        Else
           ChoixDossier = ""
        End If
       End With
End Function
Ceci fonctionne si le fichier est dans le répertoire de ton fichier Excel. Si ton fichier motdepasse est dans un sous-dossier du répertoire courant, il faudra faire une recherche récursive (je dois avoir quelque part dans mes archives un truc qui pourrait faire le job).
D'une manière générale, il est assez illusoire d'utiliser des mots de passe avec Excel, sauf si tous tes users sont des "quiches" en Excel et en informatique ! Il va te falloir également protéger l'accès au VBA par MdP, sinon il est assez simple pour un user averi de voir où tu vas cherhcer l'information !
 

Tsr75a

XLDnaute Nouveau
Bonjour et merci ThierryP,
Je vais voir cela de plus pres. Mais je vais suivre tes conseil et trouver une autre manière de faire plus simple, plus portable et moins 'tarabiscuté'.

Merci encore
 

ThierryP

XLDnaute Occasionnel
Une idée en passant : ajouter une feuille invisible (feuil1.Visible = xlSheetVeryHidden) et verrouiller l'accès au projet VBA (interdire de visualiser la structure du fichier), et inscrire en A1 de cette feuille ton MdP
 

Cousinhub

XLDnaute Barbatruc
Bonjour,
Juste en passant.
Sinon, (code VBA bien sûr verrouillé - même si protection "aléatoire")
Définir dans un module standard
VB:
Const MdP As String = "Essai"

Sub c_est_koi_le_mdp()
MsgBox MdP
End Sub

Bonne continuation
 

Discussions similaires

Réponses
2
Affichages
197
Réponses
5
Affichages
438
Compte Supprimé 979
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…