Qu’est-ce que "Me" en langage VBA ?

Ces articles pourraient également vous intéresser...

12 réponses

  1. HAIFED dit :

    bonjour,
    Voilà, je n’est pas su comment faire pour mettre à jour le champ ‘quantité en stock’ de la table produit, aprés qu’une ‘quantité’ d’un produit donné ait fait objet d’une commande dans la table lignecommande. ceci se passe dans une application Access.
    même en utilisant des requêtes de type mise à jour çà n’a rien donné( UPDATE produit, regrouper SET produit.nouveaustock = produit.qtestock-regrouper.qtite
    WHERE produit.refprod=regrouper.refproduir;)
    si vous pouvez m’aider merci.

    • Hervé Inisan dit :

      Est-ce que le volume de données est important ? Si oui, le calcul peut être intéressant. Sinon, il vaut mieux effectuer le calcul dynamiquement, lorsqu’on a besoin des quantités. Ceci peut se faire par une requête de regroupement, ou un DSum() en VBA. L’avantage est qu’on est sûr d’avoir toujours des valeurs à jour.

  2. bobe48000 dit :

    bonjour mon professeur Hervee
    dans le sujet de Me
    j’ai un formulaire pour saisie les dates de vaccination des enfants
    j’ai par exemple
    1- le champ [bcgpo] qui reçoit une date le champ de [sbcgpo] reçoit la date de jour de saisie c a d ” = Now ”
    2- le champ [hbv1] qui reçoit une date le champ de [shbv1] reçoit la date de jour de saisie c a d ” = Now ”
    resume tous les champs ont un champ d’historique de saisie qui comence par s+nom de champ
    comment si possible cree un procedure apele ensuite par l’ evenement after update de champ active pour que le champ d’historique reçoit la valeur now
    j ai essaye plusieurs procedure qui consiste a concatene le
    ” ME&”S”&ActiveControleName” mais toujours erreur
    et merci je suis desole pour le longueur de explication

    • Hervé Inisan dit :

      Cet autre article devrait aider.
      Mais si tous les champs de la table sont doublés par un champ d’historique, la table est sans doute mal construite. Il faudrait probablement une table d’historique distincte.

      • bobe48000 dit :

        Bonjour et Merciiiiiiiiiiiiiiii
        mais pourquoi en construire une nouvelle table ??????
        meme ds l’article de date de mise a jour qui j’ai lus avant consiste a cree le champ a même table !!!!!! bref je trouve ça facile a gérer cad ts au meme table
        AAAAAAA!!!!!! un autre question svp pourquoi avant mis ajour pas après mis ajour de champ quel est la différence

        • Hervé Inisan dit :

          Si tous les champs sont systématiquement dupliqués, on va alourdir la table pour des raisons d’historique. C’est pour cette raison qu’une table Historique serait plus adaptée (elle séparera la table métier de la table d’historique). Dans l’article de “Date de mise à jour”, il n’y a qu’un champ, ce qui n’alourdit pas encore la table.
          Sinon : l’événement “Avant MAJ” se déclenche avant que les données ne soient écrites dans la table. C’est le meilleur endroit pour intervenir sur les données avant leur stockage.

          • bobe48000 dit :

            bien j’ai compris
            la solution de crée une table a part d’historique
            mais quel est la relation entre ces deux table
            je pense que la relation 1-1 ????????
            et merci

          • Hervé Inisan dit :

            Ça peut être une relation 1:n : la table principale peut avoir plusieurs versions de son historique (si c’est utile dans le projet).

  3. QuestionAcc dit :

    Le mot réservé Me est utilisé dans un module de classe.
    Dans ce module de classe, j’ai créé une fonction xxx() utilisant Me.
    Je veux attacher cette fonction à un événement d’un formulaire.
    Or, si je saisis le nom de la fonction du module de classe (=xxx()) à l’utilisation de mon formulaire la fonction n’est pas reconnue.
    La même manière de faire avec un fonction dans un module standard fonctionne bien.
    Comment déclarer une fonction d’un module de classe dans un événement d’un formulaire ???
    Merci d’avance

  4. Hervé Inisan dit :

    QuestionAcc > N’ayant pas le détail de la classe, je ne vais pas être très précis. Mais à vue de nez :

    1. Il faut que la méthode de classe (la fonction) soit publique, pour pouvoir être visible de l’extérieur de la classe.
    2. Il faut instancier la classe puis invoquer la méthode.
    3. La bonne pratique consiste à libérer la classe ensuite.

    Ça peut donner quelque chose comme :

  5. Hervé Inisan dit :

    possible924 > Pour faire référence aux champs, ce sont simplement 2 variantes de syntaxe.

    • La variante Me![Nom de champ], pour un formulaire ou un état est conforme à la syntaxe Access générale. Par ex., si un formulaire 1 doit récupérer un champ d’un formulaire 2, on peut écrire : =Forms![Formulaire 2]![Champ 2]. En VBA, on peut utiliser la même chose exactement, ou Me![...] si le champ se trouve sur le formulaire en cours. Le champ entre crochets est celui de la table (écrit à l’identique), ou celui du formulaire, de l’état…
    • La variante Me. est plus proche de la notation pointée des classes VBA. L’avantage est qu’ici on peut utiliser l’auto-complétion (le fait que VBE suggère les noms de champs après le point. L’inconvénient (petit) étant que le nom du champ peut être transformé : Me![Nom de champ] devient Me.Nom_de_champ. Mais VBE propose la version corrigée, donc pas de souci.

    Par contre, pour faire référence aux propriétés d’un formulaire, on utilisera seulement la notation pointée : Me.Caption, etc.

  6. possible924 dit :

    Bonjour,
    Quelle est la diffèrence entre Me. et Me!
    Merci pour votre réponse

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">