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 :

Affecter une variable objet à une autre variable objet


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 80
    Points
    80
    Par défaut Affecter une variable objet à une autre variable objet
    Bonjour,
    Je me demande si c'est possible de passer une variable dans un SET

    ex:
    Je reçois en paramètre trois valeur string NomFormulaire, NomObjet et le choix des données que je veux afficher.

    Dans ce code, j'ai une erreur "Qualificateur incorrect"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set NomFormulaire.NomObjet.Recordset = rs

    NomFormulaire et NomObjet sont reçu comme étant des string...je crois que le problême est là mais je ne sait pas quel type mettre...j'ai tenté la déclaration NomFormulaire as form mais sans succès

    Quelqu'un a une idée?

    Merci!

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 80
    Points
    80
    Par défaut
    J'ai ceci dans un module:

    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
    Public Function RemplirListe(strChoixListe As String, strNomFormulaire As String, strNomObjet As String)
     
       On Error GoTo RemplirListe_Error
     
        Dim cnn As New ADODB.Connection
        Dim rs As New ADODB.Recordset
        Dim SQL As String
     
        cnn.Open CurrentProject.BaseConnectionString
     
     
        Select Case strChoixListe
     
        Case "Prénom":
            SQL = "SELECT tblClients.Prénom FROM tblClients;"
     
            rs.Open SQL, cnn, adOpenStatic, adLockReadOnly
            Set strNomFormulaire.strNomObjet.Recordset = rs
    '        Set Form_frmAccueil.lstPrenom.Recordset = rs
     
        Case "Nom":
            SQL = "SELECT tblClients.Nom FROM tblClients;"
     
            rs.Open SQL, cnn, adOpenStatic, adLockReadOnly
            Set strNomFormulaire.strNomObjet.Recordset = rs
    '        Set Form_frmAccueil.lstNom.Recordset = rs
     
        Case "Âge":
            SQL = "SELECT tblClients.Âge FROM tblClients;"
     
            rs.Open SQL, cnn, adOpenStatic, adLockReadOnly
            Set strNomFormulaire.strNomObjet.Recordset = rs
    '        Set Form_frmAccueil.lstAge.Recordset = rs
     
        End Select
        rs.Close
        cnn.Close
     
     
       On Error GoTo 0
       Exit Function
     
    RemplirListe_Error:
     
        MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure RemplirListe of Module modRequetes"
    End Function

    et dans mon formulaire j'ai cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.lstPrenom.RowSource = RemplirListe("Prénom", me.form.name, lstPrenom)

  3. #3
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 80
    Points
    80
    Par défaut
    Si j'entre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Form_frmAccueil.lstPrenom.Recordset = rs
    directement sans variable, ca fonctionne très bien et lorsque je met les variables et que je regarde le contenu des variables, il y a bel et bien la même chose mais il me semble que le SET ne veux pas prendre le contenu de la variable mais son nom...j'ai l'impression que c'est là le problême mais je me demande si quelqu'un n'aurait pas une idée?

  4. #4
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 80
    Points
    80
    Par défaut
    Non fonctionnel..je croyais avoir trouvé la solution mais ce n'est pas le cas

  5. #5
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Set ne fonctionne qu'avec des variables objets.
    Si tu veux passer un objet formulaire en paramètre d'une fonction, depuis le code d'un formulaire
    déclare le paramètre de type Form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function LaFonction(fm As Form)
        MsgBox "Formulaire " & fm.Name
    End Function
    Code exemple d'appel : Sélectionner tout - Visualiser dans une fenêtre à part
    LaFonction Me.Form

    Tu peux aussi, à partir du nom du formulaire, récupérer un objet Form.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function LaFonction(strFm As String)
        Dim fm As Form
        Set fm = Forms(strFm)
        MsgBox "Formulaire " & fm.Name
    End Function
    Code exemple d'appel : Sélectionner tout - Visualiser dans une fenêtre à part
    LaFonction Me.Name
    A+

  6. #6
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 80
    Points
    80
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set frmNomFormulaire = Forms(strNomFormulaire)
    n'a pas l'air de fonctionner en vba

  7. #7
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 80
    Points
    80
    Par défaut
    Ca avance...maintenant mon formulaire fonctionne (le 2em paramètre) mais mon dernier paramètre ne veut pas fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function RemplirListe(strChoixListe As String, frmNomFormulaire As Form, cboNomComboBox as ComboBox)

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Déclare ton ComboBox comme integer
    Amicalement

  9. #9
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 80
    Points
    80
    Par défaut
    Bonjour,

    Merci beaucoup LedZeppII et DMboup pour vos suggestions.

    Pour ce qui est de déclarer le combo comme étant un integer, je ne comprends pas trop l'astuce...en fait, ce n'est pas une valeur du combo mais bien le nom du combo.

    Je n'ai encore rien trouvé

  10. #10
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Ça peut fonctionner comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function RemplirListe(strChoixListe As String, frmNomFormulaire As Form, strCtlName As String)
    La référence à l'objet contrôle sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frmNomFormulaire.Controls(strCtlName)
    Le code de ta fonction devient :
    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
    Public Function RemplirListe(strChoixListe As String, frmNomFormulaire As Form, strCtlName As String)
     
       On Error GoTo RemplirListe_Error
     
        Dim cnn As New ADODB.Connection
        Dim rs As New ADODB.Recordset
        Dim SQL As String
     
        cnn.Open CurrentProject.BaseConnectionString
     
     
        Select Case strChoixListe
     
        Case "Prénom":
            SQL = "SELECT tblClients.Prénom FROM tblClients;"
     
            rs.Open SQL, cnn, adOpenStatic, adLockReadOnly
            Set frmNomFormulaire.Controls(strCtlName).Recordset = rs
    '        Set Form_frmAccueil.lstPrenom.Recordset = rs
     
        Case "Nom":
            SQL = "SELECT tblClients.Nom FROM tblClients;"
     
            rs.Open SQL, cnn, adOpenStatic, adLockReadOnly
            Set frmNomFormulaire.Controls(strCtlName).Recordset = rs
    '        Set Form_frmAccueil.lstNom.Recordset = rs
     
        Case "Âge":
            SQL = "SELECT tblClients.Âge FROM tblClients;"
     
            rs.Open SQL, cnn, adOpenStatic, adLockReadOnly
            Set frmNomFormulaire.Controls(strCtlName).Recordset = rs
    '        Set Form_frmAccueil.lstAge.Recordset = rs
     
        End Select
        rs.Close
        cnn.Close
     
     
       On Error GoTo 0
       Exit Function
     
    RemplirListe_Error:
     
        MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure RemplirListe of Module modRequetes"
    End Function
    Cependant il y a peut-être un problème avec la durée de vie des variables objet rs et cnn.

    La méthode la plus répandue pour modifier la source d'une zone de liste serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frmNomFormulaire.Controls(strCtlName).RowSource = SQL
    éventuellement suivi de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frmNomFormulaire.Controls(strCtlName).Requery
    A+

  11. #11
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 80
    Points
    80
    Par défaut
    Merci LedZeppII,

    Je regarde le tout ce soir quand je serais à la maison.

    Bonne journée!

  12. #12
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 80
    Points
    80
    Par défaut
    Ça fonctionne!!
    Merci beaucoup!!!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/11/2012, 19h44
  2. Réponses: 0
    Dernier message: 19/11/2012, 11h57
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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