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 : Type defini par l'utilisateur non défini


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 23
    Points
    23
    Par défaut Erreur : Type defini par l'utilisateur non défini
    Bonjour à tous,

    Je rencontre un problème de compilation sur une application MS Access

    Je dois récupérer une variable dans une table, correspondant au dernier numéro d'enregistrement, ceci pour définir un nouveau numéro correspondant au 2 décimale de l'année en cours , récupérer les deux derniers digit du précédent enregistrement dans "Tbl_value" LastAnomalyRef incrémenté de +1 pour un nouvel enregistrement.

    Voici le code :
    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
     
    Private Function getAnomalyID() As String
    Dim vsQuery As String
        Dim vrstRecord As DAO.Recordset
     
        vsQuery = "SELECT ANOMALY_ID FROM ANOMALIES WHERE ANOMALY_REF LIKE '" & Format(Date, "yy") & "-*';"
        Set vrstRecord = CurrentDb.OpenRecordset(vsQuery, dbOpenSnapshot)
     
     
        If vrstRecord.RecordCount > 0 Then
     
            vsQuery = "SELECT Value FROM tbl_Values WHERE Field='LastAnomalyRef';"
            Set vrstRecord = CurrentDb.OpenRecordset(vsQuery, dbOpenSnapshot)
     
            DoCmd.RunSQL "UPDATE tbl_Values SET tbl_Values.Value='" & vrstRecord(0) + 1 & "' WHERE Field='LastAnomalyRef';"
     
            getAnomalyID = CStr(Format(Date, "yy") & "-" & Format(vrstRecord(0) + 1, "0000"))
     
     
        Else
            DoCmd.RunSQL "UPDATE tbl_Values SET tbl_Values.Value='1' WHERE Field='LastAnomalyRef';"
     
            getAnomalyID = CStr(Format(Date, "yy") & "-" & Format(1, "0000"))
        End If
     
     
    End Function
    Je cherche depuis des jours et ne trouve pas de solution

    D'avance merci pour votre aide et conseils

    Bonne journée et bon week-end

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    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 637
    Points : 14 611
    Points
    14 611
    Par défaut
    bonsoir,
    c'est très bien de poster le code mais ce serait aussi bien de préciser sur quelle ligne l'erreur se produit
    et ce n'est pas très prudent de redéfinir un Recordset en pleine lecture de ce dernier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Set vrstRecord = CurrentDb.OpenRecordset(vsQuery, dbOpenSnapshot)             '<===  ici
     
     
        If vrstRecord.RecordCount > 0 Then
     
            vsQuery = "SELECT Value FROM tbl_Values WHERE Field='LastAnomalyRef';"
            Set vrstRecord = CurrentDb.OpenRecordset(vsQuery, dbOpenSnapshot)       '<=== puis là
    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
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 592
    Points
    24 592
    Par défaut
    Bonjour,

    Déjà ça c'est une erreur typique de quelqu'un qui ne lit pas la documentation d'une instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Set vrstRecord = CurrentDb.OpenRecordset(vsQuery, dbOpenSnapshot)
     
        If vrstRecord.RecordCount > 0 Then
    Un recordcount après une ouverture de recordset est TOUJOURS à 0.

    Du coup tout le reste n'a aucune consistance.

    Cordialement,

    Conseil : Ne pas faire confiance ou ne pas faire une déduction de fonctionnement d'une instruction mais consulter la doc. Ensuite l'utiliser dans les bonnes conditions.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    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 637
    Points : 14 611
    Points
    14 611
    Par défaut
    bonjour loufab,
    Un recordcount après une ouverture de recordset est TOUJOURS à 0.
    il me semble que non, c'est à 0 quand il n'y a pas d'enregistrement mais quand il y en a au moins 1, il est à 1.
    Et pour connaitre le nombre exact, il faut faire un Movelast
    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
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 592
    Points
    24 592
    Par défaut
    En effet, je cours me cacher...
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    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 637
    Points : 14 611
    Points
    14 611
    Par défaut
    Citation Envoyé par loufab Voir le message
    En effet, je cours me cacher...
    tout le monde peut avoir une absence de temps en temps, je ne suis pas non plus irréprochable quelques (rares) 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 ?

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 086
    Points : 1 610
    Points
    1 610
    Par défaut
    Hello,

    J'ajouterai que la valeur de RecordCount n'etant pas fiable, le seul moyen de savoir si un recordset contiens des données est de tester les propriétés BOF et EOF.
    Si elles sont toutes les 2 à True (on est avant le début et après la fin), le recordset est vide:
    Mais en pratique, quand on vient d'ouvrir un recordset, on se contente de tester EOF.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    vsQuery = "SELECT ANOMALY_ID FROM ANOMALIES WHERE ANOMALY_REF LIKE '" & Format(Date, "yy") & "-*';"
    Set vrstRecord = CurrentDb.OpenRecordset(vsQuery, dbOpenSnapshot)
     
    If Not vrstRecord.EOF Then

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    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 637
    Points : 14 611
    Points
    14 611
    Par défaut
    bonjour,
    J'ajouterai que la valeur de RecordCount n'etant pas fiable, le seul moyen de savoir si un recordset contienst des données est de tester les propriétés BOF et EOF.
    Si on veut chipoter, c'est vrai qu'il est mieux de tester EOF, mai utiliser Recordcount > 0 est aussi fiable pour savoir si le Recordset n'est pas vide
    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 ?

Discussions similaires

  1. [XL-2007] Erreur de Compilation : type defini par l'utilisateur non defini
    Par devalender dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/01/2018, 11h11
  2. [XL-2003] Erreur de compilation " type defini par l'utilisateur non defini"
    Par JEXCELPAS dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/01/2015, 15h40
  3. Access2003 : type defini par l'utilisateur non défini
    Par jneron dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/09/2009, 23h53
  4. Réponses: 2
    Dernier message: 31/07/2007, 15h05
  5. Message erreur Type défini par l'utilisateur non défini
    Par Michel DELAVAL dans le forum Access
    Réponses: 2
    Dernier message: 27/06/2006, 16h37

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