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 dans le code, mais où?


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Par défaut erreur dans le code, mais où?
    Bonjour, ce code est censé ouvrir un formulaire, et atteindre l'enregistrement spécifié par l'utilisateur (selon un numéro de film saisie dans une input box)

    Donc ma démarche était de:
    Demandé le numéro de film
    Récupérer le numéro d'enregistrement en parcourant la table des films
    Ouvrir le formulaire
    Atteindre l'enregistrement correspondant au numéro de film...

    Hors.. ça ne marche pas, et il me renvoi que le numéro d'enregistrement est: 0 pour chaque film que je sélectionne

    Avez vous des idées pour m'aider?
    Merci!

    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
    Private Sub modfilm_Click()
    Dim mabase As Database
    Set mabase = CurrentDb
    Dim eng As DAO.Recordset
    Dim numeng As Integer
    Set eng = mabase.OpenRecordset("FILM")
     
    listfilm = ""
    eng.MoveFirst
    While eng.EOF = False
        listfilm = listfilm & eng.Fields("Numfilm") & " - " & eng.Fields("Titre") & vbCrLf
        eng.MoveNext
    Wend
     
    choixfilm = InputBox("Merci de choisir un film à éditer:" & vbCrLf & vbCrLf & listfilm, "Message d'administration")
    eng.MoveFirst
    While eng.EOF = False
        If eng.Fields("numfilm") = choixfilm Then
            numeng = Me.CurrentRecord
        End If
        eng.MoveNext
    Wend
    MsgBox (numeng)
    DoCmd.OpenForm ("formfilm")
    DoCmd.GoToRecord acDataForm, formfilm, acGoTo, numeng
     
    eng.Close
    End Sub

  2. #2
    Membre émérite
    Avatar de Gandalf24
    Homme Profil pro
    Integrateur Odoo
    Inscrit en
    Mai 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Integrateur Odoo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 481
    Par défaut
    Hug

    Voial ce que tu donnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    choixfilm = InputBox("Merci de choisir un film à éditer:" & vbCrLf & vbCrLf & listfilm, "Message d'administration")
    eng.MoveFirst
    While eng.EOF = False
        If eng.Fields("numfilm") = choixfilm Then
            numeng = Me.CurrentRecord
        End If
        eng.MoveNext
    Wend
    MsgBox (numeng)

    Bon ce qui me parait bizare est ton if :
    Si c'est pareil, tu prends la valeur de me.currentrecord et tu l'affecte a numeng.... Pourquoi ? a quoi ca sert ? me.currentrecord n'a rien a voir avec ta liste...

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Par défaut
    Bonsoir, ça marcherait mieux:

    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
     
    Private Sub modfilm_Click()
      Dim mabase As Database
      Dim eng As DAO.Recordset
      Dim numeng As Integer
      dim i as long, choixfilm as long
      dim listfilm as string
     
      Set mabase = CurrentDb
      Set eng = mabase.OpenRecordset("FILM")
     
      listfilm = ""
      eng.MoveFirst
      While eng.EOF = False
         listfilm = listfilm & eng.Fields("Numfilm") & " - " & eng.Fields("Titre") & vbCrLf
         eng.MoveNext
      Wend
     
      choixfilm = InputBox("Merci de choisir un film à éditer:" & vbCrLf & vbCrLf & listfilm, "Message d'administration")
      eng.MoveFirst
     
      i=0
      Do While eng.EOF = False
         If eng.Fields("numfilm") = choixfilm Then
    '       numeng = Me.CurrentRecord
           numeng = i
           exit do
        End If
        eng.MoveNext
        i=i+1
      Loop
      MsgBox (numeng)
      DoCmd.OpenForm ("formfilm")
      DoCmd.GoToRecord acDataForm, "formfilm", acGoTo, numeng
     
      eng.Close
     
      Set mabase = Nothing
      Set eng = Nothing
     
    End Sub

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Par défaut
    Bonjour

    A moins d'avoir mal lu, je dirais que vous prenez un avion pour rattraper un piéton

    Tu peux faire tous ca en deux lignes du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    choixfilm = InputBox("Merci de choisir un film à éditer:" & vbCrLf & vbCrLf & listfilm, "Message d'administration")
     
    Docmd.OpenForm "formfilm",,"NumFilm="&choixfilm
    Et tu peux contrôler avant d'ouvrir le formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    choixfilm = InputBox("Merci de choisir un film à éditer:" & vbCrLf & vbCrLf & listfilm, "Message d'administration")
    if nz(Dcount("*", "film","NumFilm="&choixfilm),0)<>0 then
         Docmd.OpenForm "formfilm",,"NumFilm="&choixfilm
    else
        msgbox "Pas de film correspondant au numéro saisi"
        '// ou alors tu ouvre le formulaire avec tous les enregistrement
    end if
    Je crois que c'est un peu plus simple.
    Je c

  5. #5
    Expert éminent

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

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Le movefirst en première instruction juste après l'ouverture du recordset me parait dangereux. Que t-il e va se passer si le jeu d'enregistrements est vide ?

    Pourquoi parcourir deux fois le recordset ? Je ne comprend pas bien ce que tu veux faire là.

Discussions similaires

  1. L'erreur n'est pas dans le code mais où ?
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 04/05/2009, 15h43
  2. [vb.net] erreur dans un code
    Par lou87 dans le forum Windows Forms
    Réponses: 36
    Dernier message: 24/04/2006, 10h56
  3. [VBA][Débutant][export]erreurs dans mon code?
    Par Christophe93250 dans le forum Access
    Réponses: 4
    Dernier message: 06/01/2006, 19h52
  4. Erreur dans du code
    Par claralavraie dans le forum ASP
    Réponses: 4
    Dernier message: 23/12/2005, 09h32
  5. [VBA] Erreur dans un code. Hierarchie DAO.
    Par snoopy69 dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/10/2005, 22h28

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