Visites

   visiteurs

   visiteurs en ligne

Sujet n°254 Désactiver un sous formulaire en cours
    par Christian le 23/07/2009 : 12:10
Pour effectuer des devis j'ai un formulaire qui attribue le N° du devis et les coordonnées du client et rataché un sous formulaire avec le détail des articles. Quand le devis est accepté je souhaiterais avec un boutons de commande verrouiller tous les enregistrements du sous formulaire spécifié sans bloquer ceux des autres devis. Et éventuellment pouvoir les déverrouiller. Merci si quelqu'un peux m'aider.

Réponse n° 1 par 3Stone le 23/07/2009 : 14:39
Bonjour,

Il y a une propriété du formulaire qui gère cela parfaitement...

    Me.AllowEdits = False

bloque l'édition du formulaire.

Bien sur, pour avoir un fonctionnement valable, cela se fait dans l'événement "Sur activation" du formulaire, en se basant sur un champ (edition oui/non) du formulaire principal.

Admettons que dans le formulaire principal (et dans sa table source) l'on trouve un case à cocher "Devis accepté".
Il suffit alors de mettre dans l'événement "Sur activation" du formulaire principal :

Me!NomDuControlSousForm.Form.AllowEdits = Not Me.[Devis accepté]

Cordialement,
Pierre(3stone)

Réponse n° 2 par Christian le 23/07/2009 : 16:39

Merci Pierre,

Mais je souhaiterais un peu plus de précision j'ai des difficultés avec la syntaxe :

Me!NomDuControlSousForm.Form

Je saisi :

Me![Nom du control à verrouiller]Nomdusousformulaire.Form

Et ça bug ...

Merci d'avance

Christian

Réponse n° 3 par 3Stone le 23/07/2009 : 17:58
Bonjour,


Dixit...
Mais je souhaiterais un peu plus de précision j'ai des difficultés avec la syntaxe :


Dixit...
Me!NomDuControlSousForm.Form

Et bien, lorsque l'on place/glisse un sous-formulaire dans un formulaire (qui devient dès lors formulaire principal) on place en réalité un "controle sous-formulaire" qui lui contiendra effectivement le sous-formulaire... wink

Pour s'en rendre compte, il suffit de faire la manoeuvre avec l'assistant "Sous-formulaire/Sous-etat".

Avec cet outil de la boite à outils, tu "dessines" d'abord le contrôle sur le formulaire principal. Puis, l'assistant te demande ce que tu souhaites inclure: table/requête ou formulaire (déjà créé).

Ensuite, on te demande comment tu souhaites nommer le sous-formulaire.
En fait, cet une erreur, car le nom du formulaire n'est pas modifié (heureusement) mais c'est le nom qui sera donné au contrôle sous-formulaire...

Par défaut, Access utilise le même nom que le nom du formulaire - ce qui complique cette distinction pourtant importante.

Pour revenir donc à ta question:

"NomDuControleSousForm" est donc à remplacer par le nom réel du control sous-formulaire, probablement identique au nom du formulaire inclus cool

Cordialement,

Pierre(3stone)


Réponse n° 4 par Christian le 23/07/2009 : 19:50

J'ai rentré le nom du SF et ça tourne. Mais pas de façon satifaisante.

1 Les enregistrements de tous les devis son verrouillés dès qu'on les actives même si "Devis accepté" n'est pas coché

2 La dernière ligne des SF la vierge n'est pas verrouillée on peut donc incrémenter une valeur

3 lorsque l'on passe sur un nouveau devis ça bug : Erreur 13

4 Et enfin peut-on déverrouiller les enregistrements verrouillés

J'ai encore du faire une bêtise mais je ne vois pas ou. Alors si tu peux encore m'aider...

Merci d'avance

Réponse n° 5 par Christian le 23/07/2009 : 20:23

J'ai trouvé une de mes anneries (j'avais laissé un bout de code trainer) à force de faire des essais ...

Il reste que :

1/ Le dernier enregistrement n'est pas verrouillé (le vierge)

2/ et comment faire pour deverrouiller encas de besoin

Mes excuses

Christian

Réponse n° 6 par 3Stone le 24/07/2009 : 02:11
re,

Le dernier enregistrement... n'est pas un enregistrement, mais permet d'en ajouter un.

Si ce n'est pas souhaité, une autre propriété permet d'enpêcher cela (étonnant, non biggrin )

C'est AllowAdditions !

Il faut donc compléter le code par :
Me!NomDuControlSousForm.Form.AllowAdditions = Not Me.[Devis accepté]

Pour gardé un code propre, on modifiera ainsi:

Dim boVerrou As Boolean
boVerrou = Not Me.[Devis accepté]

With Me!NomControlSousForm.Form
      .AllowEdits = boVerrou
      .AllowAdditions = boVerrou
End With


Ah oui, pour le déverrouillage... c'est inutile... puisque le sous-formulaire n'est verrouillé que lorsque la case est cochée dans le formulaire principal. S'il faut déverrouiller tout de même, ben il suffit de décocher la case dans le formulaire principal.
Il est vrai que l'action sur le sous-formulaire n'est pas immédiate (il faut produire l'événement "Sur activation" - autrement dit: passer d'un enregistrement à un autre.
Pour éviter cela, le même code que précédement doit être placé dans l'événement "Après mise à jour" de la case à cocher...

Cordialement,
Pierre(3stone)

Réponse n° 7 par Christian le 24/07/2009 : 10:34

Tous les verrouillages fonctionnent bien juste un petit Hic. Lorsque je vais sur un nouveau devis j'ai le message "Erreur 94  Utilisation incorect de Null"

Merci encore pour ton aide

Réponse n° 8 par 3Stone le 24/07/2009 : 19:18
Bonjour,

En cas de nouvel enregistrement, le verrouillage n'est pas indiqué...
Complète alors le code de cette façon :


Dim boVerrou As Boolean
boVerrou = Not Me.[Devis accepté]

If Not Me.NewRecord Then
      With Me!NomControlSousForm.Form
            .AllowEdits = boVerrou
            .AllowAdditions = boVerrou
      End With
End If


Ce qui devrait éviter le message d'erreur.

Cordialement,
Pierre(3stone)


DébutPrécédent [ 1 2 ] SuivantFin

[ Retour à la liste des sujets ]

Recherche



Préférences

Se reconnecter
---

Votre nom (ou pseudo) :

Votre code secret


 Nombre de membres 1 membre


Connectés :

( personne )

Haut