Bouton macro

Résolu/Fermé
fred - 6 avril 2011 à 09:28
 fred - 7 avril 2011 à 17:02
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
A voir également:

5 réponses

tchernosplif Messages postés 600 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 21 juin 2015 244
6 avril 2011 à 11:00
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
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
6 avril 2011 à 11:03
Salut,
ça fonctionne également sans le Select :
Sub efface()
Range("A1:B3").ClearContents
End Sub
0
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
6 avril 2011 à 14:11
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 :
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
6 avril 2011 à 14:22
Bonjour,

Excuszez l'incruste
de mémoire,
Sur 2003, il y a la possibilité de créer un certificat en allant dans outils-??? de VBE
la première qu'un utilisateur ouvre le classeur, il lui est demandé si on peut faire confiance
si oui, il n'est plus demandé d'activer les macros...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
6 avril 2011 à 14:27
Salut Michel,
Tout à fait, dans outils/options onglet "sécurité".
0
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
6 avril 2011 à 14:52
Salut,
Quand on dit bouton, il s'agit en général d'un bouton, pas de cellules fusionnées...
Bref, ci-joint un exemple avec un label à la place du bouton qui n'en était pas un...
0
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
7 avril 2011 à 08:42
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 :
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
0

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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
7 avril 2011 à 14:46
Pour créer le "bouton" :
"Affichage" "barre d'outils" "boite à outils contrôle" doit être cochée
Dans cette barre d'outils, cherche "etiquette".
Dessine une étiquette (label) sur ta feuille et clique droit dessus/propriétés
La tu verras visible true etc...
0
Super, je progresse!
Comment modifier la police, la taille, le fond de mon "bouton"?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
7 avril 2011 à 15:48
clique droit dessus/propriétés
Change la propriété font, en fait à côté de font, tu as un cadre avec un nom de police dedans. Lorsque tu cliques sur ce nom de police, 3 points apparaissent, cliques dessus...
0
A ben celle là, elle est bonne!
Maintenant que j'ai cocher False pour Label1.Visible, mon "bouton"n'est plus visible et donc je n'arrive pas à cliquer droit dessus
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
7 avril 2011 à 16:12
Dans la même barre d'outils, tu va trouver le bouton : "mode création", cliques dessus...
0