Bouton macro
Résolu
fred
-
fred -
fred -
Bonjour,
Dans un fichier excell 2003, j'ai protégé par mot de passe toute la feuille sauf 20 cellules réparties dans le document.
L'idée est la suivante: après que l'utilisateur alfa ait renseigné ces 20 cellules et fait l'impression du document, il puisse effacer le contenu de ces 20 cellules en un clic.
J'ai inséré un bouton macro (Réinitialiser) en fin de page, mais j'ai été obligé de diminuer le niveau de protection sur faible, ce qui me dérange beaucoup.
Existe t-il un moyen d'éviter la macro ou d'en contourner son défaut (impose un niveau de protection faible)?
Merci
Fred
Dans un fichier excell 2003, j'ai protégé par mot de passe toute la feuille sauf 20 cellules réparties dans le document.
L'idée est la suivante: après que l'utilisateur alfa ait renseigné ces 20 cellules et fait l'impression du document, il puisse effacer le contenu de ces 20 cellules en un clic.
J'ai inséré un bouton macro (Réinitialiser) en fin de page, mais j'ai été obligé de diminuer le niveau de protection sur faible, ce qui me dérange beaucoup.
Existe t-il un moyen d'éviter la macro ou d'en contourner son défaut (impose un niveau de protection faible)?
Merci
Fred
A voir également:
- Bouton macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Diagnostic bouton photo - Accueil - Outils
- Bouton reinitialisation pc - Guide
- Bouton on/off comment savoir ✓ - Forum Matériel & Système
- Jitbit macro recorder - Télécharger - Confidentialité
5 réponses
Bonjour,
Je viens de faire le test et ça fonctionne avec un niveau de sécurité moyen.
toutes les cellules sont verrouillés sauf A1:B3, et a deuxième case est cochée lors de la protection de la feuille. (sélectionner les cellules non verrouillées)
1 bouton:Private Sub CommandButton1_Click()
efface
End Sub
1 macro:
Sub efface()
Range("A1:B3").Select
Selection.ClearContents
End Sub
Je viens de faire le test et ça fonctionne avec un niveau de sécurité moyen.
toutes les cellules sont verrouillés sauf A1:B3, et a deuxième case est cochée lors de la protection de la feuille. (sélectionner les cellules non verrouillées)
1 bouton:Private Sub CommandButton1_Click()
efface
End Sub
1 macro:
Sub efface()
Range("A1:B3").Select
Selection.ClearContents
End Sub
Re bonjour,
Oui c'est ça! En protection moyen, il demande une confirmation d'activation de macro avant d'ouvrir le fichier.
Pas très rassurant pour Pierre, Paul ou Jacques, alors je laisse en protection faible.
.
Question subsidiaire:
comment faire pour que le bouton de la macro n'apparaisse que lorsque mes 20 cellules sont renseignées et disparaisse après avoir cliqué dessus?
Est ce possible ?
.
Merci à vous
Fred
Oui c'est ça! En protection moyen, il demande une confirmation d'activation de macro avant d'ouvrir le fichier.
Pas très rassurant pour Pierre, Paul ou Jacques, alors je laisse en protection faible.
.
Question subsidiaire:
comment faire pour que le bouton de la macro n'apparaisse que lorsque mes 20 cellules sont renseignées et disparaisse après avoir cliqué dessus?
Est ce possible ?
.
Merci à vous
Fred
Oui c'est possible.
Pour cela, il faudrait que tu nous communiques l'adresse des cellules concernées.
Le principe :
Lorsque l'on charge le classeur, la propriété "visible" du bouton doit être à "false" et lorsque toutes les cellules sont différentes de "" alors la propriété "visible" du bouton devient "true" sinon "false". Quelque chose comme :
Pour cela, il faudrait que tu nous communiques l'adresse des cellules concernées.
Le principe :
Lorsque l'on charge le classeur, la propriété "visible" du bouton doit être à "false" et lorsque toutes les cellules sont différentes de "" alors la propriété "visible" du bouton devient "true" sinon "false". Quelque chose comme :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("D6") <> "" And Range("D7") <> "" Then CommandButton1.Visible = True Else CommandButton1.Visible = False End If End Sub
Bonjour pijaku,
http://www.cijoint.fr/cjlink.php?file=cj201104/cij8abs2OO.xls
J'ai vite fait un extrait du fichier.
Les cases jaunes sont celles qui sont uniquement accessibles (après protection du fichier) par les utilisateurs.
La case bleue (REINITIALISER) représente le bouton de la macro que je voudrais faire apparaitre puis disparaitre en fonction des cases jaunes.
.
Je suis impatient de découvrir ta méthode.
Fred
http://www.cijoint.fr/cjlink.php?file=cj201104/cij8abs2OO.xls
J'ai vite fait un extrait du fichier.
Les cases jaunes sont celles qui sont uniquement accessibles (après protection du fichier) par les utilisateurs.
La case bleue (REINITIALISER) représente le bouton de la macro que je voudrais faire apparaitre puis disparaitre en fonction des cases jaunes.
.
Je suis impatient de découvrir ta méthode.
Fred
Salut pijaku,
Ton exemple sans bouton de macro me plait beaucoup, mais fichtre, je n'arrive pas à comprendre comment tu as procédé.
Tu veux bien éclairer ma lanterne SVP
Fred
Ton exemple sans bouton de macro me plait beaucoup, mais fichtre, je n'arrive pas à comprendre comment tu as procédé.
Tu veux bien éclairer ma lanterne SVP
Fred
Salut Fred,
Bien sur.
S'il n'y a pas de bouton de commande, il y a tout de même un label (étiquette de la barre d'outils "boite à outils contrôle"). J'ai réglé la propriété "visible" de ce label sur False par défaut. Donc il ne s'affichera que sur certaines conditions.
Les conditions pour qu'il soit visible, sont les tiennes : "si mes 20 cellules sont remplies". Là il faut donc agir sur le code vba de la feuille concernée, sur un événement de cette feuille même, pour que la macro (afficher le label) se déclenche automatiquement. J'ai choisit l'événement Selection_change (lorsque tu changes de cellule active dans ta feuille). Pour y accéder (au code vba), clic droit sur l'onglet de la feuille concernée et "visualiser le code". Dans le menu "général" on choisit : Worksheet" et dans le menu "déclaration" : "Selection_change". On obtient :
On souhaite que, SI les cellules sont remplies, alors il s'affiche, s'il y en a une de vide, alors il reste masqué. J'ai préféré donc boucler sur toutes les cellules concernées et si une est vide alors on ne fait rien. En fin de boucle, si aucune cellule vide n'a été trouvé, alors il affiche le label. Cela donne en VBA :
A chaque fois que tu changes de cellule active dans ta feuille, le code vérifie la présence d'une cellule vide dans ta plage. S'il y en a une, il masque le label...
Reste le code du "bouton" : [j'ai modifié très légèrement ce code, donc tu peux le copier/coller à la place de celui dans ton fichier ou ajoute simplement la ligne de code : Range("K7:L7").Select]
Bien sur.
S'il n'y a pas de bouton de commande, il y a tout de même un label (étiquette de la barre d'outils "boite à outils contrôle"). J'ai réglé la propriété "visible" de ce label sur False par défaut. Donc il ne s'affichera que sur certaines conditions.
Les conditions pour qu'il soit visible, sont les tiennes : "si mes 20 cellules sont remplies". Là il faut donc agir sur le code vba de la feuille concernée, sur un événement de cette feuille même, pour que la macro (afficher le label) se déclenche automatiquement. J'ai choisit l'événement Selection_change (lorsque tu changes de cellule active dans ta feuille). Pour y accéder (au code vba), clic droit sur l'onglet de la feuille concernée et "visualiser le code". Dans le menu "général" on choisit : Worksheet" et dans le menu "déclaration" : "Selection_change". On obtient :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub
On souhaite que, SI les cellules sont remplies, alors il s'affiche, s'il y en a une de vide, alors il reste masqué. J'ai préféré donc boucler sur toutes les cellules concernées et si une est vide alors on ne fait rien. En fin de boucle, si aucune cellule vide n'a été trouvé, alors il affiche le label. Cela donne en VBA :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim Plage As Range, Cell As Range 'On définit les variables 'on affecte à la variable Plage le Range concerné (toutes tes cellules) 'tu peux en ajouter ou en enlever comme tu veux Set Plage = Range("K6,K7,K9,K10,K11,K12,K13,K14,M9,M10,N11,N12,C16,D23:M23") 'pour tous les range dans les cellules de la plage For Each Cell In Plage.Cells 'si la cellule est vide alors If Cell = "" Then 'le label est masqué Label1.Visible = False 'on quitte la procédure Exit Sub End If 'cellule suivante (si l'on n'est pas sorti) Next 'ici il a bouclé sur toutes les cellules, s'il n'est pas sorti avant 'en fait si le code arrive à ce point, c'est qu'il n'a rencontré aucune cellule vide donc 'on affiche le label Label1.Visible = True End Sub
A chaque fois que tu changes de cellule active dans ta feuille, le code vérifie la présence d'une cellule vide dans ta plage. S'il y en a une, il masque le label...
Reste le code du "bouton" : [j'ai modifié très légèrement ce code, donc tu peux le copier/coller à la place de celui dans ton fichier ou ajoute simplement la ligne de code : Range("K7:L7").Select]
Private Sub Label1_Click() 'lors d'un clic sur le label 'on efface le contenu de la plage Range("K6:L6,K7:L7,K9:L9,M9:N9,K10:L10,M10:N10,K11:L11,K12:L12,K13:L13,K14:L14,N11:O11,N12:O12,C16:R18,D23:M23").ClearContents 'on sélectionne 2 cellules différentes à la suite pour être sur de masquer le label Range("K7:L7").Select Range("K6:L6").Select End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re Salut pijaku,
Après quelques heures de vaines tentatives, je me tourne à nouveau vers toi.
C'est plus clair que hier mais je ne comprend pas comment tu as créer le "bouton" REINITIALISER.
J'ai essayé de faire copier/coller du texte de ta macro, mais comme je n'ai plus de bouton je ne vois pas comment attribuer cette macro.
Je crois que tu as compris que je suis un peu perdu.
Merci de ton aide
Fred
Après quelques heures de vaines tentatives, je me tourne à nouveau vers toi.
C'est plus clair que hier mais je ne comprend pas comment tu as créer le "bouton" REINITIALISER.
J'ai essayé de faire copier/coller du texte de ta macro, mais comme je n'ai plus de bouton je ne vois pas comment attribuer cette macro.
Je crois que tu as compris que je suis un peu perdu.
Merci de ton aide
Fred
ça fonctionne également sans le Select :