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 :

Problème requête ajout/select en VBA [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut Problème requête ajout/select en VBA
    Bonjour à tous,


    Je cherche à switcher des devis en factures.
    Une aide m'avait été donnée quelques temps au préalable mais aujourd'hui j'ai pas mal modifié mon appli et je rencontre des problèmes pour adapter l'aide qui m'avait été donnée... J'ai pas mal cherché, essayé, je n'arrive à rien.

    Voici mon code qui me permet via un bouton de transférer mes informations devis vers factures:
    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
    Private Sub BtnCreerFacture_Click()
    Dim strSQL As String
    Dim NumFact As Long
    Dim rstsform As DAO.Recordset
    'Rajouter dans la table facture le numéro de client et de devis.
    strSQL = "INSERT INTO T_Factures ( ID_Devis_FK_Fact, ID_Client ) SELECT " & Me.ID_Devis & "," & Me.ID_Client & ";"
    DoCmd.RunSQL strSQL ' Exécuter la requête
    'Récupérer le numéro de la facture
    NumFact = DMax("[ID_Facture]", "[T_Factures]")
    'Parcourir le sous-formulaire
    Set rstsform = Me.SF_Devis_Details.Form.RecordsetClone
    With rstsform
        .MoveFirst
        While Not .EOF
        'Insérer les détails du devis dans la facture NumFact
        strSQL = "INSERT INTO T_Factures_Details " _
                & "( ID_Facture, ID_Prod_FK_Fact, Designation, Quantite, Prix_Unitaire," _
                & "Remise, TVA )" _
                & " SELECT " & NumFact & "," & rstsform![ID_Prod_FK_Devis] & ",'" & rstsform![Designation] & "'," _
                & Replace(rstsform![Quantite], ",", ".") & "," & Replace(rstsform![Prix_Unitaire], ",", ".") & "," _
                & Replace(rstsform![Remise], ",", ".") & "," & Replace(rstsform![TVA], ",", ".") & ";"
    'Debug.Print strSQL
        DoCmd.RunSQL strSQL
        .MoveNext
        Wend
    End With
    Set rstsform = Nothing
    'Ouvrir le formulaire de facturation sur le client
    DoCmd.OpenForm "F_Clients_Factures", , , "[ID_Client] =" & Me.ID_Client
    Lorsque je clique sur mon bouton l'erreur est: "erreur de compilation: Membre de méthode ou de donnée introuvable" .ID_Devis est surligné en bleu dans le code à sa première apparition...
    Je ne comprends pas pourquoi...
    Voici également un screen de mes relations (donc on peut également voir le nom de mes champs...).
    Nom : Sans titre.png
Affichages : 150
Taille : 107,3 Ko

    Merci d'avance à celui qui me sortira de la.
    A bientôt.

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    Membre de méthode ou de donnée introuvable" .ID_Devis est surligné en bleu dans le code à sa première apparition...
    C'est donc que le formulaire dans lequel se trouve le bouton BtnCreerFacture ne contient pas de contrôle qui porte le nom ID_Devis.

    Vérifie l'orthographe du nom du contrôle auquel tu veux te référer.

  3. #3
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Bonjour Claude merci pour ta réponse.

    J'avais effectivement déduit que le contrôle ID_Devis devait être faux et pourtant dans mon formulaire, j'ai bien un ID_Devis (qui contient la valeur ID_Devis; mon contôle et le nom de mon contrôle ont le même nom).
    Il semblerait que l'erreur soit hélas pour moi plus subtile que ça

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    D'ici, pas d'idée.

    Un échantillon de ta BdD en Access2000 ?

  5. #5
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 114
    Points : 108
    Points
    108
    Par défaut
    bonjour

    il ne faudrait pas plutôt utiliser Me!ID_Devis ?

  6. #6
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Bonjour à vous deux.


    Pour la conversion en version 2000 ça ca être dur dur pour moi, travaillant avec AC2013, je fais l'effort d'utiliser les fonctionnalités avancées (qui sont pour certaines clairement et uniquement des simplifications de ce qu'on pouvait déjà faire avec les autres versions, mais que je ne saurais justement pas mettre en place avec les anciennes versions).
    Si je ne trouve aucune solution, je regarderais pour pouvoir reproduire les éléments nécessaire en version 2000.

    Concernant le Me!, à ma connaissance, cela revient à Me. sauf qu'il est plus restrictif .Dans le doute j'ai essayé, mais cela ne change rien.

  7. #7
    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,

    J'ai ce genre de problème de temps en temps en vba et je n'ai jamais compris pourquoi.
    En fait, il doit y avoir un problème dans la référence à Me.
    Les solutions que j'ai trouvé : soit Compacter et décompiler la base, soit reconstruire le formulaire et recopier le code dessus, soit reprendre le code à 0.

    C'est embêtant, mais j'ai jamais compris la cause.

    Bonne continuation

  8. #8
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    J'ai remarqué quelque chose d'effectivement similairement incompréhensible pour moi;
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_Current()
    If IsNull(Forms.F_Clients_Factures.Form!SF_Factures.Form!ID_Facture) Then: Me.Lst_Cat.Visible = False
    If IsNull(Forms.F_Clients_Factures.Form!SF_Factures.Form!ID_Facture) Then: Me.Lst_Design.Visible = False
    If Forms.F_Clients_Factures.Form!SF_Factures.Form!ID_Facture <> 0 Then: Me.Lst_Cat.Visible = True
    If Forms.F_Clients_Factures.Form!SF_Factures.Form!ID_Facture <> 0 Then: Me.Lst_Design.Visible = True
    End Sub
    Ce code fonctionne habituellement MAIS parfois lorsque je réouvre mon application, il arrive qu'une erreur soit mentionnée alors que il ne semble pas y en avoir (il suffit de fermer la fenêtre VBA et c'est bon)


    Et pour mon soucis de switch devis/factures, ça semble être dans le même genre, mais plus capricieux car je n'arrive pas à faire fonctionner le code... Qui fonctionne sur une autre appli avec moins de fonctionnalités, ça me rend chèvre!

  9. #9
    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
    Comme je disais, c'est l'objet (le formulaire) qui est un peu corrompu. A force de faire des corrections des codes VBA dessus, il doit perdre la tête . Donc il faut le soigner.

  10. #10
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Quelle impolitesse, je ne t'ai même pas salué surtout que c'était toi qui m'avait filé le code pour le switch au départ lol. Donc bonsoir à toi haha.

    Oui j'ai fais pas mal de correction modification, cela serait bien possible que quelques éléments soit corrompus... Je pense que je vais essayer de revoir tout cela ce soir.

  11. #11
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Bon.... j'ai refais l'objet au complet, je viens de finir et ça fonctionne!

    Si c'est stable je ne sais pas, mais pour le moment c'est bon

    Juste une chose si l'un de vous peut me dire si quelque chose semble étrange la dedans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_Current()
    If IsNull(Forms.F_Clients_Factures.Form!SF_Factures.Form!ID_Facture) Then: Me.Lst_Cat.Visible = False
    If IsNull(Forms.F_Clients_Factures.Form!SF_Factures.Form!ID_Facture) Then: Me.Lst_Design.Visible = False
    If Forms.F_Clients_Factures.Form!SF_Factures.Form!ID_Facture <> 0 Then: Me.Lst_Cat.Visible = True
    If Forms.F_Clients_Factures.Form!SF_Factures.Form!ID_Facture <> 0 Then: Me.Lst_Design.Visible = True
    End Sub
    J'ai à nouveau eu des conflits là dedans pendant que je refaisais mon objet, et je reconnais moi même que ça ne semble pas très propre, mais je ne savais pas comment l'écrire mieux (je souhaitais simplement rendre 2 listes du détails invisible ou inactive tant qu'un numéro de devis n'était pas sélectionné).


    Merci pour vos réponses à tous.

  12. #12
    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
    Bonjour,

    Il te faut regrouper les instructions par condition et comme tes conditions ne concernent qu'un seul contrôle, il faut essayer de les combiner.

    Je verrai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Current()
    If IsNull(Forms.F_Clients_Factures.Form!SF_Factures.Form!ID_Facture) _
        Or Forms.F_Clients_Factures.Form!SF_Factures.Form!ID_Facture = 0 Then
     
        Me.Lst_Cat.Visible = False
        Me.Lst_Design.Visible = False
    Else
        Me.Lst_Cat.Visible = True
        Me.Lst_Design.Visible = True
    End If
    End Sub
    Bonne continuation

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

Discussions similaires

  1. Problème Requête SQL SELECT
    Par Burton's91 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/06/2012, 19h18
  2. Problème requête ajout
    Par doudou666 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 14/07/2007, 19h25
  3. Problème requète trop selective
    Par mouatte dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/11/2006, 17h52
  4. requête de selection sur VBA?
    Par jessy212 dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 28/08/2006, 10h58
  5. Ouvrire requête de selection en VBA ..
    Par snoopy69 dans le forum Access
    Réponses: 2
    Dernier message: 17/10/2005, 15h55

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