Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Microsoft 365Ouverture d'un onglet par un seul utilisateur
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
J'ai vraiment besoin de votre aide mais c'est trop complexe pour moi.
J'ai un fichier Excel sous teams ou plusieurs personnes interviennent dessus. Chacun a son onglet.
Est-il possible que chacun accède à son onglet SANS ACCEDER aux autres.
Paul ne peut ouvrir que l'onglet Paul et récap
Denis ne peut ouvrir que l'onglet Denis et récap
Vincent ne peut ouvrir que l'onglet Vincent et récap
Jean ne peut ouvrir que l'onglet Jean et récap
Private Sub Workbook_Open()
Sheets("User").Visible = Application.UserName = "toto"
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets("User").Visible = False
End Sub
Pour un fichier Excel ouvert sur Teams la VBA ne fonctionne pas il faut utiliser les Office Script.
Il est possible de récupérer le nom d'utilisateur ou l'adresse mail de la personne qui ouvre le fichier. Problème il n'est pas possible contrarement aux Vba de lancer le script directement à l'ouverture. Deux solutions s'offrent à vous :
la première c'est de faire une page d'accueil avec un bouton qui permet de lancer le script. Les feuilles sont par défaut masqués et ceci ouvre la feuille de l'utilisateur.
Passer par un flux PowerAutomate qui va récupérer le nom d'utilisateur et éxécuter automatiquement le script.
Je peux vous écrire rapidement le script nécessaire mais si je dois l'adapter à votre environnement office365, pouvez vous me préciser la structure de vos comptes office365 (adresse mail : prénom.nom@societe.com ou autres) ?
Pour un fichier Excel ouvert sur Teams la VBA ne fonctionne pas il faut utiliser les Office Script.
Il est possible de récupérer le nom d'utilisateur ou l'adresse mail de la personne qui ouvre le fichier. Problème il n'est pas possible contrarement aux Vba de lancer le script directement à l'ouverture. Deux solutions s'offrent à vous :
la première c'est de faire une page d'accueil avec un bouton qui permet de lancer le script. Les feuilles sont par défaut masqués et ceci ouvre la feuille de l'utilisateur.
Passer par un flux PowerAutomate qui va récupérer le nom d'utilisateur et éxécuter automatiquement le script.
Je peux vous écrire rapidement le script nécessaire mais si je dois l'adapter à votre environnement office365, pouvez vous me préciser la structure de vos comptes office365 (adresse mail : prénom.nom@societe.com ou autres) ?
Quand il ouvre le fichier leur nom apparait. On le voit. Ils ont un identifiant par exemple Denis (moi) je suis répertorier à l'identifiant tzrt124
Est ce que cet élément te convient?
Quand il ouvre le fichier leur nom apparait. On le voit. Ils ont un identifiant par exemple Denis (moi) je suis répertorier à l'identifiant tzrt124
Est ce que cet élément te convient?
Voici le fichier. Il faut que tu mappes dans la feuille Param le nom d'utilisateur et le nom de la feuille. Tu peux ajouter 100 utilisateurs.
J'ai fait un bouton sur la page accueil qui lance le script, il est nécessaire de cliquer sur le bouton. Si tu souhaites que le scipt se lance automatiquement il faut passer par PowerAutomate.
Pour le moment les feuilles sont maqués mais il est possible en modifiant le code visibilité de hidden à VeryHidden c'est à dire non affichables par les utilisateurs en réalisant un clic droit sur les feuilles. 95 % des utilisateurs ne savent pas les afficher dans ce cas là ce qui évite de mettre un mot de passe.
JavaScript:
function main(workbook: ExcelScript.Workbook): string {
// Log pour debug
console.log(`Démarrage du script de navigation`);
// Récupérer les propriétés du classeur pour identifier l'utilisateur
const props = workbook.getProperties();
const dernierAuteur = props.getLastAuthor();
console.log(`Dernier auteur détecté : ${dernierAuteur}`);
// Si on ne peut pas récupérer l'auteur
if (!dernierAuteur) {
console.log(`ERREUR: Impossible de récupérer l'identité de l'utilisateur`);
return `ERROR: Impossible d'identifier l'utilisateur courant`;
}
// Nettoyer l'email
const emailUtilisateur = dernierAuteur.trim().toLowerCase();
console.log(`Email formaté : ${emailUtilisateur}`);
// Récupérer la feuille de paramètres
const feuilleParam = workbook.getWorksheet("Param");
if (!feuilleParam) {
console.log(`ERREUR CRITIQUE: La feuille "Param" n'existe pas`);
// Afficher l'erreur dans la feuille Accueil
const feuilleAccueil = workbook.getWorksheet("Accueil");
if (feuilleAccueil) {
const celluleErreur = feuilleAccueil.getRange("B5");
celluleErreur.setValue(`⚠️ ERREUR: La feuille "Param" est introuvable`);
const format = celluleErreur.getFormat();
format.getFont().setColor("#FF0000");
format.getFont().setBold(true);
format.getFont().setSize(12);
}
return `ERROR: La feuille "Param" est introuvable dans le classeur`;
}
// Lire la plage de correspondance A2:B1000
const plageCorrespondance = feuilleParam.getRange("A2:B1000");
const valeurs = plageCorrespondance.getValues();
// Chercher la correspondance email → feuille
let nomFeuilleAfficher: string | null = null;
for (let i = 0; i < valeurs.length; i++) {
const emailLigne = valeurs[i][0];
const feuilleLigne = valeurs[i][1];
// Vérifier si la ligne contient des données
if (emailLigne && feuilleLigne) {
const emailLigneFormate = emailLigne.toString().trim().toLowerCase();
if (emailLigneFormate === emailUtilisateur) {
nomFeuilleAfficher = feuilleLigne.toString().trim();
console.log(`Correspondance trouvée : ${emailUtilisateur} → ${nomFeuilleAfficher}`);
break;
}
}
}
// Récupérer la feuille Accueil pour les messages
const feuilleAccueil = workbook.getWorksheet("Accueil");
// Si aucune correspondance trouvée
if (!nomFeuilleAfficher) {
console.log(`ERREUR: Aucune correspondance trouvée pour ${emailUtilisateur}`);
if (feuilleAccueil) {
const celluleErreur = feuilleAccueil.getRange("B5");
celluleErreur.setValue(`⚠️ Aucun accès configuré pour : ${emailUtilisateur}`);
const format = celluleErreur.getFormat();
format.getFont().setColor("#FF0000");
format.getFont().setBold(true);
format.getFont().setSize(12);
const celluleInfo = feuilleAccueil.getRange("B6");
celluleInfo.setValue(`Contactez l'administrateur pour obtenir l'accès.`);
celluleInfo.getFormat().getFont().setItalic(true);
}
return `ERROR: Aucune correspondance trouvée dans Param pour l'email "${emailUtilisateur}"`;
}
// Vérifier si la feuille cible existe
const feuilleUtilisateur = workbook.getWorksheet(nomFeuilleAfficher);
if (!feuilleUtilisateur) {
console.log(`ERREUR: La feuille "${nomFeuilleAfficher}" n'existe pas`);
// Lister les feuilles disponibles pour debug
const toutesLesFeuilles = workbook.getWorksheets();
const nomsFeuillesDisponibles = toutesLesFeuilles
.map(f => f.getName())
.filter(nom => nom !== "Param" && nom !== "Accueil")
.join(", ");
console.log(`Feuilles disponibles : ${nomsFeuillesDisponibles}`);
if (feuilleAccueil) {
const celluleErreur = feuilleAccueil.getRange("B5");
celluleErreur.setValue(`⚠️ Erreur de configuration : La feuille "${nomFeuilleAfficher}" n'existe pas`);
const format = celluleErreur.getFormat();
format.getFont().setColor("#FF0000");
format.getFont().setBold(true);
format.getFont().setSize(12);
const celluleInfo = feuilleAccueil.getRange("B6");
celluleInfo.setValue(`Feuilles disponibles : ${nomsFeuillesDisponibles}`);
}
return `ERROR: La feuille "${nomFeuilleAfficher}" spécifiée dans Param n'existe pas. Feuilles disponibles: ${nomsFeuillesDisponibles}`;
}
// Récupérer toutes les feuilles
const toutesLesFeuilles = workbook.getWorksheets();
// Parcourir toutes les feuilles pour gérer la visibilité
for (let feuille of toutesLesFeuilles) {
const nomFeuille = feuille.getName();
if (nomFeuille === nomFeuilleAfficher) {
// Rendre visible et activer la feuille de l'utilisateur
feuille.setVisibility(ExcelScript.SheetVisibility.visible);
feuille.activate();
console.log(`Feuille ${nomFeuille} activée`);
} else if (nomFeuille === "Accueil") {
// Garder Accueil visible
feuille.setVisibility(ExcelScript.SheetVisibility.visible);
} else if (nomFeuille === "Param") {
// Masquer complètement Param
feuille.setVisibility(ExcelScript.SheetVisibility.hidden);
console.log(`Feuille Param masquée`);
} else {
// Masquer toutes les autres feuilles
feuille.setVisibility(ExcelScript.SheetVisibility.hidden);
console.log(`Feuille ${nomFeuille} masquée`);
}
}
}
Voici le fichier. Il faut que tu mappes dans la feuille Param le nom d'utilisateur et le nom de la feuille. Tu peux ajouter 100 utilisateurs.
J'ai fait un bouton sur la page accueil qui lance le script, il est nécessaire de cliquer sur le bouton. Si tu souhaites que le scipt se lance automatiquement il faut passer par PowerAutomate.
Pour le moment les feuilles sont maqués mais il est possible en modifiant le code visibilité de hidden à VeryHidden c'est à dire non affichables par les utilisateurs en réalisant un clic droit sur les feuilles. 95 % des utilisateurs ne savent pas les afficher dans ce cas là ce qui évite de mettre un mot de passe.
JavaScript:
function main(workbook: ExcelScript.Workbook): string {
// Log pour debug
console.log(`Démarrage du script de navigation`);
// Récupérer les propriétés du classeur pour identifier l'utilisateur
const props = workbook.getProperties();
const dernierAuteur = props.getLastAuthor();
console.log(`Dernier auteur détecté : ${dernierAuteur}`);
// Si on ne peut pas récupérer l'auteur
if (!dernierAuteur) {
console.log(`ERREUR: Impossible de récupérer l'identité de l'utilisateur`);
return `ERROR: Impossible d'identifier l'utilisateur courant`;
}
// Nettoyer l'email
const emailUtilisateur = dernierAuteur.trim().toLowerCase();
console.log(`Email formaté : ${emailUtilisateur}`);
// Récupérer la feuille de paramètres
const feuilleParam = workbook.getWorksheet("Param");
if (!feuilleParam) {
console.log(`ERREUR CRITIQUE: La feuille "Param" n'existe pas`);
// Afficher l'erreur dans la feuille Accueil
const feuilleAccueil = workbook.getWorksheet("Accueil");
if (feuilleAccueil) {
const celluleErreur = feuilleAccueil.getRange("B5");
celluleErreur.setValue(`⚠️ ERREUR: La feuille "Param" est introuvable`);
const format = celluleErreur.getFormat();
format.getFont().setColor("#FF0000");
format.getFont().setBold(true);
format.getFont().setSize(12);
}
return `ERROR: La feuille "Param" est introuvable dans le classeur`;
}
// Lire la plage de correspondance A2:B1000
const plageCorrespondance = feuilleParam.getRange("A2:B1000");
const valeurs = plageCorrespondance.getValues();
// Chercher la correspondance email → feuille
let nomFeuilleAfficher: string | null = null;
for (let i = 0; i < valeurs.length; i++) {
const emailLigne = valeurs[i][0];
const feuilleLigne = valeurs[i][1];
// Vérifier si la ligne contient des données
if (emailLigne && feuilleLigne) {
const emailLigneFormate = emailLigne.toString().trim().toLowerCase();
if (emailLigneFormate === emailUtilisateur) {
nomFeuilleAfficher = feuilleLigne.toString().trim();
console.log(`Correspondance trouvée : ${emailUtilisateur} → ${nomFeuilleAfficher}`);
break;
}
}
}
// Récupérer la feuille Accueil pour les messages
const feuilleAccueil = workbook.getWorksheet("Accueil");
// Si aucune correspondance trouvée
if (!nomFeuilleAfficher) {
console.log(`ERREUR: Aucune correspondance trouvée pour ${emailUtilisateur}`);
if (feuilleAccueil) {
const celluleErreur = feuilleAccueil.getRange("B5");
celluleErreur.setValue(`⚠️ Aucun accès configuré pour : ${emailUtilisateur}`);
const format = celluleErreur.getFormat();
format.getFont().setColor("#FF0000");
format.getFont().setBold(true);
format.getFont().setSize(12);
const celluleInfo = feuilleAccueil.getRange("B6");
celluleInfo.setValue(`Contactez l'administrateur pour obtenir l'accès.`);
celluleInfo.getFormat().getFont().setItalic(true);
}
return `ERROR: Aucune correspondance trouvée dans Param pour l'email "${emailUtilisateur}"`;
}
// Vérifier si la feuille cible existe
const feuilleUtilisateur = workbook.getWorksheet(nomFeuilleAfficher);
if (!feuilleUtilisateur) {
console.log(`ERREUR: La feuille "${nomFeuilleAfficher}" n'existe pas`);
// Lister les feuilles disponibles pour debug
const toutesLesFeuilles = workbook.getWorksheets();
const nomsFeuillesDisponibles = toutesLesFeuilles
.map(f => f.getName())
.filter(nom => nom !== "Param" && nom !== "Accueil")
.join(", ");
console.log(`Feuilles disponibles : ${nomsFeuillesDisponibles}`);
if (feuilleAccueil) {
const celluleErreur = feuilleAccueil.getRange("B5");
celluleErreur.setValue(`⚠️ Erreur de configuration : La feuille "${nomFeuilleAfficher}" n'existe pas`);
const format = celluleErreur.getFormat();
format.getFont().setColor("#FF0000");
format.getFont().setBold(true);
format.getFont().setSize(12);
const celluleInfo = feuilleAccueil.getRange("B6");
celluleInfo.setValue(`Feuilles disponibles : ${nomsFeuillesDisponibles}`);
}
return `ERROR: La feuille "${nomFeuilleAfficher}" spécifiée dans Param n'existe pas. Feuilles disponibles: ${nomsFeuillesDisponibles}`;
}
// Récupérer toutes les feuilles
const toutesLesFeuilles = workbook.getWorksheets();
// Parcourir toutes les feuilles pour gérer la visibilité
for (let feuille of toutesLesFeuilles) {
const nomFeuille = feuille.getName();
if (nomFeuille === nomFeuilleAfficher) {
// Rendre visible et activer la feuille de l'utilisateur
feuille.setVisibility(ExcelScript.SheetVisibility.visible);
feuille.activate();
console.log(`Feuille ${nomFeuille} activée`);
} else if (nomFeuille === "Accueil") {
// Garder Accueil visible
feuille.setVisibility(ExcelScript.SheetVisibility.visible);
} else if (nomFeuille === "Param") {
// Masquer complètement Param
feuille.setVisibility(ExcelScript.SheetVisibility.hidden);
console.log(`Feuille Param masquée`);
} else {
// Masquer toutes les autres feuilles
feuille.setVisibility(ExcelScript.SheetVisibility.hidden);
console.log(`Feuille ${nomFeuille} masquée`);
}
}
}
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD