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 :

Appeler le nom du champ dans une fonction


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Points : 42
    Points
    42
    Par défaut Appeler le nom du champ dans une fonction
    Bonjour,

    dans un formulaire en mode tabulaire, j'ai une procédure qui recopie la valeur du premier enregistrement dans tous les autres (code ci dessous).
    Dans la procedure j'ai le nom du champ qui est cité et donc si je veux avoir la même procédure sur un autre camp il faut que je la copie et l'adapte à chaque fois.

    J'aimerai en faire une fonction où je peux passer le nom du champ en paramètre ou avoir un truc du style me.activetruc.value si ça existe sous access.

    exemple actuel pour le champ substance :

    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
    Private Sub SUBSTANCE_DblClick(Cancel As Integer)
    Dim Valeur As Variant
    Dim num As Integer
    Dim nbrecord As Integer
    Dim i As Integer
     
    nbrecord = Me.RecordsetClone.RecordCount
     
    DoCmd.GoToRecord , , acFirst
    Valeur = SUBSTANCE.Value
    i = 1
     
    While i <> nbrecord
        DoCmd.GoToRecord , , acNext
        SUBSTANCE.Value = Valeur
        i = i + 1
    Wend
     
    End Sub
    Merci d'avance pour votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    il est peu recommande d'utilise les DoCmd dans du code VBA (en dehors de DocMd.open et DoCmd.Close) car ils sont tres contextuels et peuvent donc ne pas fonctionner ou faire des modif la ou on s'y attend pas.
    Il y a des fois ou il n'y pas d'autre solution mais elles sont rares.

    Voici ma suggestion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub SUBSTANCE_DblClick(Cancel As Integer)
        Dim Valeur As Variant:valeur=me.SUBSTANCE 'Recupere la valeur de SUBSTANCE pour l'enregistrement courant.
     
       if me.recordset.recordcount <>0 then
            me.recordset.movefirst
            do while not me.recordset.eof
                me![SUBSTANCE]=valeur 'Le .value est optionel
                me.recordset.movenext
            loop
       end if
     
    End Sub
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Je vais me corriger moi-meme :


    il est peu recommande d'utilise les DoCmd dans du code VBA (en dehors de DocMd.open et DoCmd.Close) car ils sont tres contextuels et peuvent donc ne pas fonctionner ou faire des modif la ou on s'y attend pas.
    Il y a des fois ou il n'y pas d'autre solution mais elles sont rares.
    Finalement on se sert assez souvent de DoCMd en VBA.
    Ce n'est pas DoCmd en general qui est en cause mais ces DoCmd en particulier qui sont vraiment dependant de l'environnement.

    Desole de la generalisation abusive.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Points : 42
    Points
    42
    Par défaut
    Bonjour et Merci pour ces explications, j’ai appris quelque chose au passage.

    j'ia un peu modifié le code car je recopie la valeur du premier enregistrement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub CEP_DMF_REF_DblClick(Cancel As Integer)
     
    Dim Valeur As Variant
     
       If Me.Recordset.RecordCount <> 0 Then
            Me.Recordset.MoveFirst
            Valeur = Me.CEP_DMF_REF 'Recupere la valeur de SUBSTANCE pour l'enregistrement courant.
            Do While Not Me.Recordset.EOF
                Me![CEP_DMF_REF] = Valeur 'Le .value est optionel
                Me.Recordset.MoveNext
            Loop
       End If
     
    End Sub
    Maintenant, ça ne répond pas à ma question qui est: je souhaite faire de cette procedure, une fonction ou globale qui soit sait sur quel control elle fonctionne ou sinon je met le nom du control en parametre, par exemple (je ne sais pas si activcontrol existe et/ou sert à ça :

    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
     
    Public sub RECOPIE()
    Dim Valeur As Variant
     
       If Me.Recordset.RecordCount <> 0 Then
            Me.Recordset.MoveFirst
            Valeur = Me.activcontrol 'Recupere la valeur de l'enregistrement courant.
            Do While Not Me.Recordset.EOF
                Me![activcontrol] = Valeur 
                Me.Recordset.MoveNext
            Loop
       End If
     
    Private Sub CEP_DMF_REF_DblClick(Cancel As Integer)
     
    recopie
     
    End Sub
    Merci par avance pour votre aide

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    La collection Controls est ce que tu cherches.

    Ici un exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public sub uneFontcion(prmNomControl as string)
       debug.print me.controls(prmNomControl)
    end sub
    Et si tu veux savoir quel est le controle actif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print screen.ActiveControl.name
    Personnellement je n'en suis pas fan car la aussi c'est dependant du contexte.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 284
    Points : 284
    Points
    284
    Par défaut
    Bonjour,
    une solution peut-être est d'écrire dans la feuille de propriété du contrôle au niveau de l'onglet Evènement et puis "Sur double click" ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NomDeLaFonction(NomDuControle)
    dans ton exemple ça donne pour le contrôle SUBSTANCE :
    Bien cordialement
    Un travail qui plait est à moitié fait.

Discussions similaires

  1. [Flex4] multiples appels d'un même service dans une fonction
    Par polo31 dans le forum Flex
    Réponses: 5
    Dernier message: 01/08/2012, 14h54
  2. appel d'un autre callback dans une fonction
    Par jponsoda dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 23/06/2010, 10h01
  3. Changer nom de variable dans une fonction
    Par noquioz dans le forum Langage
    Réponses: 2
    Dernier message: 10/09/2009, 10h57
  4. Paramètre (nom de formulaire) dans une fonction
    Par Martin_77 dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/02/2008, 12h12
  5. Appel d'un fichier .js dans une fonction javascript
    Par Ubum dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/01/2008, 15h08

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