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 d’exécution "91" - Access


Sujet :

VBA Access

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Erreur d’exécution "91" - Access
    Bonjour à tous,

    Je viens vers vous après avoir peluché le fofo et le net a propos de mon problème.

    J'ai une base qui tourne de manière mensuelle, (1 fois par mois) et le code a toujours très bien marché.
    Seulement, lors du mois de septembre,une erreur surgit, la fameuse "91" Objet variable ou Variable With non défini.

    J'ai essayé beaucoup de chose, déclarer de manière différente mes objets etc... Rien n'y fait.

    La base est sur un réseau, et elle est exactement identique au mois précédent (lorsqu'elle fonctionnait).

    Voici le Code, le débogueur s'arreter sur la ligne: rst_tci.Close


    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
        ' requête pour sélectionner les contrats dont la durée n'est pas multiples de 12
        ' et les durées supérieures à 12 mois
        ' et les devises XPF et EUR
        SQL_contrat_durée1 = "SELECT Calcul_Marges.* FROM Calcul_Marges WHERE("
        SQL_contrat_durée2 = SQL_contrat_durée1 & " ([DEVISE]='XPF' OR [DEVISE]='EUR') AND [MULTIPLE]<>0 AND [RESTANT]<>0 AND [TCI_bis] is null);"
     
        ' Initialisation des recordset
        Dim rst_tci As DAo.Recordset
        Dim rst As DAo.Recordset
     
        ' Enregistrement de la sélection des contrats dans un recordset
        Set rst = CurrentDb.OpenRecordset(SQL_contrat_durée2, dbOpenDynaset, dbConsistent)
     
        ' boucle pour parcourir chaque contrat du recordset
        If Not rst.EOF Then
            rst.MoveFirst
            While Not rst.EOF
     
                ' Insérer pour chaque enregistrement du recordset la valeur des champs utiles dans des variables
                Marges_Courbe = rst.Fields(41).Value
                Marges_Type_amort = rst.Fields(33).Value
                Marges_Pas_amort = rst.Fields(35).Value
                Marges_RA = Replace((rst.Fields(40).Value), ",", ".")
                Marges_Duree = rst.Fields(42).Value
                Marges_Annee = rst.Fields(28).Value
                Marges_Semaine_mois = rst.Fields(26).Value
                Marges_Tci_inf_proche = rst.Fields(46).Value
                Marges_Tci_sup_proche = rst.Fields(47).Value
                Marges_Duree_inf_proche = rst.Fields(48).Value
                Marges_Duree_sup_proche = rst.Fields(49).Value
                Marges_Multiple = rst.Fields(44).Value
                Marges_Restant = rst.Fields(45).Value
                Marges_Date_signature = rst.Fields(18).Value
     
                ' requête pour sélectionner les TCI en fonction de tous les critères SAUF la durée
                SQL_TCI_STOCK1 = "SELECT TCI_STOCK.* FROM TCI_STOCK WHERE("
                SQL_TCI_STOCK2 = SQL_TCI_STOCK1 & " [Courbe marche]='" & Marges_Courbe & "' AND"
                SQL_TCI_STOCK3 = SQL_TCI_STOCK2 & " [Type Amortissement]='" & Marges_Type_amort & "' AND"
                SQL_TCI_STOCK4 = SQL_TCI_STOCK3 & " [Periodicite]='" & Marges_Pas_amort & "' AND"
                SQL_TCI_STOCK5 = SQL_TCI_STOCK4 & " [RA]=" & Marges_RA & " AND"
                SQL_TCI_STOCK6 = SQL_TCI_STOCK5 & " [Semaine Mois]='" & Marges_Semaine_mois & "' AND"
                SQL_TCI_STOCK7 = SQL_TCI_STOCK6 & " [Annee]='" & Marges_Annee & "');"
     
     
                ' Enregistrement de la requête de selection des TCI dans un recordset
                Set rst_tci = CurrentDb.OpenRecordset(SQL_TCI_STOCK7, dbOpenSnapshot, dbAppendOnly)
     
                ' boucle pour parcourir chaque TCI du recordset
                If Not rst_tci.EOF Then
     
                    ' Initialisation des durées inf/sup les + proches
                    rst.Edit
                    rst.Fields(48).Value = 0    ' durée min
                    rst.Fields(49).Value = 600  ' durée max
                    rst.Update
     
                    rst_tci.MoveFirst
                    While Not rst_tci.EOF
     
                    ' Boucle pour trouver la durée inférieure la plus proche
                    If (rst_tci.Fields(4) < Marges_Duree) And (rst.Fields(48).Value < rst_tci.Fields(4)) Then
                        rst.Edit
                        rst.Fields(48).Value = rst_tci.Fields(4) 'Récupération de la durée inférieur la + proche
                        rst.Update
                    End If
     
                    ' Boucle pour trouver la durée supérieure la plus proche
                    If (rst_tci.Fields(4) > Marges_Duree) And (rst.Fields(49).Value > rst_tci.Fields(4)) Then
                        rst.Edit
                        rst.Fields(49).Value = rst_tci.Fields(4) 'Récupération de la durée supérieure la + proche
                        rst.Update
                    End If
     
                    ' Passer au TCI suivant
                    rst_tci.MoveNext
                    Wend
                End If
                ' Passer au contrat suivant
                rst.MoveNext
            Wend
        End If
     
        'Fermeture des recordset
        rst_tci.Close
        rst.Close
        Set rst_tci = Nothing
        Set rst = Nothing

    Merci d'avance!

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 250
    Points
    34 250
    Par défaut
    Hello,

    a quelle ligne on doit regarder stp ?

    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour Jean Philippe,

    Dans mon premier message, j'ai indiqué que le débogueur me signifie la ligne 84 - rst_tci.Closed

    Merci d'avance pour ton aide

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 250
    Points
    34 250
    Par défaut
    Salut,
    La cloture du recordset rst_tci ne se fait pas au bon endroit selon moi.

    Tu devrais la mettre dans la boucle de ton rst.eof
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     rst_tci.MoveNext
                    Wend
                End If
        'Fermeture des recordset
        rst_tci.Close
                ' Passer au contrat suivant
     
                rst.MoveNext
            Wend
        End If
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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