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

IHM Discussion :

Code VBA pour un bouton [AC-2010]


Sujet :

IHM

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Code VBA pour un bouton
    Bonjour à tous !

    Voilà je fais appel à vous car je n'arrive pas à cerner d'où vient mon problème étant donné que Visual Basic ne me retourne aucune erreur. Voici l'image :



    Voici le contexte : Je sélectionne une formation dans la liste déroulante du haut, qui me retourne le libellé, la date de début/fin ainsi que la liste des salarié ayant demandé cette formation dans la zone de liste à gauche.
    Le bouton au milieu doit me permettre de créer un enregistrement dans une table appelée "SUIVRE" à condition que l'avis du supérieur (AvisSuper dans la table "DEMANDER") soit favorable "F". S'il est défavorable "D" on affiche un message pour dire que l'inscription est impossible.
    Je cherche a coder ce bouton permettant l'ajout de l'enregistrement, sauf que quand je clique dessus, je n'ai aucune erreur retournée de la part de Visual Basic, mais aucun résultat voulu non plus ! Voici le code du bouton :

    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 Commande12_Click()
    Dim bdFormation As Database
    Dim rsSuivre As Recordset
    Dim requete As String
    Set bdFormation = CurrentDb()
    requete = "select CodeSala, CodeForm, AvisSuper from DEMANDER where CodeSala ='" & ListeDemandeur & "'" & " AND CodeForm ='" & Modifiable0 & "'"
    Set rsSuivre = bdFormation.OpenRecordset(requete, DB_OPEN_DYNASET)
    If AvisSuper = "D" Then
    MsgBox ("Avis défavorable ... inscription impossible !!!")
    End If
    If AvisSuper = "F" Then
    Set rsSuivre = bdFormation.OpenRecordset("SUIVRE", DB_OPEN_DYNASET)
    rsSuivre.AddNew
    rsSuivre!CodeSala = ListeDemandeur
    rsSuivre!CodeForm = Modifiable0
    rsSuivre.Update
    MsgBox ("Participation acceptée !")
    End If
    End Sub
    Sauriez vous d'où vient le problème ? D'avance merci pour votre aide !

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 689
    Points : 14 690
    Points
    14 690
    Par défaut
    Bonsoir,
    tu dois utiliser le champ du resordset pour faire ton test : If AvisSuper = "F" ne te ramènera rien car la variable AvisSuper n'existe pas, il faut préfixer avec le nom du recordset : nomdurecordset!champ ou nomdurecordset("champ") ...
    De plus, il est préférable de ne pas être avare de déclaration des recordsets :
    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
    Private Sub Commande12_Click()
    Dim bdFormation As Database
    Dim rsDemander As Recordset
    Dim rsSuivre As Recordset
    Dim requete As String
    Set bdFormation = CurrentDb()
    requete = "select CodeSala, CodeForm, AvisSuper from DEMANDER where CodeSala ='" & Me.ListeDemandeur & "'" & " AND CodeForm ='" & Me.Modifiable0 & "'"
     
    Set rsDemander = bdFormation.OpenRecordset(requete, dbOpenSnapshot)
     
    If Not rsDemander.EOF Then
        If rsDemander!AvisSuper = "D" Then
            rsDemander.Close
            Set rsDemander = Nothing
            MsgBox ("Avis défavorable ... inscription impossible !!!")
            Exit Sub
        End If
     
        If rsDemander!AvisSuper = "F" Then
            Set rsSuivre = bdFormation.OpenRecordset("SUIVRE", dbOpenDynaset)
            rsSuivre.AddNew
            rsSuivre!CodeSala = Me.ListeDemandeur
            rsSuivre!CodeForm = Me.Modifiable0
            rsSuivre.Update
            rsSuivre.Close
            Set rsSuivre = Nothing
            MsgBox ("Participation acceptée !")
        End If
    End If    
        rsDemander.Close
        Set rsDemander = Nothing
    End Sub
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre réponse, le code marche à merveille !
    Seulement... J'aimerais bien comprendre un peu plus les modifications que vous y avez apporté avec le rsDemander.nothing, If Not rsDemander.EOF etc...
    Car je ne l'ai pas vu en cours, donc j'arrive pas trop à comprendre

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 689
    Points : 14 690
    Points
    14 690
    Par défaut
    Bonjour,
    le mot clé Nothing est utilisé à la fin du code pour désallouer la mémoire affectée à une variable objet :
    rsDemander est une variable objet de type Recordset à laquelle, par la méthode OpenRecordset, tu affectes la valeur requete qui elle-même est une variable de type String et qui contient un phrase SQL.

    On utilise la propriété EOF du recordset pour savoir s'il y a des enregistrements lors d'une lecture en boucle, mais on pourrait utiliser aussi BOF ou RecordCount s'il n'y a pas de boucle, comme dans ton cas. Cela permet d'éviter les messages d'erreur en particulier le 3021 (Aucun enregistrement en cours) et de conditionner l'exécution du code suivant selon la présence ou non de l'enregistrement.

    Un conseil si tu ne comprends pas quelque chose dans VBA : avoir le réflexe gagnant d'appuyer sur la touche (après avoir surligné le mot-clé avec la souris).
    Je l'utilise encore même 17 ans après avoir utilisé Access pour la première fois.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci bien pour toutes ces explications très utiles ! C'est agréable de trouver un forum avec des personnes comme vous !

    Oui le réflexe du F1 je l'ai déjà ne vous en faites pas ! Mais bon, même avec l'aide, je ne m'en sors pas toujours

    En tout cas merci pour vos réponses aussi rapides et claires ! Je passe le sujet en résolu !

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

Discussions similaires

  1. [XL-97] Code vba pour bouton modifier
    Par yosra_jemai dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/03/2013, 07h53
  2. [AC-2007] code vba pour bouton création etat
    Par mili972 dans le forum Access
    Réponses: 1
    Dernier message: 30/08/2012, 16h09
  3. [AC-2007] code vba pour bouton en relation avec case oui/non
    Par ivonick dans le forum VBA Access
    Réponses: 4
    Dernier message: 25/05/2011, 13h44
  4. [XL-2007] code vba pour cliquer sur un bouton dans internet explorer
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/01/2011, 20h21
  5. Code VBA pour bouton de commande
    Par myster88 dans le forum VBA Access
    Réponses: 4
    Dernier message: 29/10/2008, 06h42

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