"Interdire" l'acces à certaines cellules

GUGUSSE2

XLDnaute Occasionnel
Bonjour,

Je veux créer une feuille de calcul,
Particularité : Selon les réponses données par l'utilisateur, je veux que certains champs soient "inaccessible" car ils ont une valeur "prédéfinie" par la première donnée.
Exemple pour un calcul qui demande :
- cas particulier 60 : Ø, maxi
- cas particulier 0 : Ø, maxi
- cas général A : Ø, mini, maxi, angle
Avec, une fois choisi le cas ("60", "0" ou "A") par un clic sur la case correspondante, la visualisation de la figure adaptée (voir fichier joint).
Dans les cas particuliers "60" et "0", le mini et l'angle ne sont pas demandés et doivent donc être "inaccessibles" pour l'utilisateur (le mini vaut "zéro" et l'angle vaut soit 60° soit 0°).
Questions :
- est-il possible de "bloquer" l'accès à certaines cases (et de leur affecter une valeur) ?
- comment gérer l'affichage des figures par un "clic" sur une case (je sais le faire en fonction d'une valeur, mais en fonction d'un "clic" ?) ?
Je reste à votre écoute pour de plus amples renseignements.

Cordialement,
GUGUSSE2.
 

Pièces jointes

  • Figures tableur.xlsx
    13.8 KB · Affichages: 32

GUGUSSE2

XLDnaute Occasionnel
Bonjour,

Avec, une fois choisi le cas ("60", "0" ou "A") par un clic sur la case correspondante, la visualisation de la figure adaptée (voir fichier joint)
Je n'avait pas d'idée préconçue au départ.
C'est l'évolution des réponse qui m'ont amené à la "UserForm" que j'ai créé.
Ne sachant pas que l'on pouvait affecter une macro à une image, je ne pouvais pas envisager cette solution.
Je demande à voir et je suis prêt à l'adopter s'il y a bénéfice pour l'utilisateur (à mon sens évidement !).

Pour ta ressource, je suis effectivement avec EXCEL 2007 sur W7-64.
Supprimer "PtrSafe" ne changeait rien. Alors j'ai mis un apostrophe au début de chaque ligne qui était en rouge.
J'ai sûrement perdu des fonctionnalités, mais je peux copier les codes sans problème.
Peux-tu me proposer un aperçu de la solution "images avec macro" ?

Cordialement,
GUGUSSE2.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Mais les ligne en rouge, ce n'étaient pas celles qui contenaient ce mot clé PtrSafe qui n'est pas reconnu sur ta machine ? Si c'était ça, normalement ça marche toujours de l'enlever tout simplement !
Pour affecter une macro, écrite dans un module standard, à un contrôle de formulaire (pour les contrôles ActiveX ça marche autrement) il suffit de faire un clic droit dessus, Affecter une macro, sélectionner celle qu'il faut. Pour activer une feuille invoquez la méthode Activate d'une expression Worksheet représentant cette feuille. Par exemple:
VB:
Sub ActiverCas60()
WshCas60.Activate
End Sub
WshCas60 étant le nom par lequel on aura remplacé la 1ère propriété (Name) d'origine de l'objet Worksheet représentant la feuille voulue dans sa fenêtre de propriété.
On peut aussi faire ThisWorkbook.Worksheets("Cas 60").Activate, mais l'inconvénient c'est que le jour où on décide de nommer l'onglet autrement il faudra aussi le changer dans la macro.
 

GUGUSSE2

XLDnaute Occasionnel
Bonjour,

J'ai essayé le travailler avec les figures et de leur associer une macro et j'avoue que cela me va parfaitement.
Merci pour votre aide (et votre patience).

Cordialement,
GUGUSSE2.
 

Pièces jointes

  • Figures tableur.xlsm
    130.6 KB · Affichages: 22

Dranreb

XLDnaute Barbatruc
Bonjour.
Il n'est pas d'usage d'affecter aux objets dessinés en guise de macro des méthodes, c'est à dire des procédures écrites non pas dans des modules standards mais dans des modules objets tels que ceux de ces objets Worksheet, comme vous l'avez fait. Mais puisque vous l'avez fait et que ça marche, et si ça a votre préférence, c'est presque dommage de ne pas avoir écrit rigoureusement la même méthode dans toutes les feuilles :
VB:
Public Sub Activer()
Me.Activate
End Sub
Le mot clé Me désigne l'objet auquel le code est attaché.
 

Dranreb

XLDnaute Barbatruc
Vous n'avez rien fait de mal. Simplement vous avez écrit des méthodes hétéroclites dans les modules objets de la rubrique Microsoft Excel Objets de l'explorateur de projets au lieu soit d'y écrire des méthodes homogènes, soit d'écrire des procédures classiques différentes, juste comme vous les avez écrites, mais dans un modules standard de la rubrique Modules.
Il s'en suit que pour les affecter aux dessins vous êtes obligé de spécifier le nom de l'objet suivi d'un point, et encore derrière un nom de méthode également spécifique. C'est lourd.
Les modules d'objets Worksheet sont fait pour y prendre en charge des évènements décrétés par Excel (Sélection ou modification de cellules par exemples).

En parlant d'évènements Excel, justement, pour votre dernière question, dans le module objet ThisWorkbook, cette procédure évènement se déclenchera automatiquement à l'ouverture du classeur :
VB:
Private Sub Workbook_Open()
Feuil1.Activate
End Sub
(WshChoix.Activate si vous renommez comme ça l'objet Worksheet qui la représente)
 

GUGUSSE2

XLDnaute Occasionnel
Bonsoir,

Est-ce de cette façon qu'il fallait traiter le problème (d'écriture du code) ?
Mais à l'ouverture, je n'ai pas systématiquement la feuille "CHOIX" !
Quelle est mon erreur ?
Il me manque beaucoup de bases, et comme je ne programme qu'occasionnellement, je ne retiens pas tout.

Nota : les calculs ne sont pas encore implantés.

Cordialement,
GUGUSSE2.
 

Pièces jointes

  • Figures tableur.xlsm
    150.9 KB · Affichages: 12

Dranreb

XLDnaute Barbatruc
Non, vous avez encore fait exactement l'inverse de ce qu'il fallait:
Vous avez mis les trois procédures d'activation de feuille dans le module objet WshChoix au lieu de les mettre dans le module standard Module1 par exemple, et la procédure Workbook_Open vous l'avez mise dans le module standard Module2 (et aussi une copie dans WshChoix j'ai vu ensuite) alors qu'elle doit s'exécuter lors d'un évènement Excel de l'objet Workbook et se mettre impérativement dans le module ThisWorkbook et nulle par ailleurs.
Vous l'afficher, au moins l'explorateur de projet, pour y voir plus clair ? Sinon faites Ctrl+R. Un double clic sur un nom de module du projet permet d'afficher sa fenêtre de code pour y programmer.
 
Dernière édition:

Statistiques des forums

Discussions
312 195
Messages
2 086 082
Membres
103 113
dernier inscrit
jlaussenac