Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 27/09/2011, 13h41   #1
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 089
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 089
Points : 11 622
Points : 11 622
Par défaut [Article] Classe MELA pour formulaire

Bonjour,

Découvrez la classe MELA (CRUD en anglais), de l'acronyme Modification, Effacement, Lecture, Ajout.

Disponible en version 2007 ou Texte pour ceux qui ont des versions antérieures.

C'est ici
http://loufab.developpez.com/tutorie...s/classe-mela/

[Edit] L'interet d'une telle classe réside dans la facilité de mise en place d'un système de gestion de fiche pour l'ensemble d'une application, simplement par la déclaration d'une classe dans l'événement d'ouverture des formulaires.

J'attend vos commentaires.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 14/11/2011, 23h20   #2
Membre à l'essai
 
Inscription : mars 2007
Messages : 40
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : mars 2007
Messages : 40
Points : 23
Points : 23
Bonjour Fabrice,

Un grand merci. J'adore cette classe MELA.

Une suggestion d'ajout (en rouge) dans Public Property Set Form (objForm As Form) :

Code :
1
2
3
4
5
6
7
       
'...
 If Not (TypeOf ctrl Is Label Or TypeOf ctrl Is Line Or TypeOf ctrl Is Image Or _
                TypeOf ctrl Is CustomControl Or TypeOf ctrl Is TabControl Or _
                TypeOf ctrl Is Page Or _
                TypeOf ctrl Is PageBreak Or TypeOf ctrl Is Rectangle) Then
'...
En effet, tous les contrôles de mon Form sont inclus dans un contrôle TabControl. Or comme le TabIndex de celui-ci est égal à zéro, le TabControl s'impose comme contrôle par défaut pour définir DefaultControlName.

En pratique, cela se traduit par un bouton btnEnregistrer toujours visible et un bouton btnModifier toujours invisible.

C'est un détail, mais ça peut éviter à d'autres de sécher comme je l'ai fait.

Cordialement
Ph.
St-Jean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 23h46   #3
Membre à l'essai
 
Inscription : mars 2007
Messages : 40
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : mars 2007
Messages : 40
Points : 23
Points : 23
Encore moi.

Une variante utile d'utilisation ou d'adaptation de la classe MELA :

J'ai créé un sous-formulaire ne contenant que les boutons. C'est ce sous-formulaire qui appelle la classe MELA. Il suffit d'insérer le sous-formulaire dans l'entête ou le pied de n'importe quel formulaire, et ça marche très bien. Cela évite de coder dans chaque formulaire le code d'appel de la classe Mela dans les événements Open et Close.

Il y a essentiellement deux modifications à apporter au code :

1. Partout ou le code fait référence à des contrôles de la section Détail du formulaire, il suffit de remplacer Form par Form.Parent. Par exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    
'...
For Each ctrl In Form.Parent.Section(acDetail).Controls
        ' c'est un controle avec une propriété TabIndex        
        If Not (TypeOf ctrl Is Label Or TypeOf ctrl Is Line Or TypeOf ctrl Is Image Or _
                TypeOf ctrl Is CustomControl Or TypeOf ctrl Is TabControl Or TypeOf ctrl Is Page Or _
                TypeOf ctrl Is PageBreak Or TypeOf ctrl Is Rectangle) Then

            If ctrl.TabIndex = 0 Then
                DefaultControlName = ctrl.Name
                Exit For
            End If

        End If
    Next
'...
2. Dans le code ci-dessous, remplacer acHeader par acDetail (j'ai placé les boutons dans la section Détail du sous-formulaire — J'aurais aussi pu les placer dans la section En-tête et ne pas modifier ce bout de code) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Property Set Form(objForm As Form)
' initialisation du formulaire à gérer
    On Error GoTo errSub

    Dim ctrl As Control
    
    Set oForm = objForm
    ' parcours l'entête de formulaire
    
    For Each ctrl In Form.Section(acHeader).Controls    ' => For Each ctrl In Form.Section(acDetail).Controls
        If TypeOf ctrl Is CommandButton Then
            ' on active l'événement
            ctrl.OnClick = "[Event Procedure]"
'...
Ph.
St-Jean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 10h51   #4
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 089
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 089
Points : 11 622
Points : 11 622

En effet beaucoup de variation possible autour de ce thème.
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2011, 10h44   #5
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 089
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 089
Points : 11 622
Points : 11 622
Suite à la demande d'un lecteur sur mon blog voici une petite évolution de la classe MELA.

Copie d'un enregistrement

Il est facile d’ajouter des fonctions dans la classe MELA.
Il suffit d’ajouter un bouton en utilisant la normalisation requise.

1) Ajouter la déclaration dans l’entête de la classe
Code :
Private WithEvents btnCopierEnregistrement As CommandButton
2) Ajouter la libération dans la procédure Terminate.
Code :
Set btnCopierEnregistrement = Nothing
3) Ajouter l’instanciation dans la property Form
Code :
1
2
Case "btnCopierEnregistrement "
Set btnCopierEnregistrement = Ctrl
4) Ajouter le code de la copie dans une nouvelle procédure respectant la normalisation du nom.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub btnCopierEnregistrement _Click()
' copier l'enregistrement courant
Dim rst As DAO.Recordset
Dim fld As DAO.Field
If Form.NewRecord And Not Form.Dirty Then Exit Sub 'pas de copie d'un enregistrement vide
btnEnregistrer_Click ' on enregistre
Set rst = Form.RecordsetClone 'on utilise le clone pour la source
 
btnCreer_Click 
 
Form.Recordset.AddNew 'et le recordset pour la destination
For Each fld In Form.Recordset.Fields
 
     If Not fld.Attributes And dbAutoIncrField Then 'sauf les NumeroAuto
         fld.Value = rst.Fields(fld.Name)
     End If
 
Next
Form.Recordset.Update
End Sub
5) Ajouter le bouton avec le nom btnCopierEnregistrement.

Voilà !
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Actualité déjà publiée
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h51.


 
 
 
 
Partenaires

Hébergement Web