Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/09/2007, 00h12   #1
Membre Expert
 
Avatar de bernardmichel
 
Inscription : janvier 2004
Messages : 985
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 985
Points : 1 028
Points : 1 028
Envoyer un message via MSN à bernardmichel Envoyer un message via Skype™ à bernardmichel
Par défaut [Sources] Protéger/Libérer les controls d'un formulaire

Voici une petite fonction sans prétention. Elle marche bien, ne mange pas de foin et peut rendre de grands services en cas de distribution de vos applications.

En effet, lorsque l'on met à disposition une application Access, il arrive fréquemment que des utilisateurs (parfois peu attentifs) modifient un enregistrement en croyant en créer un nouveau, avec les conséquences que l’on peut imaginer …

Pour palier à cela, je dessine systématiquement un bouton « Modifier » dans tous mes formulaires et j’ouvre ces derniers avec tous les contrôles protégés.

Citation:
But :
1. A l’ouverture, l’utilisateur peut lire toutes les données et cliquer sur tous les boutons,
sans pour autant menacer l’intégrité des données.
2. Le développeur peut, par le biais d’une commande simple et complète, avoir la maîtrise de
la protection/libération de tous les contrôles de son formulaire.

Détails :
strFormName : Nom de votre formulaire (obligatoire)
blProteger : Protéger (True), Libérer(False)

… ensuite, toutes les variables suivantes sont facultatives (option "False" par défaut) (Optional) et servent à
indiquer si oui(True) ou non vous souhaitez appliquer la fonction sur :

blTxtBox : Zones de texte
blListBox : Zones de listes
blComboBox : Zones de listes déroulantes
blCheckBox : Cases à cocher
blCommandButton : Boutons de commande
blImage : Images
blLabel : Etiquettes
blPage : Pages d’un contrôle à onglets
blSubForm : Sous-formulaires
blTabCtl : Groupes d’options

Utilisation :
1. Copier la fonction et la coller dans un module (par exemple : modFonctionsPerso)
2. Appeler la fonction depuis le code du formulaire :

Exemple :
Je souhaite protéger, dans le formulaire « frmCollaborateurs », toutes les Zones de texte,
toutes les Zones de liste déroulantes ainsi que les Groupes d’options.

Call ProtectForm("frmCollaborateurs",True,True,, True, , , , , , , True)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Public Function ProtectForm(strFormName As String, blProteger As Boolean, Optional blTxtBox As Boolean = False, _
                            Optional blListBox As Boolean = False, Optional blComboBox As Boolean = False, _
                            Optional blCheckBox As Boolean = False, Optional blCommandButton As Boolean = False, _
                            Optional blImage As Boolean = False, Optional blLabel As Boolean = False, _
                            Optional blPage As Boolean = False, Optional blSubForm As Boolean = False, _
                            Optional blTabCtl As Boolean = False)
On Error Resume Next
Dim Ctl         As Control
Dim blEnabled   As Boolean
 
If blProteger = True Then blEnabled = False   '   Dans ce cas, tous les contrôles choisis seront protégés
If blProteger = False Then blEnabled = True   '   Dans celui-ci le contraire...
 
    For Each Ctl In Forms(strFormName).Controls
        If Ctl.ControlType = acTextBox And blTxtBox = True Or _
           Ctl.ControlType = acListBox And blListBox = True Or _
           Ctl.ControlType = acComboBox And blComboBox = True Or _
           Ctl.ControlType = acCheckBox And blCheckBox = True Or _
           Ctl.ControlType = acCommandButton And blCommandButton = True Or _
           Ctl.ControlType = acImage And blImage = True Or _
           Ctl.ControlType = acLabel And blLabel = True Or _
           Ctl.ControlType = acPage And blPage = True Or _
           Ctl.ControlType = acSubform And blSubForm = True Or _
           Ctl.ControlType = acTabCtl And blTabCtl = True Then
            If Ctl.ControlType = acListBox Then     ' Ici, il faut inverser pour ce type de Controls
                If blProteger = True Then           ' L'utilisateur demande de protéger
                    blProteger = False              ' On inverse
                    blEnabled = True
                        Ctl.Locked = blProteger
                        Ctl.Enabled = blEnabled
                    blProteger = True               ' On remet dans l'ordre initial
                    blEnabled = False
                ElseIf blProteger = False Then      ' L'utilisateur demande de libérer
                    blProteger = True               ' On inverse
                    blEnabled = False
                        Ctl.Locked = blProteger
                        Ctl.Enabled = blEnabled
                    blProteger = False              ' On remet dans l'ordre initial
                    blEnabled = True
                End If
            Else
                Ctl.Locked = blProteger         ' Ici on traite tous les autres Controls
                Ctl.Enabled = blEnabled
            End If
        End If
    Next Ctl
 
End Function
Voilà, en souhaitant quelle vous soit aussi utile qu'à moi
bernardmichel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2007, 08h26   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 924
Points : 30 924
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Pourrais-tu expliquer un peu en détail à quoi sert cette fonction (une routine sub suffit, car tu ne retournes pas de valeurs), avec un exemple.

Car brut de forme, elle n'a pas de but pédagogique si on ne sait pas quand et comment l'utiliser.

Merci

Starec
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2007, 11h04   #3
Membre Expert
 
Avatar de bernardmichel
 
Inscription : janvier 2004
Messages : 985
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 985
Points : 1 028
Points : 1 028
Envoyer un message via MSN à bernardmichel Envoyer un message via Skype™ à bernardmichel
Hello

Voilà, j'ai un peu commenté ma fonction... Ok comme ça ?

Cordialement,

Bernard.
bernardmichel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2007, 15h21   #4
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 897
Points : 3 897
salut bernardmichel,
je voudrais pas casser la baraque mais je verrouille simplement mes form en édition avec une variable global.
y aurait il une utilité qui m'aurait échappé?

d'ailleurs ca a pas l'air de gérer les sous forms...
et c'est risqué dans certain cas j'ai des forms où j'ai des boutons que je laisse désactivés selon certain critère alors déverrouiller tous comme ca c'est pas cool...
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2007, 18h04   #5
Membre Expert
 
Avatar de bernardmichel
 
Inscription : janvier 2004
Messages : 985
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 985
Points : 1 028
Points : 1 028
Envoyer un message via MSN à bernardmichel Envoyer un message via Skype™ à bernardmichel
Salut,
Le but de ma démarche était de pouvoir justement vérouiller ou dévérouiller ce que tu veux sur ton formulaire.
Pour laisser les boutons "enabled", ce qui me parait judicieux ;-), il te suffit d'employer 2 fois la fonction.
Je n'ai effectivement pas encore testé sur les sous-formulaires
Par contre, ta variable globale m'intéresse tu fais quoi exactement ?
bernardmichel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2007, 18h50   #6
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 897
Points : 3 897
Citation:
Pour laisser les boutons "enabled", ce qui me parait judicieux ;-), il te suffit d'employer 2 fois la fonction.
oui mais j'ai un form où j'ai un bouton qui me désactive un ensemble de bouton... des zones de textes dont un (l'identifiant) dois rester toujours verrouillé/désactivé...

j'ai donc opté pour le pour le 'AllowEdits' = 'Modif autorisé' du form.
j'ai une variable global EditionPermis par exemple en boolean que j'initialise et à l'ouverture des forms:
Code :
Form.AllowEdits = EditionPermis
j'ai rajouté un cadena ouvert/fermé (objet image) qui modifie EditionPermis suivi de Form.AllowEdits...

mais ca marche aussi avec un bouton
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2007, 22h59   #7
Membre Expert
 
Avatar de bernardmichel
 
Inscription : janvier 2004
Messages : 985
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 985
Points : 1 028
Points : 1 028
Envoyer un message via MSN à bernardmichel Envoyer un message via Skype™ à bernardmichel
J'étais passé à côté de cette possibilité qui est intéressante et je vais certainement l'employer en certaines occasions. Je trouve toutefois ma "fonctionnette" plus fine en terme de réglage... mais, des goûts et des couleurs et @+ pour de nouvelles aventures
bernardmichel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h12.


 
 
 
 
Partenaires

Hébergement Web