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 :

L'expression entrée fait référence à un objet fermé ou supprimé


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 21
    Points
    21
    Par défaut L'expression entrée fait référence à un objet fermé ou supprimé
    Bonjour à tous,

    J'essaye de faire quelque chose d'à priori simple en VBA sous access.
    A savoir j'ai un contrôle textbox dans lequel j'entre un code postal.
    Une fois que l'utilisateur tape entrée un sous formulaire est censé affiché une requête sql au travers d'un recordset indiquant (par exemple) le nom de toute les personnes dont le code postal est celui précédemment indiqué. Pour testé le code postal est à 14350 mais se déclenche quand même après mise à jour du textbox.J'utilise une liste de choix pour vérifier que la requête est ok : elle et ok
    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Texte2_AfterUpdate()
    Dim strSQL As String
    Dim rst As DAO.Recordset
    strSQL = "SELECT Nom FROM Tab_client WHERE Code_postal=14350"
    Modifiable4.RowSource = strSQL
    Set rst = CurrentDb.OpenRecordset(strSQL)
    Set Me.Fille0.Form.Recordset = rst
    End Sub
    J'ai beaucoup chercher pour résoudre ce problème. L'objet Fille0 existe bel et bien.
    Merci d'avance pour la moindre piste que vous pourriez me fournir pour solutionner ce $^*ù*^$ù de problème.

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    Mauvais méthode et pas la bonne approche non plus.

    Pour lier un sous-formulaire à une valeur d'un formulaire il faut utiliser les propriétés Champ père/Champ Fils du container du sous-formulaire.

    Concernant le code :
    Pourquoi ne pas passer directement la string SQL à la propriété Recordsource du sous-formulaire comme tu le fais avec la liste.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    Bonjour loufab, merci beaucoup pour ta réponse.

    Je ne peux utiliser les champs père et fils car le formulaire est indépendant.
    Pour l'utilisation du recordsource j'ai un autre message d'erreur :
    Utilisation incorrecte de la propriété.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Me.Fille0.Form.RecordSource = rst
    Est-ce qu'il pourrait s'agir d'un problème de librairie non installée ? DAO 3.6 Object Library ?

    Preneur de toutes pistes.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    On n'a pas besoin de Set pour utiliser la propriété RecordSource, ce serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Fille0.Form.RecordSource = rst
    Cordialement
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Ajoutons que RecordSource est une chaine de caractère et non un recordset

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    Bonjour à tous les 2 et merci pour vos réponses.

    Je me rend compte que mes connaissances en VBA access sont bien trop justes.
    Néanmoins à force de "bricoller" j'ai défini l'objet source de mon sous-formulaire comme étant ma table dans laquelle j'effectue ma requête (Table.Tab_client) et là au miracle j'ai un semblant de début de solution puisque s'affiche le résultat de la requête.
    Nom : Ess_1.JPG
Affichages : 1934
Taille : 16,9 Ko
    Mais cela ne va pas complètement puisque tous les champs ne correspondant pas à la requête sont présent mais vide. Et il est possible de rajouter des noms à la base de données (et pas autre chose puisque les champs sont vides ou désactivés ?).
    Peut être que pour ce que je souhaite faire un sous-formulaire n'est pas l'idéal.

    Mon idée étant que, après avoir indiqué un code_postal dans le textbox on sélectionne un nom en fonction de ce que la requête a renvoyé.

    Sinon effectivement un RecordSource = string donc = directement la requète sql, pas besoin de passer par un RecordSet.

    Merci encore pour votre aide.

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Citation Envoyé par gelwc Voir le message

    Sinon effectivement un RecordSource = string donc = directement la requète sql, pas besoin de passer par un RecordSet.
    C'est la solution que je t'ai proposé, tu as dû la rater.

    Concernant le code :
    Pourquoi ne pas passer directement la string SQL à la propriété Recordsource du sous-formulaire comme tu le fais avec la liste.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    Bonjour Loufab,

    Oui j'avais essayé ta solution mais elle ne fonctionnait pas car je faisait recordsource = un recorset... pas bien. recordsource = requète SQL fonctionne mais il fallait auparavant mettre l'objet source de mon sous-formulaire égale à la table dans laquelle j'effectue la requête.
    Nom : Ess_2.JPG
Affichages : 1965
Taille : 28,9 Ko
    Je ne comprend pas pourquoi il faut faire cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Texte2_AfterUpdate()
    Dim strSQL As String
    strSQL = "SELECT Nom FROM Tab_client WHERE Code_postal=14350"
    Modifiable4.RowSource = strSQL
    Me.Result.Form.RecordSource = strSQL
    End Sub
    devrait fonctionnait mais (si je n'indique pas l'objet source dans les propriétés de mon sous-formulaire) j'ai cette fichue erreur de mes *ù*ù^$*^:"l'expression entrée fait référence à un objet fermé ou supprimé"

    Merci pour votre aide

  9. #9
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    D'un part un code Postal est toujours une valeur texte, justement pour stocker le 0 non significatif des départements de l'Ain à l'Ariège et puis parce que certains pays utilise également des lettres .

    Si la zone de liste affiche les bonnes données il n'y a pas de raisons que ton sous-formulaire que tu as nommé Result ne l'affiche pas.

    Voici un code qui fonctionne avec un sous-formulaire nommé Result :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Texte2_AfterUpdate()
    'soit avec un cp texte
    Me.Result.Form.RecordSource =  "SELECT Nom FROM Tab_client WHERE Code_postal='" & me.texte2.value & "'"
    'soit avec un cp numérique
    Me.Result.Form.RecordSource =  "SELECT Nom FROM Tab_client WHERE Code_postal=" & me.texte2.value
    End Sub
    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    tu as toujours l'erreur sur la ligne "me.result.form" ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    Bonjour Loufab et merci du temps que tu consacres à essayer de résoudre ce problème.

    Oui cela fonctionne uniquement si j'indique l'objet source de mon sous-formulaire égale à la table dans laquelle j'effectue la requête :
    Nom : Ess_2.JPG
Affichages : 1950
Taille : 28,9 Ko

    Peut-être est-ce normal. Peut être est-ce toujours comme cela qu'il faut faire pour un sous-formulaire. Mais cela ne correspond pas à ce que je veux. Je vais plutôt passer je pense par une liste et ensuite on sélectionnera directement dans cette liste :
    Nom : Ess_3.JPG
Affichages : 1918
Taille : 23,9 Ko

    Peut-être qu'un sous formulaire n'est pas ce qu'il me faut, je ne souhaite pas que l'on puisse ajouter des enregistrements juste que l'on sélectionne un enregistrement renvoyé par une requête. La liste me semble indiquée pour cela.

    Merci encore pour l'aide.

  12. #12
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    En effet inutile de sortir la grosse bertha pour une simple sélection, un liste fera l'affaire et sera plus facile à gérer.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  13. #13
    Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Janvier 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Janvier 2015
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    Bonjour à tous,

    Je relance ce vieux post pour ne pas en créer un doublon.
    J'ai le même message d'erreur : "...l'expression entrée fait référence à un objet fermé ou supprimé"

    Je veux utiliser une requete de mise à jour qui utilise les valeurs "somme" d'une autre requete.

    en mise à jour je pensais utiliser un rechdom afin de rechercher la valeur de la requete qui effectue les sommes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RechDom("[R94_IM_Somme]![SommeDeValeur estimée]";"[R94_IM_Somme]")
    voici la requete en sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE [T6-TNTTemporaire] SET [T6-TNTTemporaire].[ValeurEstimee-T6] = DLookUp("[R94_IM_Somme]![SommeDeValeur estimée]","[R94_IM_Somme]")
    WHERE ((([T6-TNTTemporaire].Connote)=[VarTemp]![Connotetemp]));
    Quelqu'un voit-il où se trouve mon erreur?
    J'ai passé la nuit à chercher sans succès.
    un énorme merci d'avance à tous

  14. #14
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    Ce message indique que l'une des expressions ne peut être résolu. Soit que l'objet est fermé (un formulaire/une requête) soit qu'il est en mode création.

    Si une requête utilise une autre requête autant y faire référence par une jointure et non une fonction de domaine.

    Si la jointure n'est pas possible utilise un fonction de domaine adaptée (Dsum) directement sur la table et non sur une requête.

    A noter qu'une fonction de domaine n'est ni plus ni moins qu'une fonction qui va créer une requête

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/12/2014, 18h21
  2. [Débutant] Référence d'objet et instance (visual C++ EXpress)
    Par Falckounet dans le forum Visual Studio
    Réponses: 0
    Dernier message: 01/08/2012, 12h10
  3. Réponses: 7
    Dernier message: 07/11/2011, 00h47
  4. Réponses: 0
    Dernier message: 07/12/2009, 15h50
  5. objet fermé ou supprimé
    Par harjer dans le forum VBA Access
    Réponses: 7
    Dernier message: 25/06/2007, 15h37

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