Organisation fichier avec plusieurs niveaux d'utilisateurs

Bonjour à tous,

Je me tourne vers vous car je cherche une manière propre d'organiser mes fichiers utilisés par différents profils de personnes :

  • Saisisseurs : Modification des cellules libres, mais fichier verrouillé : pas de modification de formule, certains onglets masqués pour se concentrer sur les "lieux de saisie".
  • Contrôleurs : Accès à tout le fichier, déverrouillé totalement et avec tous les onglets.

J'ai pour le moment réussi à faire ceci, c'est-à-dire que selon le profil le fichier se comporte comme je le souhaite, notamment grâce à un système d'identification à l'ouverture (via formulaire).

Néanmoins je me heurte à un souci :

J'ai 53 de ces fichiers que je compile grâce à Power Query. Mais mon système d'identification à l'ouverture du fichier bloque le bon fonctionnement de la requête car impossible de récupérer des data sur des onglets masqués par défaut à l'ouverture.

En conclusion, mon fichier fonctionne mais son exploitation n'est pas satisfaisante.

Pourriez-vous m'orienter vers un moyen d'exécuter une requête Power Query, ou autre, pour récupérer le contenu d'onglets masqués par défaut ?

Pourriez-vous m'orienter sur la façon dont je pourrais m'identifier automatiquement sur tous les fichiers d'un dossier afin de pouvoir lancer des macro sur ceux ci ou des requêtes. En fait je n'arrive pas, via mon système d'identification à l'ouverture, à m'identifier automatiquement depuis une autre macro située sur un autre fichier d'un autre dossier.

Voici ma macro d'identification :

Function VerifAuth(Utilisateur As String) As Boolean
Dim rngTrouve As Range
VerifAuth = False 'par défaut, renvoie FAUX

With Sheets("Auth") 'dans la feuille
     'cherche le nom d'utilisateur saisi
    Set rngTrouve = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole)
    If rngTrouve Is Nothing Then 'si il ne trouve pas
        VerifAuth = False 'la fonction renvoie faux
    Else 's'il le trouve
            VerifAuth = True 'si VRAI
    '    End If
    End If
End With
End Function
Sub AfficheFeuilles(Utilisateur As String)
Dim Col As Byte, i As Byte, Lig As Integer

    If Utilisateur = "CDG" Then
        Call DPro
            With Sheets("Auth") 'dans la feuille paramétrage
                'comme on va boucler de la colonne 4 à la dernière colonne, on stocke le n° de la dern colonne :
                Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
                'on cherche colonne A le nom d'utilisateur saisi et on stocke son num de ligne
                Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row
                'boucle à partir de 3 car Feuil1 toujours affichée
                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
    Else
        Call Pro
            With Sheets("Auth") 'dans la feuille paramétrage
                'comme on va boucler de la colonne 4 à la dernière colonne, on stocke le n° de la dern colonne :
                Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
                'on cherche colonne A le nom d'utilisateur saisi et on stocke son num de ligne
                Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row
                'boucle à partir de 3 car Feuil1 toujours affichée
                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
    End If

    Worksheets("Compte Résultat").Activate
    Worksheets("Compte Résultat").Range("A1").Select
    Worksheets("ActivMacro").Visible = xlSheetVeryHidden

End Sub

Sub Auth()

'Charge l'Userform en mémoire
Load UserForm1
'Affiche l'Userform
UserForm1.Show

End Sub
'Code se déclenchant au clic sur bouton
Private Sub CommandButton1_Click()
If TextBox1 = "" Then
    'Message à l'utilisateur
    MsgBox "Saisie du nom d'utilisateur obligatoire.", vbInformation
    'sortie de la procédure
    Exit Sub
End If

If VerifAuth(TextBox1) = False Then
    'c'est que le mot de passe ou l'utilisateur est faux donc
    'Message à l'utilisateur
    MsgBox "Erreur utilisateur. Merci de saisir à nouveau.", vbInformation
    TextBox1 = ""

    'on sort de la procédure
    Exit Sub
End If
'A partir d'ici, le code ne se déroule que lorsque mdp et nom sont corrects.
'On peut donc afficher les feuilles correspondants à l'utilisateur saisi
AfficheFeuilles TextBox1
'masque l'UserForm
UserForm1.Hide
End Sub

Private Sub Label1_Click()

End Sub

'code se déclenchant à l'ouverture de Userform1
Private Sub UserForm_Initialize()
'vidage des textbox :
TextBox1 = ""

Me.Caption = "Utilisateur"
'des labels :
Label1.Caption = "Utilisateur"

CommandButton1.Caption = "VALIDER"

End Sub

Je vous remercie :)

Rechercher des sujets similaires à "organisation fichier niveaux utilisateurs"