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 FunctionSub 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 SubJe vous remercie :)