IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Utilisation incorrecte du mot-clé Me. [AC-2019]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    informaticien retraité
    Inscrit en
    Mai 2017
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : informaticien retraité

    Informations forums :
    Inscription : Mai 2017
    Messages : 285
    Par défaut Utilisation incorrecte du mot-clé Me.
    Bonjour,

    Lorsque mon formulaire FO_CATEGORIE_DEVELOPPEMENT a le focus, j'exécute le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Private Sub Form_Current()
     
        ' Permet de d'autoriser ou d'empêcher l'utilisateur de toucher l'enregistrement si le numéro de référence et égal ou inférieur à celui du formulaire FO_TRANSFERT pour ce formulaire.
     
        ' Historique :
        '   v00.001.00001.00001;
     
        cod_gele_enr_selon_transfert
        'DoCmd.Close
     
    End Sub
    Public Sub cod_gele_enr_selon_transfert()
     
        ' Permet de d'autoriser ou d'empêcher l'utilisateur de toucher l'enregistrement si le numéro de référence et égal ou inférieur à celui du formulaire FO_TRANSFERT pour ce formulaire.
     
        ' Historique :
        '   v00.001.00001.00001;
     
        Dim odb_gesclass                                As DAO.Database
        Dim odb_tables                                  As DAO.TableDef
        Dim odb_champs                                  As DAO.Field
     
        Dim int_pos_souligne                            As Integer
     
        Dim str_table                                   As String
        Dim str_formulaire                              As String
        Dim str_debut_nom_champ                         As String
        Dim str_fin_nom_champ                           As String
        Dim str_nom_champs                              As String
        Dim str_transfert_reference                     As String
        Dim str_nom_reference                           As String
     
        Dim var_transfert_reference                     As Variant
     
        Set odb_gesclass = CurrentDb
     
        DoCmd.OpenForm "FO_TRANSFERT", , , , , acHidden
        str_formulaire = Me.Name
        str_table = "TA" & Right(str_formulaire, Len(str_formulaire) - 2)
        Set odb_tables = odb_gesclass.TableDefs(str_table)
        For Each odb_champs In odb_tables.Fields
            int_pos_souligne = InStr(odb_champs.Name, "_")
            str_debut_nom_champ = Left(odb_champs.Name, int_pos_souligne - 1)
            str_fin_nom_champ = Right(odb_champs.Name, Len(odb_champs.Name) - int_pos_souligne)
            str_transfert_reference = "tra_" & str_debut_nom_champ & "_reference"
            var_transfert_reference = Forms("FO_TRANSFERT").Controls(str_transfert_reference).Value
     
            If str_fin_nom_champ <> "reference" Then
                str_nom_champs = odb_champs.Name
                If Int(Me.Controls(str_nom_reference)) <= Int(var_transfert_reference) And Not IsNull(var_transfert_reference) Then
                    Me.Controls(str_nom_champs).Enabled = False
                    Me.Controls(str_nom_champs).Locked = True
                Else
                    Me.Controls(str_nom_champs).Enabled = True
                    Me.Controls(str_nom_champs).Locked = False
                End If
            Else
                str_nom_reference = odb_champs.Name
            End If
        Next odb_champs
     
        odb_gesclass.Close
        Set odb_tables = Nothing
        Set odb_gesclass = Nothing
     
    End Sub
    Tout fonctionne bien lorsque je situe le code cod_gele_enr_selon_transfert dans Microsoft Access Objets de classe Form_FO_CATEGORIE_DEVELOPPEMENT mais, étant donné que je désire utiliser ce code au focus de plusieurs formulaires, je l'ai déplacé dans un module MO_DIVERS et lors de l'exécution, j'obtiens l'erreur suivante : Utilisation incorrecte du mot clé Me.

    J'ai cherché mais je ne vois pas ce que je peux faire. Il semblerait que je doive l'utiliser dans un module de classe mais je n'ai jamais touché à cette partie du VBA et ça semble complexe.

    Le déboggeur me donne l'erreur sur l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str_formulaire = Me.Name
    qui me sert à connaître le nom du formulaire actif.

    Existe-t-il une autre solution ?

  2. #2
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    Bonsoir,
    J'ai cherché mais je ne vois pas ce que je peux faire. Il semblerait que je doive l'utiliser dans un module de classe
    ce n'est pas nécessaire si on comprend que Me est un mot réservé aux modules de classe (formulaires et états) et désigne le formulaire dans lequel se trouve le code. Il ne peut donc pas être utilisé dans un module standard sans préciser de quel objet il s'agit.
    La solution: Il faut remplacer Me par une variable que le module standard puisse interpréter.
    Mais pour cela il faut d'abord modifier la procédure cod_gele_enr_selon_transfert() en ajoutant un paramètre de type formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub cod_gele_enr_selon_transfert(pFrm as Form)
    ensuite, dans l'évènement Form_Current du formulaire actif il faut passer l'objet formulaire en paramètre en utilisant Me puisqu'il désigne le formulaire actif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Current()
     
        ' Permet de d'autoriser ou d'empêcher l'utilisateur de toucher l'enregistrement si le numéro de référence et égal ou inférieur à celui du formulaire FO_TRANSFERT pour ce formulaire.
     
        ' Historique :
        '   v00.001.00001.00001;
        'cod_gele_enr_selon_transfert
        cod_gele_enr_selon_transfert Me
        'DoCmd.Close
     
    End Sub
    enfin, il faut remplacer Me par l'objet formulaire pFrm dans toute la procédure cod_gele_enr_selon_transfert:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'str_formulaire = Me.Name
    str_formulaire = pfrm.Name
     
    'Me.Controls(str_nom_champs).Enabled = False
    pfrm.Controls(str_nom_champs).Enabled = False
    ' ...

  3. #3
    Membre éclairé
    Homme Profil pro
    informaticien retraité
    Inscrit en
    Mai 2017
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : informaticien retraité

    Informations forums :
    Inscription : Mai 2017
    Messages : 285
    Par défaut
    Bonjour tee_grandbois,

    Tout d'abord, merci pour votre réponse.

    Cependant, lorsque je l'exécute, vba me dit que la ligne où j'ai ajouté "Me" a une variable non définie.

    Comment dois-je le définir ? J'ai tenté quelques essais mais en vain, vba me retire même le code dans les événements.

    Merci.

  4. #4
    Membre éclairé
    Homme Profil pro
    informaticien retraité
    Inscrit en
    Mai 2017
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : informaticien retraité

    Informations forums :
    Inscription : Mai 2017
    Messages : 285
    Par défaut
    Bonjour à nouveau,

    Désolé, j'avais fait une erreur lors de l'écriture de ME j'avais mis Mw.

    Maintenant tout fonctionne bien.

    Votre solution me donne les résultats escomptés.

    Merci beaucoup de l'attention portée à mon cas et je vais placer la discussion à Résolu.

  5. #5
    Membre éclairé
    Homme Profil pro
    informaticien retraité
    Inscrit en
    Mai 2017
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : informaticien retraité

    Informations forums :
    Inscription : Mai 2017
    Messages : 285
    Par défaut
    Bonjour,

    Je viens d'effectuer tous les essais possibles et je me rend compte que lorsqu'il s'agit d'un sous-formulaire ça ne fonctionne pas. Je reçois l'erreur "Erreur d'exécution 438" "Propriété ou méthode non gérée par cet objet".

    Sur la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                    pFrm.Controls(str_nom_champs).Enabled = True
    Merci.

  6. #6
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    bonjour,
    un sous-formulaire n'est pas un formulaire mais un contrôle de type sous-formulaire au sein d'un formulaire, donc ton code ne peut pas fonctionner en l'état sans tenir compte de ce type d'objet et il m'est difficile de proposer une solution sans connaitre le but exact du code de la procédure cod_gele_enr_selon_transfert

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sql - Utilisation incorrecte du mot-clé Order
    Par defluc dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/02/2018, 18h25
  2. Réponses: 2
    Dernier message: 09/10/2008, 21h35
  3. utilisation incorrecte du mot clé
    Par maccloud dans le forum Bases de données
    Réponses: 18
    Dernier message: 09/06/2007, 19h11
  4. [VB6] erreur de compilation:utilisation incorrecte du mot clé New
    Par fouf_01 dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 17/05/2006, 16h22
  5. erreur : utilisation incorrecte du mot clé
    Par StyleXP dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/02/2006, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo