Interdire l'ouverture d'un fichier Excel si les macros ne sont pas activés

Bonjour à tous,

Je viens vous demander de l'aide... après 3h de bataille sans résultat.

J'ai un fichier excel avec plusieurs onglet ou j'ai fait une macro qui me permet de mettre des codes d'utilisateur afin que tout le monde ne puisse pas ouvrir tous les onglets sans le bon code. Jusque la, tout fonctionne.
Mais je me suis rendu compte que si on n'active pas les macros (ce qui est le cas à chaque ouverture d'excel)... toutes les feuilles sont accessibles!
Visiblement, il est possible d'ajouter une macros qui oblige l'utilisateur à activer les macros pour ouvrir le fichier excel.
Mais je n'y arrive vraiment vraiment pas...

Je dois avouer que je ne suis pas très doué avec les macros et que le fichier que j'ai est un repiquage.
Bref, help... je suis en grosse galère.

Merci à vous

Johann

Bonjour,

Mais je me suis rendu compte que si on n'active pas les macros (ce qui est le cas à chaque ouverture d'excel)... toutes les feuilles sont accessibles!

une façon simple est

  • de mettre tes feuilles en .visible=xlVeryHidden
  • et de masquer le code VBA par un mot de passe (même si ce n'est pas parfait !)

Bonjour Steelson,

Merci de ton aide. Mais je ne sais pas ou mettre ce code à vrai dire... Je sais ouvrir les fonctions développeur et suivre ce que un tuto me dit... (Tu vois un peu le niveau!)

ok, je pensais que tu étais déjà bien au fait compte tenu de ce que tu avais écrit

j'ai fait une macro qui me permet de mettre des codes d'utilisateur afin que tout le monde ne puisse pas ouvrir tous les onglets sans le bon code. Jusque la, tout fonctionne.

bon, ben voici un exemple complet, avec au choix

NOMMot de Passe
ADMINADMIN
Greggregory
Euniceeunice
Vicvictoria

Dans ThisWorkBook :

Option Explicit

Private Sub Workbook_Open()
Dim f As Worksheet

For Each f In ThisWorkbook.Worksheets
    If f.Name <> "Accueil" Then f.Visible = xlSheetVeryHidden
Next f

End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim f As Worksheet

Sheets("Accueil").Visible = True
For Each f In ThisWorkbook.Worksheets
    If f.Name <> "Accueil" Then f.Visible = xlSheetVeryHidden
Next f

End Sub

dans un module

Option Explicit

Sub ENTRER()

If [USER] = "" Then
    MsgBox "Saisie du nom d'utilisateur obligatoire.", vbInformation
    Exit Sub
End If

If [MdP] = "" Then
    MsgBox "Saisie du mot de passe obligatoire.", vbInformation
    Exit Sub
End If

If VerifMDP([USER], [MdP]) = False Then
    MsgBox "Erreur Mot de passe et/ou utilisateur. Merci de saisir à nouveau.", vbInformation
    [USER] = ""
    [MdP] = ""
    [USER].Select
    Exit Sub
End If

[USER].Select

AfficheFeuilles [USER]
[USER] = ""
[MdP] = ""

End Sub

Function VerifMDP(Utilisateur As String, MdP As String) As Boolean
Dim rngTrouve As Range
VerifMDP = False

With Sheets("parametrage")
    Set rngTrouve = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole)
    If rngTrouve Is Nothing Then
        VerifMDP = False
    Else
        If rngTrouve.Offset(0, 1) <> MdP Then
            VerifMDP = False
        Else
            VerifMDP = True
        End If
    End If
End With

End Function

Sub AfficheFeuilles(Utilisateur As String)
Dim Col As Byte, i As Byte, Lig As Integer

With Sheets("parametrage") 'dans la feuille paramétrage
    Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
    Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row
    For i = 3 To Col
        If UCase(.Cells(Lig, i)) = "X" Then 'si on trouve un "X" dans la cellule
            Sheets(.Cells(1, i).Value).Visible = True 'on affiche la feuille
        Else
            Sheets(.Cells(1, i).Value).Visible = xlSheetVeryHidden 'sinon on la masque
        End If
    Next i
End With

Sheets("Accueil").Visible = False

End Sub

Merci Steelson.

j'ai copié les choses en modifiant le nom "accueil" par le nom de ma première page, celle ou il y a le code d'accès.
Mais visiblement il y a une sorte de "conflit" avec mon code de base pour arriver sur cette même page: en rouge ce qui beug je pense

Option Explicit

Private Sub Workbook_Open()
Dim f As Worksheet

For Each f In ThisWorkbook.Worksheets
If f.Name <> "PH POLE RADIO" Then f.Visible = xlSheetVeryHidden
Next f

End Sub

Private Sub Workbook_Open()
[_utilisateur] = "Invité"
connecter
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim f As Worksheet

Sheets("PH POLE RADIO").Visible = True
For Each f In ThisWorkbook.Worksheets
If f.Name <> "PH POLE RADIO" Then f.Visible = xlSheetVeryHidden
Next f


End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim cellule As Range
For Each cellule In [_rubriques]
If cellule = Sh.Name Then

If Not cellule.Offset(0, 1) = True Then
PRINCIPALE.Activate
MsgBox "L'accès interdit"
End If

End If
Next
End Sub

Merci a toi

Utilise les balises à ta disposition notamment </> pour y mettre ton code sinon il perd son indentation et devient illisible.

Maintenant sans fichier de ta part, je n'irai pas plus loin.

Mais tu peux reprendre intégralement celui que j'ai posté.

Bonjour Steelson,

Décidément... pas moyen! Ca dépasse mes compétences...
Si je te fourni mon fichier, tu as moyen de résoudre mon problème?

Merci à toi.

s'il n'est pas trop complexe ...

Rechercher des sujets similaires à "interdire ouverture fichier macros pas actives"