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 :

[VBA] Récupération du mauvais champ


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 14
    Points
    14
    Par défaut [VBA] Récupération du mauvais champ
    Bonjour,

    Je post sur le forum car mon souci m'est plutôt obscur, suite à des recherches sur les tutoriels j'ai réussi à dénicher un source parfait pour mon appli. Il s'agit de celui sur la géneration d'une liste déroulante en fonction de la précedente!

    Le probléme viens du fait que j'utilise le même code, et ce 3 fois de suite, mais pour la 4 il y a un souci, en effet je ne récupére pas le bon champ, alors que je ne change rien par rapport au fois précedente!

    Voici une liste qui fonctionne correctement:

    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 cmbPoste_AfterUpdate()
    Dim lngIDPoste   As Long
    Dim SQL        As String
     
      '' Vérifie que l'on a cliqué sur une catégorie pour éviter le NULL
      If Not IsNumeric(Me!cmbPoste) Then Exit Sub
      '' Affecte la valeur de ID_Atelier à la variable lngIDAt
      lngIDPoste = Me!cmbPoste
      '' Construit la chaîne SQL avec la catégorie concernée
      SQL = "SELECT T_Agent.ID_Agent, Nom, Prenom FROM T_Agent,T_Qualification WHERE T_Qualification.Id_Poste =" & lngIDPoste & " AND T_Agent.ID_Agent = T_Qualification.id_Agent ORDER BY Nom"
      '' Affecte la chaîne SQL à la liste des agents
      cmbAgent.RowSource = SQL
      '' Déverrouille la liste des agents
      cmbAgent.Enabled = True
      '' Donne le focus la liste des agents
      cmbAgent.SetFocus
      '' Déroule la liste des agents
      cmbAgent.Dropdown
    End Sub

    lngIDPoste = Me!cmbPoste la valeur enregistré est bien un long! L'ID_Poste en l'occurence.

    Ensuite, à la ligne suivante je sauvegarde la requête SQL me permettant de récupere l'ID de l'agent son nom et prénom. Et j'affecte cet requête SQL a ma liste, celle-ci affichant bien les personne concerné par les critéres précedents!

    Mais lorsque je choisi un des agents, je souhaite nous plus mettre à jour une liste mais une case à cocher, pour cela j'utilise DAO, mais le premier probléme avant même de m'attaquer à la compréhension de l'utilisation DAO est que je récupére le nom de l'agent et non son ID. Ce qui pose probléme étant donné que je vérifie grâce à une valeur numérique si un champ est sélectionner mais également pour ma requête qui suit.


    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Private Sub cmbAgent_AfterUpdate()
    Dim lngIDPoste As Long
    Dim lngIDAgent As Long
     
    Dim SQL As String
     
    Dim Dispense As Boolean
     
    '' Insertion de la base de donnée en cours dans la variable Db
    Dim oRst As DAO.Recordset
    Dim oDb As DAO.Database
    Set oDb = CurrentDb
     
     
     
      '' Active la case à cocher de la dispense ainsi que la durée.
      CocherDispense.Enabled = True
      DureeDispense.Enabled = True
     
     
    '' Vérifie que l'on a cliqué sur une catégorie pour éviter le NULL
     
    ''/////////////////////////////////////////////////////
    ''/////////////////////////////////////////////////////
    ''C'est la ligne suivante qui ne va pas, en effet Me!cmbAgent est en faite 
    ''le nom de l'agent.
     If Not IsNumeric(Me!cmbAgent) Then Exit Sub
    "////////////////////////////////////////////////////
    "////////////////////////////////////////////////////
     
     
      '' Affecte la valeur de ID_Atelier à la variable lngIDAt
     
     lngIDAgent = Me!cmbAgent
      lngIDPoste = Me!cmbPoste
     
      SQL = "SELECT Dispense_Medical FROM T_Qualification WHERE id_Agent =" & lngAgent & " AND id_Poste =" & lngPoste & ""
     
      Set oRst = oDb.OpenRecordset(SQL, dbOpenDynaset)
     
      MsgBox "Le champ dispense à pour valeur: " & oRst.Fields("Dispense_Medical").Value
     
     
      Dispense = oRst.Fields("Dispense_Medical").Value
     
     
      '' Affecte la valuer à la case cocher de dispense
      Me!CocherDispense = Dispense
     
      oRst.Close
      oDb.Close
      Set oRst = Nothing
      Set oDb = Nothing
     
    End Sub

    Si vous voyes un tutoriel faisant réference à mon probléme mais que je n'aurai pas vu, je vous prie de me donner le lien ou si vous connaisez la réponse à ce petit souci qui je suis sur n'est rien, merci d'avance de me la donner.

    Je retourne essayer d'arranger ça et j'indiquerai si oui ou non, j'ai réussi à trouver la solution, merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 370
    Points
    34 370
    Par défaut
    Bonjour,

    quelle valeur t'est retournée dans la msbox que tu utilises ?
    - True / False ?
    - -1/0 ?

    Pense à ajouter des .Value dans ton code, ca évitera des erreurs par la suite aussi

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    A vrai dire mon souci ce situe avant, car je ne veux pas m'attaquer à la suite avant d'avoir résolu mon probléme mais oui, le but sera de retourner un true/false étant donnée que dans ma base le champ Dispense_Medical est un true/false.

    Sinon, j'ai essayer avec .Value mais la donnée extraite de ma listbox est toujours le nom et non l'id, qui figure pourtant en premier dans ma requête et dans ma table :/

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 370
    Points
    34 370
    Par défaut
    Ok,
    la listbox a-t-elle la bonne colonne liée ?
    si la listbox a plusieurs colonnes, il est possible de spécifier le numéro de la colonne qui sera récupérée par la fonction .value en VBA.

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Erf.... merci.... l'erreur était vraiment stupide

    Et le reste du code est opérationnel
    Sauf la message box, d'ailleurs si tu sais comment insérer la valeur Vrai/faux et que ce n'est pas long je suis intéressé! Mais ce n'était que pour tester donc rien de bien important en somme.


    Comment je suis trop content, mais comment je suis trop content



    Bon , j'en profite pour dire merci !! Les tutos sont super, et notament celui sur le DAO

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 370
    Points
    34 370
    Par défaut
    La requête SQL sous vba te retournera un booleen si ton champ en est un

    tu peux même passer par les fonctions de domaine (Dlookup,DCount,Dmax, etc.)

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/11/2006, 19h00
  2. [VBA] remplissage d'un champs selon une recherche
    Par Virgile59 dans le forum Access
    Réponses: 7
    Dernier message: 04/11/2005, 09h52
  3. vba masquer afficher un champ pour saisie
    Par rollly dans le forum Access
    Réponses: 4
    Dernier message: 21/09/2005, 16h40
  4. [TIBSQL] Problème de récupération d'un champs
    Par TitiFr dans le forum Bases de données
    Réponses: 6
    Dernier message: 07/08/2005, 13h33
  5. Récupération d'un champs
    Par gibet_b dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/07/2004, 11h19

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