Microsoft 365 Comment afficher/masquer les lignes en fonction des utilisateurs

tahr76

XLDnaute Nouveau
Bonjour à tous,

Je suis un peu novice en programmation et je cherche à savoir s'il y existe une solution simple pour afficher/masquer uniquement certaines lignes en fonction du nom de l'utilisateur.

Sur le fichier d'absence de l'équipe (qui est un fichier partagé), il y a souvent des erreurs car certains ne font pas super attention et modifient aussi les lignes des petits camarades.
Pour éviter ça, je voudrai que pour les utilisateurs il ne s'affiche que les 5-6 1ères lignes par défaut (mois, jours...) et juste la ligne les concernant.

Ce que je souhaiterai est que par défaut s'affichent uniquement les 5-6 1ères lignes (où sont notées mes informations générales mois, jours...)
Et ensuite uniquement la ligne des congés de l'utilisateur avec un check entre le username et les cases de la colonne D (où sont répertoriés les net ID de chaque utilisateur).
Et bien évidemment il faudrait que les responsables puissent quand même tout voir de leur côté.

Je suis preneur de bonnes idées pour faire ceci SVP.

Merci d'avance pour votre aide.
 

tahr76

XLDnaute Nouveau
Bonjour,

un truc comme ça qui n'est pas bloquant mais évite l'inattention ?

Merci pour ta réponse rapide.

Le souci c'est que si ça n'est pas fait en automatique, personne ne se servira des filtres et donc il y aura toujours le problème.

L'idéal serait vraiment une mini macro qui affiche juste la ligne de l'utilisateur et pas les lignes des autres. Donc soit un filtrer en macro, soit un masquer en macro...

Merci :)
 

Jacky67

XLDnaute Barbatruc
Bonjour à tous,

Je suis preneur de bonnes idées pour faire ceci SVP.
Bonjour,
Ceci placer dans le thisWorkbook laissera visible toutes les lignes à l'administrateur et les lignes pour les autres selon leurs "Environ("USERNAME")" (Nom de connexion), si celui-ci est placé en colonne D à partir de la ligne 7 dans la feuille ayant comme codename "Feuil1"

VB:
Private Sub Workbook_Open()
    Dim i&
    With Feuil1
        Application.ScreenUpdating = False
        'Remplacer "Jacky" par le nom de celui qui a accès à toutes les lignes.
        If Environ("USERNAME") = "Jacky" Then .Rows("7:" & .UsedRange.Rows.Count).Hidden = False: Exit Sub
        For i = 7 To .UsedRange.Rows.Count
            .Rows(i).Hidden = .Range("D" & i) <> Environ("USERNAME")
        Next
    End With
End Sub
Pour connaitre le nom de USERNAME
MsgBox Environ("USERNAME")
 
Dernière édition:

tahr76

XLDnaute Nouveau
Bonjour,
Ceci placer dans le thisWorkbook laissera visible toutes les lignes à l'administrateur et les lignes pour les autres selon leurs "Environ("USERNAME")" (Nom de connexion), si celui-ci est placé en colonne D à partir de la ligne 7 dans la feuille ayant comme codename "Feuil1"

VB:
Private Sub Workbook_Open()
    Dim i&
    With Feuil1
        Application.ScreenUpdating = False
        'Remplacer "Jacky" par le nom de celui qui a accès à toutes les lignes.
        If Environ("USERNAME") = "Jacky" Then .Rows("7:" & .UsedRange.Rows.Count).Hidden = False: Exit Sub
        For i = 7 To .UsedRange.Rows.Count
            .Rows(i).Hidden = .Range("D" & i) <> Environ("USERNAME")
        Next
    End With
End Sub
Pour connaitre le nom de USERNAME
MsgBox Environ("USERNAME")


Nickel merci Jacky67 ça marche très bien. Encore merci pour ton aide.

2 petites questions supplémentaires :
- si je veux qu'il y ait plusieurs administrateurs, comment je les déclare dans cette ligne : If Environ("USERNAME") = "Jacky"
- si je veux faire une boucle pour ensuite masquer automatiquement tous les anciens de l'équipe qui sont partis (j'ai supprimé leur ID dans la colonne D).

Bonne journée.
 

patricktoulon

XLDnaute Barbatruc
&
bonjour
tu les declare pas tu ajoute une condition sur un environ
si je comprend bien chaque utilisateurs a ces propres lignes et l'adiministrateur ou les administrateurs doivent pouvoir voir toutes les lignes c'est bien ca ?
c'est quoi ce tableau en haut ???
 
Dernière édition:

tahr76

XLDnaute Nouveau
&
bonjour
tu les declare pas tu ajoute une condition sur un environ
si je comprend bien chaque utilisateurs a ces propres lignes et l'adiministrateur ou les administrateurs doivent pouvoir voir toutes les lignes c'est bien ca ?
c'est quoi ce tableau en haut ???

Bonjour Patrick.

Ok je fais une ligne par administrateur alors. Je voulais juste savoir si je pouvais les regrouper ensemble ou non.
Oui c'est ça, les administrateurs doivent pouvoir tout voir, et les autres utilisateurs juste leur ligne.

Le haut du tableau, les 1ères lignes c'est juste les années, mois, jours.... de l'info générale qui doit être présente pour tout le monde.

En suivant les lignes de Jacky tout fonctionne, il me reste juste à voir comment masquer les anciens membres de l'équipe pour les admin car ils apparaissent tous...
 

tahr76

XLDnaute Nouveau
Nickel merci Jacky67 ça marche très bien. Encore merci pour ton aide.

2 petites questions supplémentaires :
- si je veux qu'il y ait plusieurs administrateurs, comment je les déclare dans cette ligne : If Environ("USERNAME") = "Jacky"
- si je veux faire une boucle pour ensuite masquer automatiquement tous les anciens de l'équipe qui sont partis (j'ai supprimé leur ID dans la colonne D).

Bonne journée.

J'ai donc créé 3 lignes différentes pour les admin avec le username de chacun.

Pour supprimer les lignes des anciens qui ne sont plus dans l'équipe j'ai testé cette commande mais sans résultat. Si quelqu'un peut m'aider SVP?

If .Range("D" & i) = "" Then .Rows(i).Hidden = True: Exit Sub

Dans la colonne D il y a les USERNAME des personnes en activité, et il n'y a plus rien si la personne n'est plus ici. Et malgré ça, aucune ligne ne se masque.... :(
 

Jacky67

XLDnaute Barbatruc
J'ai donc créé 3 lignes différentes pour les admin avec le username de chacun.

Pour supprimer les lignes des anciens qui ne sont plus dans l'équipe j'ai testé cette commande mais sans résultat. Si quelqu'un peut m'aider SVP?

If .Range("D" & i) = "" Then .Rows(i).Hidden = True: Exit Sub

Dans la colonne D il y a les USERNAME des personnes en activité, et il n'y a plus rien si la personne n'est plus ici. Et malgré ça, aucune ligne ne se masque.... :(
Re..
Essaye ceci, cela devrait répondre à tes problèmes
VB:
Private Sub Workbook_Open()
    Dim i&
    With Feuil1
        Application.ScreenUpdating = False
        'Remplacer "Jacky"  et "Jacky1" par les noms de ceux qui ont accès à toutes les lignes.
        .Rows("7:" & .UsedRange.Rows.Count).Hidden = True
        If Environ("USERNAME") = "Jacky" Or Environ("USERNAME") = "Jacky1" Then .Rows("7:" & .UsedRange.Rows.Count).Hidden = False: Exit Sub
        For i = 7 To .UsedRange.Rows.Count
            .Rows(i).Hidden = .Range("D" & i) <> Environ("USERNAME")
        Next
    End With
End Sub
**Ce code est lancé à chaque ouverture de ce classeur, le faite de supprimer un utilisateur ne lance pas ce code. Mais comme les utilisateurs ouvrent le fichier, il ne verront que leurs lignes.
Si cela est nécessaire, faudra ajouter un code dans la feuille même.
 
Dernière édition:

tahr76

XLDnaute Nouveau
Re..
Essaye ceci, cela devrait répondre à tes problèmes
VB:
Private Sub Workbook_Open()
    Dim i&
    With Feuil1
        Application.ScreenUpdating = False
        'Remplacer "Jacky"  et "Jacky1" par les noms de ceux qui ont accès à toutes les lignes.
        .Rows("7:" & .UsedRange.Rows.Count).Hidden = True
        If Environ("USERNAME") = "Jacky" Or Environ("USERNAME") = "Jacky1" Then .Rows("7:" & .UsedRange.Rows.Count).Hidden = False: Exit Sub
        For i = 7 To .UsedRange.Rows.Count
            .Rows(i).Hidden = .Range("D" & i) <> Environ("USERNAME")
        Next
    End With
End Sub
**Ce code est lancé à chaque ouverture de ce classeur, le faite de supprimer un utilisateur ne lance pas ce code. Mais comme les utilisateurs ouvrent le fichier, il ne verront que leurs lignes.
Si cela est nécessaire, faudra ajouter un code dans la feuille même.

Nickel Jacky, j'avais complètement oublié la commande OR qui est pourtant basique. Quand je dis que j'ai tout perdu avec le temps.
Donc ok pour les administrateurs, par contre masquer les USER qui n'existent plus ne fonctionne pas.

Je me suis peut être mal exprimé : dans ce fichier on a aussi bien les USER en activités, que les anciens qui sont partis. Je ne peux pas supprimer les lignes des anciens sinon on perdrait l'historique.

Pour chaque USER normal, vu qu'il y a le contrôle sur leur USERNAME, seule leur ligne s'affiche donc pas de souci.

Pour nous les admin, par contre c'est un peu gênant d'avoir toujours les lignes des anciens qui ne sont plus ici d'affichées à chaque fois. Et se sont uniquement ces lignes que je voudrais masquer pour les admin.
Pour repérer ces "anciens" qui sont partis, leur colonne D est vide, j'ai retiré leur identifiant. Et pour ça que je voulais qu'après l'affichage pour les admin, que ça vienne contrôler la colonne D et à chaque case vide, que ça vienne masquer la ligne en question.

Encore merci Jacky tu gères :)
 

Jacky67

XLDnaute Barbatruc
Nickel Jacky, j'avais complètement oublié la commande OR qui est pourtant basique. Quand je dis que j'ai tout perdu avec le temps.
Donc ok pour les administrateurs, par contre masquer les USER qui n'existent plus ne fonctionne pas.

Je me suis peut être mal exprimé : dans ce fichier on a aussi bien les USER en activités, que les anciens qui sont partis. Je ne peux pas supprimer les lignes des anciens sinon on perdrait l'historique.

Pour chaque USER normal, vu qu'il y a le contrôle sur leur USERNAME, seule leur ligne s'affiche donc pas de souci.

Pour nous les admin, par contre c'est un peu gênant d'avoir toujours les lignes des anciens qui ne sont plus ici d'affichées à chaque fois. Et se sont uniquement ces lignes que je voudrais masquer pour les admin.
Pour repérer ces "anciens" qui sont partis, leur colonne D est vide, j'ai retiré leur identifiant. Et pour ça que je voulais qu'après l'affichage pour les admin, que ça vienne contrôler la colonne D et à chaque case vide, que ça vienne masquer la ligne en question.

Encore merci Jacky tu gères :)
Ok, alors essaye comme ceci
**Simplifié
VB:
Private Sub Workbook_Open()
    Dim i&
    With Feuil1
        Application.ScreenUpdating = False
        'Remplacer "Jacky"  et "Jacky1" par les noms de ceux qui ont accès à toutes les lignes.
           For i = 7 To .UsedRange.Rows.Count
            If Environ("USERNAME") = "Jacky" Or Environ("USERNAME") = "Jacky1" Then
                .Rows(i).Hidden = .Range("D" & i) = ""
            Else
                .Rows(i).Hidden = .Range("D" & i) <> Environ("USERNAME")
            End If
        Next
    End With
End Sub
 
Dernière édition:

tahr76

XLDnaute Nouveau
Ok, alors essaye comme ceci
**Simplifié
VB:
Private Sub Workbook_Open()
    Dim i&
    With Feuil1
        Application.ScreenUpdating = False
        'Remplacer "Jacky"  et "Jacky1" par les noms de ceux qui ont accès à toutes les lignes.
           For i = 7 To .UsedRange.Rows.Count
            If Environ("USERNAME") = "Jacky" Or Environ("USERNAME") = "Jacky1" Then
                .Rows(i).Hidden = .Range("D" & i) = ""
            Else
                .Rows(i).Hidden = .Range("D" & i) <> Environ("USERNAME")
            End If
        Next
    End With
End Sub

Tout marche nickel, merci Jacky. Si tu passes dans le 93 ou 76 je te paierai une bière avec plaisir :)
 

Discussions similaires

Réponses
2
Affichages
473

Statistiques des forums

Discussions
312 174
Messages
2 085 945
Membres
103 055
dernier inscrit
DrKiwi