Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vba - onglet - renommer

12 réponses
Avatar
j-pascal
Bonjour à tous,

Je souhaiterais que l'utilisateur ne puisse pas renommer un onglet. Pour
info, j'ai seulement 2 onglets dans mon classeur gérés alternativement par
la propriété "very hidden" (l'onglet 1 affiche un message si les macros
n'ont pas été acceptées ... a contrario, l'onglet 2 correspond à la feuille
de travail). Le code est invisible pour l'utilisateur, et la feuille
protégée, mais il y a un Hic : on peut modifier la feuille si on renomme
l'onglet ! Ex. le scrollarea limite l'accès à certaines plages, mais pour un
nom de feuille donné !

Comme souvent, je pense que ma question est d'une grande limpidité ;-) ;-)
;-)

Merci d'avance pour vos (remarques !) réponses éventuelles.

--
Cordialement @+
JP

2 réponses

1 2
Avatar
j-pascal
"MichDenis" a écrit dans le message de news:

Dans le premier message, il y avait ceci :
'-----------------
Si tu protèges aussi le classeur pas seulement les feuilles,
les usagers ne pourront pas modifier le nom des feuilles.


J'avais bien compris, mais je ne souhaitais pas que l'utilisateur est à
mettre un MdP pour ouvrir le classeur !
Cette solution me paraît donc plus subtile que tu ne le laisses entendre.
'-----------------

C'était l'équivalent à ceci :
Thisworkbook.Protect "travail", true, true

Tout ceci n'est pas évident lorsque l'on débute !
Je n'ai jamais prétendu le contraire ! Désolé d'essayer de comprendre les

solutions qu'on veut bien m'apporter sur ce forum.
Merci quand-même !
JP

Salutations.



"j-pascal" a écrit dans le message de news:
eGr$
Re,

Au fait, ces deux derniers conseils étaient-ils strictement conformes à ta
toute première réponse (que je n'ai pas pu mettre en pratique) ? Ou bien,
au
vu du fichier, ta solution tu as finalement adopté une autre solution ?
JP

"MichDenis" a écrit dans le message de news:

Juste AVANT ta ligne qui rend visible ta feuille, tu déprotèges ton
classeur

ThisWorkbook.Unprotect "travail"


"j-pascal" a écrit dans le message de news:

Bonjour Mich,

Incroyable ! Ca marche (impossible de renommer l'onglet !!) ... mais
quand
je ferme le classeur, j'ai le msg : "erreur d'exécution 1004" "impossible
de
définir la propriété visible de la classe worksheet" ;-(

A+ ?

JP

PS : question subsidiaire : comment fonctionne ton code ? Quel différence
avec la protection classique d'un classeur ?

"MichDenis" a écrit dans le message de news:

J'ai seulement ajouté la ligne de code suivante à ta procédure auto_open

Thisworkbook.Protect "travail", true, true

http://cjoint.com/?eBeZgbCSEJ



"j-pascal" a écrit dans le message de news:

Bonsoir MichDenis,

Vraiment désolé, je n'ai pas compris. J'ai l'impression d'avoir fait ce
que
tu proposes, mais ça ne marche pas et même pire j'ai un message étrange
quand je relance mon appli.
Je doute que tu le fasses, mais mon fichier (sans tes modifs) est là :
http://cjoint.com/?eAu2gstQst
Je me demande si les "Private Sub" ou les UserForm n'y sont pas pour
quelque
chose ?! Peut-être qu'il y a une particularité dans mon fichier qui est
incompatible avec la mise en application de tes conseils.

Le MdP pour accéder au VBA est "travail2"

JP


"MichDenis" a écrit dans le message de news:

Dans la fenêtre de l'éditeur de code
dans la section "VBAProjet",
quand tu double-cliques sur le nom de ton projet vba,
la liste des objets ("Feuil, workbook, module , formulaire)
s'affiche dans l'arborescence.

Les objets feuilles sont affichés de cette façon
Feuil1(Feuil1)

Feuil1 : Représente le nom de l'objet pour modifier son nom
tu dois afficher la fenêtre des propriétés et modifier la
propriété "Name" lorsque l'objet est sélectionné.
Ce n'est pas obligatoire de le repabtiser... c'est
seulement
pour le programmeur -> tu peux lui donner un nom
significatif
en fonction de son contenu si tu le désires !
A ce nom d'objet, seul le programmeur y a accès et il n'est
pas
influencé par le changement de nom de l'onglet de la
feuille.

(Feuiil) : Représente le nom de l'onglet de la feuille de l'interface
de
la feuille de calcul.
Peut changer selon l'humeur de l'usager

En conséquence : au lieu d'utiliser ceci :
Worksheets("Feuil1") -> qui est le nom de l'onglet
tu utilises ceci :
Feuil1.Range("A1") qui est la propriété Name de l'objet.



"j-pascal" a écrit dans le message de news:

Bonsoir MichDenis,

Le "Name" dans ma fenêtre de propriétés = "Feuil2" (en fait mon onglet
"planning activités").
Faut-il que je commence par renommer le "Name" de ma fenêtre propriétés




en
"planning activités" ?
Faut-il ensuite que je remplace tous les Worksheets(2).Range par
planning_activité.Range ?
Je ne suis pas sûr d'avoir compris (le "pas sûr" me paraît même très
exagéré
!)

A+ ?

JP

PS : comment puis-je "repérer" tous les Worksheets(2) pour être sûr de
ne
pas en laisser un de côté ?
PS : le plus simple aurait été de ne pas avoir d'onglet visible, mais
je
crois que ce n'est pas possible !

"MichDenis" a écrit dans le message de news:
%
Si tu protèges aussi le classeur pas seulement les feuilles,
les usagers ne pourront pas modifier le nom des feuilles.

Dans ton code, si tu utilises la propriété "Name" des modules
feuille, les usagers pourront s'amuser à modifier le nom des
feuilles sans aucune incidence sur ton code..

Exemple au lieu de
Worksheets("NomOngletFeuill").Range...

Tu écris en utilisant le "Name" de l'objet Feuille que tu vois dans la
fenêtre de l'éditeur de code
MaFeuille.Range("A10")....




"j-pascal" a écrit dans le message de news:
%
Bonjour à tous,

Je souhaiterais que l'utilisateur ne puisse pas renommer un onglet.
Pour
info, j'ai seulement 2 onglets dans mon classeur gérés alternativement
par
la propriété "very hidden" (l'onglet 1 affiche un message si les
macros
n'ont pas été acceptées ... a contrario, l'onglet 2 correspond à la
feuille
de travail). Le code est invisible pour l'utilisateur, et la feuille
protégée, mais il y a un Hic : on peut modifier la feuille si on
renomme
l'onglet ! Ex. le scrollarea limite l'accès à certaines plages, mais
pour
un
nom de feuille donné !

Comme souvent, je pense que ma question est d'une grande limpidité ;-)
;-)
;-)

Merci d'avance pour vos (remarques !) réponses éventuelles.

--
Cordialement @+
JP























Avatar
j-pascal
"j-pascal" a écrit dans le message de news:


"MichDenis" a écrit dans le message de news:

Dans le premier message, il y avait ceci :
'-----------------
Si tu protèges aussi le classeur pas seulement les feuilles,
les usagers ne pourront pas modifier le nom des feuilles.


J'avais bien compris, mais je ne souhaitais pas que l'utilisateur est à


OUPSSSSS .... ait à mettre ...


mettre un MdP pour ouvrir le classeur !
Cette solution me paraît donc plus subtile que tu ne le laisses entendre.
'-----------------

C'était l'équivalent à ceci :
Thisworkbook.Protect "travail", true, true

Tout ceci n'est pas évident lorsque l'on débute !
Je n'ai jamais prétendu le contraire ! Désolé d'essayer de comprendre les

solutions qu'on veut bien m'apporter sur ce forum.
Merci quand-même !
JP

Salutations.



"j-pascal" a écrit dans le message de news:
eGr$
Re,

Au fait, ces deux derniers conseils étaient-ils strictement conformes à
ta
toute première réponse (que je n'ai pas pu mettre en pratique) ? Ou bien,
au
vu du fichier, ta solution tu as finalement adopté une autre solution ?
JP

"MichDenis" a écrit dans le message de news:

Juste AVANT ta ligne qui rend visible ta feuille, tu déprotèges ton
classeur

ThisWorkbook.Unprotect "travail"


"j-pascal" a écrit dans le message de news:

Bonjour Mich,

Incroyable ! Ca marche (impossible de renommer l'onglet !!) ... mais
quand
je ferme le classeur, j'ai le msg : "erreur d'exécution 1004"
"impossible
de
définir la propriété visible de la classe worksheet" ;-(

A+ ?

JP

PS : question subsidiaire : comment fonctionne ton code ? Quel
différence
avec la protection classique d'un classeur ?

"MichDenis" a écrit dans le message de news:

J'ai seulement ajouté la ligne de code suivante à ta procédure
auto_open

Thisworkbook.Protect "travail", true, true

http://cjoint.com/?eBeZgbCSEJ



"j-pascal" a écrit dans le message de news:

Bonsoir MichDenis,

Vraiment désolé, je n'ai pas compris. J'ai l'impression d'avoir fait ce
que
tu proposes, mais ça ne marche pas et même pire j'ai un message étrange
quand je relance mon appli.
Je doute que tu le fasses, mais mon fichier (sans tes modifs) est là :
http://cjoint.com/?eAu2gstQst
Je me demande si les "Private Sub" ou les UserForm n'y sont pas pour
quelque
chose ?! Peut-être qu'il y a une particularité dans mon fichier qui est
incompatible avec la mise en application de tes conseils.

Le MdP pour accéder au VBA est "travail2"

JP


"MichDenis" a écrit dans le message de news:

Dans la fenêtre de l'éditeur de code
dans la section "VBAProjet",
quand tu double-cliques sur le nom de ton projet vba,
la liste des objets ("Feuil, workbook, module , formulaire)
s'affiche dans l'arborescence.

Les objets feuilles sont affichés de cette façon
Feuil1(Feuil1)

Feuil1 : Représente le nom de l'objet pour modifier son nom
tu dois afficher la fenêtre des propriétés et modifier la
propriété "Name" lorsque l'objet est sélectionné.
Ce n'est pas obligatoire de le repabtiser... c'est
seulement
pour le programmeur -> tu peux lui donner un nom
significatif
en fonction de son contenu si tu le désires !
A ce nom d'objet, seul le programmeur y a accès et il n'est
pas
influencé par le changement de nom de l'onglet de la
feuille.

(Feuiil) : Représente le nom de l'onglet de la feuille de l'interface
de
la feuille de calcul.
Peut changer selon l'humeur de l'usager

En conséquence : au lieu d'utiliser ceci :
Worksheets("Feuil1") -> qui est le nom de l'onglet
tu utilises ceci :
Feuil1.Range("A1") qui est la propriété Name de l'objet.



"j-pascal" a écrit dans le message de news:

Bonsoir MichDenis,

Le "Name" dans ma fenêtre de propriétés = "Feuil2" (en fait mon onglet
"planning activités").
Faut-il que je commence par renommer le "Name" de ma fenêtre





propriétés
en
"planning activités" ?
Faut-il ensuite que je remplace tous les Worksheets(2).Range par
planning_activité.Range ?
Je ne suis pas sûr d'avoir compris (le "pas sûr" me paraît même très
exagéré
!)

A+ ?

JP

PS : comment puis-je "repérer" tous les Worksheets(2) pour être sûr de
ne
pas en laisser un de côté ?
PS : le plus simple aurait été de ne pas avoir d'onglet visible, mais
je
crois que ce n'est pas possible !

"MichDenis" a écrit dans le message de news:
%
Si tu protèges aussi le classeur pas seulement les feuilles,
les usagers ne pourront pas modifier le nom des feuilles.

Dans ton code, si tu utilises la propriété "Name" des modules
feuille, les usagers pourront s'amuser à modifier le nom des
feuilles sans aucune incidence sur ton code..

Exemple au lieu de
Worksheets("NomOngletFeuill").Range...

Tu écris en utilisant le "Name" de l'objet Feuille que tu vois dans
la
fenêtre de l'éditeur de code
MaFeuille.Range("A10")....




"j-pascal" a écrit dans le message de news:
%
Bonjour à tous,

Je souhaiterais que l'utilisateur ne puisse pas renommer un onglet.
Pour
info, j'ai seulement 2 onglets dans mon classeur gérés
alternativement
par
la propriété "very hidden" (l'onglet 1 affiche un message si les
macros
n'ont pas été acceptées ... a contrario, l'onglet 2 correspond à la
feuille
de travail). Le code est invisible pour l'utilisateur, et la feuille
protégée, mais il y a un Hic : on peut modifier la feuille si on
renomme
l'onglet ! Ex. le scrollarea limite l'accès à certaines plages, mais
pour
un
nom de feuille donné !

Comme souvent, je pense que ma question est d'une grande limpidité
;-)
;-)
;-)

Merci d'avance pour vos (remarques !) réponses éventuelles.

--
Cordialement @+
JP



























1 2