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 :

erreur d'execution 2185 lors de l'execution d'une sub vba


Sujet :

VBA Access

  1. #1
    Membre habitué Avatar de jubourbon
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 540
    Points : 189
    Points
    189
    Par défaut erreur d'execution 2185 lors de l'execution d'une sub vba
    Bonjour,

    J'ai un formulaire avec une listebox affichant le resultat d'une requete. Je souhaite filtrer les résultat depuis le formulaire. Pour cela j'ai créé 3 textbox ou l'utilisateur peut saisir du texte pour filtrer.
    Ensuite l'utilisateur clique sur un bouton.
    Sur l’événement de clique j'ai une procédure associé:
    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
     
    Private Sub txtNumProd_Change()
        Dim sReq As String
        sReq = "SELECT Produits.nom, Produits.Description, Fournisseurs.nom "
        sReq = sReq & "FROM Fournisseurs INNER JOIN Produits ON Fournisseurs.IDFournisseur=Produits.IDFournisseurs "
     
        If (txtNumProd <> "") Then
            sReq = sReq & " Where Produits.nom like '" & txtNumProd.Text & "' "
        Else
            sReq = sReq & " Where true=true "
        End If
     
        If (txtNomProd <> "") Then
           sReq = sReq & " AND Produits.Description like '%" & txtNomProd.Text & "%' "
        Else
            sReq = sReq & " AND true=true "
        End If
     
        If (txtNomProducteur <> "") Then
            sReq = sReq & " AND Fournisseurs.nom like '" & txtNomProd.Text & "' "
        Else
            sReq = sReq & " AND true=true "
        End If
     
        sReq = sReq & "ORDER BY Produits.MaterialNumberLong;"
        sReq = sReq & " "
     
        lstResult.RowSource = sReq
        lstResult.Requery
     
        If (lstResult.ListCount) > 0 Then
            lstResult.Selected(0) = False
        End If
    End Sub
    J'ai précédé le nom de mes textbox par txt et le nom de ma listbox par lst

    Quand le code s’exécute il me renvoi l'erreur suivante:
    "erreur d’exécution 2185" impossible de faire référence à une propriété ou de la définir pour un contrôle si ce dernier n'est pas activé

    Je ne comprend pas ce message, tous mes contrôles existe, le nom est le bon.

    Bref je suis preneur de tous conseils, même si je m'y prend mal et que quelqu'un a une autre solution.

    Par avance merci pour votre aide.

  2. #2
    Membre averti Avatar de robyseb
    Homme Profil pro
    Programmeur-Analyste
    Inscrit en
    Juillet 2011
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur-Analyste
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2011
    Messages : 305
    Points : 423
    Points
    423
    Par défaut
    Bonjour!
    Premièrement ces bizarre tu dit :
    Sur l’événement de clique j'ai une procédure associé:
    et ta procédure porte ce nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub txtNumProd_Change()
    nous devrions voir quelques chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub txtNumProd_Click()
    Ensuite ton erreur semble venir du fait que un de tes contrôle ne soit pas activé lors du déroulement de ton code alors vérifie ca ... avec la fonction d'un contrôle tu peut l'activer au moment opportun

    cordialement

  3. #3
    Membre habitué Avatar de jubourbon
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 540
    Points : 189
    Points
    189
    Par défaut
    Bonjour,

    Oui le nom de la procédure et du au fait que j'ai changé l'association de l’événement et de la procédure, mais cela n'a pas d'incidence sur l’exécution du code.

    J'ai ajouté au debut de ma procedure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        txtNumProd.Enabled = True
        txtNomProd.Enabled = True
        txtNomProducteur.Enabled = True
    Mais ça me renvoi la meme erreur

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Lorsque tu écris txtNumProd , c'est comme si tu écrivais txtNumProd.Value car c'est la propriété par défaut d'une zone de texte.

    Hors sur un évènement change il faut utiliser la propriété text.

    Donc essayes :

    à la place de
    De plus, laisses le mot Me, comme quoi le code est dans le formulaire, c'est (je trouve) plus clair dans du code.

    Philippe

  5. #5
    Membre habitué Avatar de jubourbon
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 540
    Points : 189
    Points
    189
    Par défaut
    J'ai remis ma fonction attaché à l’événement changement de valeur du txtNumProd.

    Merci pour les conseils de bonne pratique je les également appliqués.

    Lorsque le code s’exécute et qu'il arrive sur les autres textbox du formulaire (ceux qui n'ont pas déclenché) et qui sont vide (rien n'est saisi dedans) il me renvoi toujours la même erreur

    Voici mon code à présent:
    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
     
    Private Sub txtNumProd_Change()
        Dim sReq As String
        sReq = "SELECT Produits.nom, Produits.Description, Fournisseurs.nom "
        sReq = sReq & "FROM Fournisseurs INNER JOIN Produits ON Fournisseurs.IDFournisseur=Produits.IDFournisseurs "
     
        If (Me.txtNumProd.Text <> "") Then
            sReq = sReq & " Where Produits.nom like '" & txtNumProd.Text & "' "
        Else
            sReq = sReq & " Where true=true "
        End If
     
        If (Me.txtNomProd.Text <> "") Then
           sReq = sReq & " AND Produits.Description like '*" & txtNomProd.Text & "*' "
        Else
            sReq = sReq & " AND true=true "
        End If
     
        If (Me.txtNomProducteur.Text <> "") Then
            sReq = sReq & " AND Fournisseurs.nom like '" & txtNomProd.Text & "' "
        Else
            sReq = sReq & " AND true=true "
        End If
     
        sReq = sReq & "ORDER BY Produits.MaterialNumberLong;"
        sReq = sReq & " "
     
        lstResult.RowSource = sReq
        lstResult.Requery
     
        If (lstResult.ListCount) > 0 Then
            lstResult.Selected(0) = False
        End If
    End Sub

  6. #6
    Membre habitué
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Points : 131
    Points
    131
    Par défaut
    Bonjour à tous,

    Pour ma part, dans un cas similaire, j'utilise la méthode BuildCriteria sur un formulaire afichant ma requête afin de construire mon filtre à partir d'un text box.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.Filter = BuildCriteria("[MonChamp]", dbText, txtNumProd & "*")
        Me.FilterOn = True
    Peut-être une piste à explorer en remplacant Me.filter par ta variable string sReq...

    Amicalement.

  7. #7
    Membre averti Avatar de robyseb
    Homme Profil pro
    Programmeur-Analyste
    Inscrit en
    Juillet 2011
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur-Analyste
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2011
    Messages : 305
    Points : 423
    Points
    423
    Par défaut
    Salut est-ce que tes textbox sont visible ? si non ca ne fonctionne pas

    ces la même chose que enabled soit merci pour le me. et l'indication du .value phillipe c'est bon à savoir

  8. #8
    Membre habitué Avatar de jubourbon
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 540
    Points : 189
    Points
    189
    Par défaut
    Merci à tous,

    Tous est visible, mais dans le code c'est le 3eme txtbox qui pose problème et renvoi tjs la même erreur. Je m'arrache les cheveux

    mc.schmer peux tu me donner un exemple de BuildCriteria utilisé avec une listbox?

  9. #9
    Membre habitué
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Points : 131
    Points
    131
    Par défaut
    @ jubourbon

    Je vais proceder à quelques test et je reviens vers toi...

  10. #10
    Membre habitué
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Points : 131
    Points
    131
    Par défaut
    Re,

    Bon voila, les tests ne sont pas concluants...
    à titre indicatif, voila pourquoi :
    Considerons un textbox nommé "txt_filtre", une variable string "str_filtre" pour récupérer le résutat de BuidCriteria, une variable string str_sql servant à construire ton instruction SQL et la méthode BuildCriteria suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim str_filtre As String
    Dim str_sql As String
    Dim str_src As String
     
    str_filtre = BuildCriteria("[MonChamp]", dbText, txt_filtre)
    str_sql = "SELECT [MonChamp] FROM MaTable WHERE "
    str_src = str_sql & str_filtre
    Si on tape "A" dans le textbox, str_filtre nous renvoi
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str_src = "SELECT [MonChamp] FROM MaTable WHERE [MonChamp]="A""
    Au final, je ne pense pas que cette méthode puisse t'apporter quoi que ce soit d'interessant ormis le verouillage de ta condition WHERE.

    Désolé pour la fausse piste. Mea culpa

  11. #11
    Membre habitué Avatar de jubourbon
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 540
    Points : 189
    Points
    189
    Par défaut
    Citation Envoyé par mc.schmer Voir le message
    Désolé pour la fausse piste. Mea culpa
    Pas de soucis, c'est super sympa d'avoir pris le temps de tester.

    En revanche mon problème d'erreur est toujours présent. Quelqu'un a une piste?

  12. #12
    Membre habitué
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Points : 131
    Points
    131
    Par défaut
    Quelques petits trucs basiques:
    As-tu simplement tenter d'effacer tes textbox en question pour mieux les recréer... S'il s'agissait d'un problème de paramétrage, il pourrait bien être résolu.
    As-tu tenter de les renommer?
    As-tu tenter de remplacer tes texbox par des inputbox? Si oui quel réaction?

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour

    .text pour les zones de textes qui ont l'évènement Change (txtNumProd) dans ton cas et .value pour les autres.

    A tester.

    Philippe

  14. #14
    Membre habitué Avatar de jubourbon
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 540
    Points : 189
    Points
    189
    Par défaut
    Citation Envoyé par mc.schmer Voir le message
    Quelques petits trucs basiques:
    As-tu simplement tenter d'effacer tes textbox en question pour mieux les recréer... S'il s'agissait d'un problème de paramétrage, il pourrait bien être résolu.
    As-tu tenter de les renommer?
    As-tu tenter de remplacer tes texbox par des inputbox? Si oui quel réaction?
    Bonjour, j'ai tenter d'effacer et refaire, de le renommer, rien y fait. Quelque chose m’échappe.

    J'ai trouvé une solution de contournement et créant des variable correspondant à chaque txtbox que je remplie lors du changement. Comme ca je suis sur que l'objet est actif et je requête ensuite avec ces variable.

    Mais je trouve ça très surprenant, je viens du .Net et je suis un peu surpris du fonctionnement des form en vba.

  15. #15
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 86
    Points : 85
    Points
    85
    Par défaut Même problème, recherche, et finalement, solution
    Bonjour,

    Je comprendrai jamais comment Microsoft peut se permettre d'avoir des philosophies de développement différentes pour une même gamme de produits.

    J'ai un recordset qui me renvoie un enregistrement unique, et à partir duquel je souhaite remplir une zone de texte (textbox).

    Sur Excel 2003, maTextBox.Text = maValeur marche sans problème.

    Après fouille intense pour Access, j'ai finalement trouvé la solution dans l'aide associée (touche F1 sur windows) de la propriété ... Text du textbox.

    Ainsi, il est bien précisé dans l'aide d'Access que le contrôle doit être actif avant de pouvoir lire ou écrire sa valeur, ce qui signifie, en VBA, qu'il faut lui assigner le focus AVANT de le lire ou de le charger.

    Ce qui, accessoirement, impacte l'écran visuel puisque sélectionne le textbox en question et l'affiche, ce qui est parfois extrêmement génant (je pense notamment au contrôle onglet, quand on charge un bon paquet de valeurs ...).

    Cela étant, voici le code correct pour la solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    maTextBox.SetFocus
    maTextBox.Text = maValeur
    Clair qu'ils ont fait de gros efforts de cohérences et d'efficacité dans Visual Studio et SQL Server ...

  16. #16
    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 : 41
    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
    Ou tout simplement :

    maTextBox.Value= maValeur

Discussions similaires

  1. [LibreOffice][Base de données] Erreur sur les dates lors de l'execution d'un script BASIC.
    Par Al PiGiNo dans le forum OpenOffice & LibreOffice
    Réponses: 4
    Dernier message: 05/11/2014, 09h37
  2. Erreur java.io.EOFException lors de l'execution
    Par kevin254kl dans le forum Java EE
    Réponses: 6
    Dernier message: 16/10/2014, 16h33
  3. [XL-2010] Erreur lors de l'appel d'une fonction VBA à partir d'Excel
    Par Romain92 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/09/2014, 11h21
  4. Réponses: 1
    Dernier message: 23/07/2014, 14h33
  5. Erreur sur certains ordis lors de l'execution
    Par Nix6800 dans le forum VB.NET
    Réponses: 7
    Dernier message: 06/07/2009, 22h55

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