Affecter un code après clic sur bouton usf

Tungstene

XLDnaute Occasionnel
Bonjour,

Sur une des feuilles de mon classeur j'ai le code suivant me permettant d'afficher une usf1 lorsque je double clique sur une des cellules de ma colonne A.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range('A8:A65535')) Is Nothing Then

Load usf1
Usf1.Show
End If

End Sub

Le problème, c'est que ce code marche en permanence sur cette feuille.

Pour arriver à cette étape, l'utilisateur est déjà de suivre un 'chemin' sur plusieurs usf.
La dernière usf2 étant une usf d'information indiquant de sélectionner une cellule de la colonne A. L'utilisateur clique donc sur OK et sélectionne ensuite la cellule désirée.

Donc, pour être plus clair, je veux que ce code fonctionne quand c'est l'utilisateur qui le décide par ce 'chemin' et non en permanence.

Est-t-il possible d'activer ce code uniquement à partir du moment ou l'utilisateur clique sur OK de la usf2?
Par conséquent, le reste du temps l'utilisateur ne pourra pas afficher la usf1 même s'il double clique sur une des cellules.
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Tungstène, bonjour le forum,

Je comprends pas trop où est le problème. Supprime la macro événementielle :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range('A8:A65535')) Is Nothing Then
Load usf1
Usf1.Show
End If
End Sub
et tout rentrera dans l'ordre. L'Usf1 se se lancera qu'au clic sur Ok de L'Usf2.
 

Tungstene

XLDnaute Occasionnel
Bonjour Robert,

Je m'en doutais que ce ne serai pas très clair. Je t'envois un fichier afin de mieux comprendre. J'ai quasiment tout supprimer pour respecter les 50Ko mais y'a l'essentiel.

Alors voilà, au démarrage tu as la usf 'invite de démarrage'.
Clique sur le choix 2 : Classer/modifier des idées'
Ensuite une seconde usf 'sélectionner une idée' s'affiche, clique sur OK
Là tu es donc dans la feuille LUAP. Comme expliqué dans la usf précédente, il faut cliquer sur une des cellules de la colonne A pour afficher le contenu de la ligne correspondante dans la usf 'classer les idées'.

Ca c'est bon c'est ce que je veux.

Maintenant, reviens à la usf de départ 'invite de démarrage' en cliquant sur ANNULER de la usf 'Classer les idées' .

Sélectionne l'option 3 'Consulter la LUAP'.
Là tu te retrouves sur la feuille LUAP et l'utilisateur peut consulter ce qu'il veut.

Mon problème est que là encore, si tu doubles clique sur une des cellules de la colonne A, la usf 'Classer les idées' apparaît.

Donc moi ce que je veut exactement, c'est que lorsque l'utilisateur consulte les données de la feuille, il ne faut pas qu'il puisse afficher la usf 'classer les idées' en double cliquant sur les cellules de la colonne A.

Par conséquent, il faudrait que le code suivant qui me permet d'afficher la usf 'classer les idées' dès qu'on a double cliqué sur une cellule de la colonne A, fonctionne que lorsqu'on a cliqué sur le OK de la usf 'sélectionner une idée'


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range('A8:A65535')) Is Nothing Then
Load Classer_idées
Classer_idées.Show
End If

End Sub

Maintenant il y a peut être une autre solution?


Pendant que j'y suis, une autre petit question. Je veux verrouiller tout le classeur afin que l'utilisateur puisse consulter ce qu'il veut et naviguer comme il le veut dans le classeur, mais sans pouvoir modifier quoique ce soit.
Si je protège le classeur en allant dans outils, protection et protéger le classeur.
Pourquoi je peux toujours faire ce que je veux : supprimer des données, en entrer d'autre…

Y'a-t-il pas un autre moyen?

Merci pour tes réponses!
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Tungstène, bonjour le forum,

Ok, j'ai pigé... J'ai rajouté un module qui ne contient que la déclaration de la variable test. Cette variable va changer selon le bouton de la boîte de dialogue Invite_démarrage et prendre la valeur False sur le bouton 2 et True sur le bouton 3.
Ensuite j'ai rajouté dans la macro événementielle la ligne :
If test = False Then Exit Sub.
L'ajout de module est obligatoire car pour qu'une variable soit utilisable dans tous le projet VBA il faut qu'elle soit déclarée Publique et cela n'est possible que dans un module.
Cela devrait résoudre tes problèmes.
[file name=LUAPJ842005_2.zip size=26852]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/LUAPJ842005_2.zip[/file]
 

Pièces jointes

  • LUAPJ842005_2.zip
    26.2 KB · Affichages: 16

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Tungstène, Didier, bonsoir le forum,

Désolé Tungstène pour mon manque d'attention... Je suis mort de rire. Ce que j'adore chez Didier c'est sa manière éduquée de me faire passer pour une grosse trume (que je suis...). Alors pour me venger, je dirai qu'au lieu de perdre son énergie à se foutre de ma gueule il aurait mieux fait de te répondre le sot !
Surtout qu'il m'a déjà donné un cours magistral sur ce sujet mais que j'ai déjà oublié la méthode exacte. C'est une histoire de protection avec l'argument UserInterfaceOnly. Grâce à cela une feuille protégée interdit à l'utilisateur une intervention manuelle directe dans le tableau mais permet un changement via une macro. Par exemple si je veux cela dans l'onglet Feuil1 j'écrirais : Sheets('Feuil1').Protect UserInterfaceOnly:=True.

Lis quand même l'aide VBA relative à UserInterfaceOnly car il est préférable placer ce code à l'ouverture du fichier.
 

myDearFriend!

XLDnaute Barbatruc
Re Tungstene, Robert,

:p :p :p   Robert ! Désolé, je n'ai pas pu résister...

Bon, effectivement Tungstene, je vois pour ma part 2 façons de faire pour ton problème de classeur non modifiable :
[ol][li]La plus simple est tout simplement d'enregistrer ton classeur en lecture seule avec possibilité de modification par un mot de passe : pour ce faire, tu fais menu Fichier / Sauvegarder sous... / et dans la boîte de dialogue de sauvegarde, pour XL 2002 ou 2003, tu fais Outils (dans le menu en haut), puis Options Génrérales et tu mets ensuite un mot de passe dans la zone Mot de passe pour la modification. Si tu possèdes XL 97, alors il s'agit du bouton Options et de la zone Mot de passe pour accès en écriture.[/li]
[li]La seconde solution peut être effectivement de verrouiller tes onglets avec l'argument 'UserInterfaceOnly'. Cette manière de faire permet de verrouiller l'ensemble des cellules des manipulations de l'utilisateur tout en laissant les macros agir sur ces mêmes cellules... Tu peux voir un exemple d'utilisation dans ce lien Lien supprimé...[/li][/ol]
Cordialement,
 

Tungstene

XLDnaute Occasionnel
Bonjour à vous 2,

C'est bien plus ou moins ce que je veux mais c'est pas fiable car je suis obligé de la dupliquer pour chaque feuille, et l'utilisateur peut débloquer facilement la protection même sans mot de passe.

Je m'explique, j'ai le même mot de passe sur l'ensemble des feuilles. La première ça marche, il me demande le mot de passe, mais la seconde non, la protection s'enlève toute seule et au final l'utilisateur fait ce qu'il veut.

Je suis vraiment surpris car depuis que je cherche à faire ça personne me donne vraiment une réponse idéale.

Il n'y a vraiment pas moyen de bloquer tout le classeur d'un seul coup et avec un seul mot de passe?
 

Tungstene

XLDnaute Occasionnel
Bonjour à vous 2,

C'est bien plus ou moins ce que je veux mais c'est pas fiable car je suis obligé de la dupliquer pour chaque feuille, et l'utilisateur peut débloquer facilement la protection même sans mot de passe.

Je m'explique, j'ai le même mot de passe sur l'ensemble des feuilles. La première ça marche, il me demande le mot de passe, mais la seconde non, la protection s'enlève toute seule et au final l'utilisateur fait ce qu'il veut.

Je suis vraiment surpris car depuis que je cherche à faire ça personne me donne vraiment une réponse idéale.

Il n'y a vraiment pas moyen de bloquer tout le classeur d'un seul coup et avec un seul mot de passe?
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Tungstène, Didier, bonjour le forum,

Ce code te permet de protéger tous tes onglets d’une seule fois :

Sub Macro1()
Dim x As Byte 'déclare la variable x

For x = 1 To Sheets.Count 'boucle sur tous les onglets du classeur
'protège l'onglet avec l'option de laisser agir les macros
Sheets(x).Protect UserInterfaceOnly = True
Next x 'prochain onglet du classeur
End Sub
Mais sinon dis toi bien qu’il n’y a pas de vrai protection dans excel. Mots de passe sur onglet, classeur ou projet VBA ne sont que chalets de paille pour des loups au souffle acide. Ça bloque l’utilisateur commun mais pas les experts. Mais, remarque si ça ne fais pas chanter les oiseaux, ça fait mourir de rire les écureuils…
 

Tungstene

XLDnaute Occasionnel
Je te remercie c'est la chose qui me plait le plus jusqu'à maintenant.
En revanche, pour quoi lorsque je mets un mot de passe qui est don ccommun à ttes les feuilles, pourquoi sur certaines feuilles on peut ôter la protection sans mot de passe?

Sub Protéger()
Dim x As Byte 'déclare la variable x

For x = 1 To Sheets.Count 'boucle sur tous les onglets du classeur
'protège l'onglet avec l'option de laisser agir les macros
Sheets(x).Protect Password:='aaa', UserInterfaceOnly:=True
Next x 'prochain onglet du classeur
End Sub
 

Discussions similaires

Réponses
1
Affichages
309
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 339
Messages
2 087 410
Membres
103 540
dernier inscrit
rmedramzi