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 3420 => objet incorrect ou non défini


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Erreur d'exécution 3420 => objet incorrect ou non défini
    Rebonjour,

    J'ai une erreur à l'exécution avec pour explication le message indiqué dans l'intitulé. Le débogueur me positionne ensuite sur la ligne : ListeCompteursSecto.MoveNext. Je ne comprends pas car il me semble l'avoir mise où il faut.

    Pourriez-vous m'aider SVP ?

    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
    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
     
    Function CalculConsoCompteursSecto()
     
    'déclaration des variables
    Dim mabase As Database
    Dim ListeConsosParSecteur As Recordset
    Dim ListeCompteursSecto As Recordset
    Dim Réponse As Integer
    Dim IdCSEncours As Integer
    Dim message As String
    Dim CumulConsoSecteur As Integer
    Dim Req_ListeConsosParSecteur As String
     
    Set mabase = CurrentDb()
     
    message = "Calcul de la comsommation de chaque compteur de sectorisation"
    Réponse = MsgBox(message, 49, "ATTENTION")
     
    If Réponse = vbOK Then
     
    'DoCmd.Hourglass True
     
    'Requete qui liste les différents compteurs de sectorisation
    Req_ListeCompteursSecto = "SELECT IdComptSect FROM CompteursSectorisation;"
    Set ListeCompteursSecto = mabase.OpenRecordset(Req_ListeCompteursSecto, dbOpenDynaset)
     
    ListeCompteursSecto.MoveFirst
    While Not ListeCompteursSecto.EOF
    ListeCompteursSecto.Edit
     
    IdCSEncours = ListeCompteursSecto![IdComptSect]
     
        'Requete qui liste les redevables du compteur de secto sur lequel le recordset se trouve
        Req_ListeConsosParSecteur = "SELECT IdComptSect, Consommation FROM Abonné WHERE IdComptSect = " & IdCSEncours & ";"
        Set ListeConsosParSecteur = mabase.OpenRecordset(Req_ListeConsosParSecteur, dbOpenDynaset)
     
     
        'Calcul de la conso du compteur de secto sur lequel le recordset se trouve
        ListeConsosParSecteur.MoveFirst
        While Not ListeConsosParSecteur.EOF
            ListeConsosParSecteur.Edit
            CumulConsoSecteur = CumulConsoSecteur + ListeConsosParSecteur![Consommation]
            ListeConsosParSecteur.MoveNext
        Wend
     
        'Requete qui maj la conso du compteur de secto n°1
        mabase.Execute "UPDATE CompteursSectorisation SET ConsoTotaleCalculée = " & CumulConsoSecteur & " WHERE IdComptSect = " & IdCSEncours & ";"
        mabase.Close
     
        ListeCompteursSecto.MoveNext
    Wend
     
     
    'DoCmd.Hourglass False
    MsgBox "Calculs effectués !"
    Forms![SaisieCompteursSectorisation].Refresh
    End If
     
    End Function

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Il te faut un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListeConsosParSecteur.Update
    avant le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListeConsosParSecteur.MoveNext
    Pour mettre à jour ta modification

    Starec

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci mais ça ne change rien malgré les corrections apportées comme indiqué ci-dessous :

    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
     
    Function CalculConsoCompteursSecto()
     
    'déclaration des variables
    Dim mabase As Database
    Dim ListeConsosParSecteur As Recordset
    Dim ListeCompteursSecto As Recordset
    Dim Réponse As Integer
    Dim IdCSEncours As Integer
    Dim message As String
    Dim CumulConsoSecteur As Integer
    Dim Req_ListeConsosParSecteur As String
     
    Set mabase = CurrentDb()
     
    message = "Calcul de la comsommation de chaque compteur de sectorisation"
    Réponse = MsgBox(message, 49, "ATTENTION")
     
    If Réponse = vbOK Then
     
    'DoCmd.Hourglass True
     
    'Requete qui liste les différents compteurs de sectorisation
    Req_ListeCompteursSecto = "SELECT IdComptSect FROM CompteursSectorisation;"
    Set ListeCompteursSecto = mabase.OpenRecordset(Req_ListeCompteursSecto, dbOpenDynaset)
     
    ListeCompteursSecto.MoveFirst
    While Not ListeCompteursSecto.EOF
    ListeCompteursSecto.Edit
     
    IdCSEncours = ListeCompteursSecto![IdComptSect]
     
        'Requete qui liste les redevables du compteur de secto sur lequel le recordset se trouve
        Req_ListeConsosParSecteur = "SELECT IdComptSect, Consommation FROM Abonné WHERE IdComptSect = " & IdCSEncours & ";"
        Set ListeConsosParSecteur = mabase.OpenRecordset(Req_ListeConsosParSecteur, dbOpenDynaset)
     
     
        'Calcul de la conso du compteur de secto sur lequel le recordset se trouve
        ListeConsosParSecteur.MoveFirst
        While Not ListeConsosParSecteur.EOF
            ListeConsosParSecteur.Edit
            CumulConsoSecteur = CumulConsoSecteur + ListeConsosParSecteur![Consommation]
            ListeConsosParSecteur.Update
            ListeConsosParSecteur.MoveNext
        Wend
     
        'Requete qui maj la conso du compteur de secto n°1
        mabase.Execute "UPDATE CompteursSectorisation SET ConsoTotaleCalculée = " & CumulConsoSecteur & " WHERE IdComptSect = " & IdCSEncours & ";"
        mabase.Close
     
        ListeCompteursSecto.Update
        ListeCompteursSecto.MoveNext
    Wend
     
     
    'DoCmd.Hourglass False
    MsgBox "Calculs effectués !"
    Forms![SaisieCompteursSectorisation].Refresh
    End If
     
    End Function
    Peut-être que je m'y prend mal pour faire ma boucle dans une autre boucle ... ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Une chose me chagrine dans ton code ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    While Not ListeConsosParSecteur.EOF
            ListeConsosParSecteur.Edit
            CumulConsoSecteur = CumulConsoSecteur + ListeConsosParSecteur![Consommation]
            ListeConsosParSecteur.Update
            ListeConsosParSecteur.MoveNext
        Wend
    Pourquoi passer en mode edit ton recordset, puisque tu ne changes pas la valeur d'un champ de celui-ci ? Tu ne récupéres qu'une info.

    Starec

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    C'est bien vrai ça ! Je l'ai supprimé, tout comme le .update à ce moment là.
    Mais ça ne change pas.

    Visiblement, ce qui pose problème, à en croire mon debugger, c'est mon recordset baptisé "ListeCompteursSecto".

    Quand je met le curseur sur "While Not ListeCompteursSecto.EOF", j'ai déjà une infobulle qui m'indique que "l'objet est incorrect ou n'est plus défini"

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Refais ton code sans tous les Edit qui ne servent à rien, et mets des commentaires pour que l'on puisse un peu mieux comprendre.

    De plus tu utilises DAO, regarde ssi tu n'as pas la bibliothèque ADO dans les références, si c'est le cas surpprime la et mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ListeConsosParSecteur As DAO.Recordset
    Dim ListeCompteursSecto As DAO.Recordset
    De même pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim mabase as DAO.Database
    Starec

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Hé hé, c'est bon, j'ai ENFIN trouvé.
    Il s'agissait de ceci : "mabase.Close" que je faisais à tord.

    Ainsi c'est beaucoup 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    Function CalculConsoCompteursSecto()
     
    'déclaration des variables
    Dim mabase As dao.Database
    Dim Réponse As Integer
    Dim IdCSEncours As Integer
    Dim message As String
    Dim CumulConsoSecteur As Integer
     
    Dim Req_ListeCompteursSecto As String
    Dim Req_ListeConsosParSecteur As String
    Dim ListeCompteursSecto As dao.Recordset
    Dim ListeConsosParSecteur As dao.Recordset
     
    Set mabase = CurrentDb()
     
    message = "Calcul de la comsommation de chaque compteur de sectorisation"
    Réponse = MsgBox(message, 49, "ATTENTION")
     
    If Réponse = vbOK Then
     
    'DoCmd.Hourglass True
     
    'Requete qui liste les différents compteurs de sectorisation
    Req_ListeCompteursSecto = "SELECT IdComptSect FROM CompteursSectorisation;"
    Set ListeCompteursSecto = mabase.OpenRecordset(Req_ListeCompteursSecto, dbOpenDynaset)
     
    'Boucle qui va parcourir les différents compteurs de sectorisation
    ListeCompteursSecto.MoveFirst
    While Not ListeCompteursSecto.EOF
     
    'on stocke dans une variable l'identifiant du compteur secto sur lequel le recordset se trouve
    IdCSEncours = ListeCompteursSecto![IdComptSect]
     
    'on initialise et remet à zéro le CumulConsoSecteur
    CumulConsoSecteur = 0
     
        'Requete qui liste les redevables du compteur de secto sur lequel le recordset se trouve
        Req_ListeConsosParSecteur = "SELECT IdComptSect, Consommation FROM Abonné WHERE IdComptSect = " & IdCSEncours & ";"
        Set ListeConsosParSecteur = mabase.OpenRecordset(Req_ListeConsosParSecteur, dbOpenDynaset)
     
     
        'Calcul de la conso cumulée du compteur de secto sur lequel le recordset se trouve
        'Pour cela, on additionne les consos de tous redevables rattachés à ce compteur de sectorisation
        ListeConsosParSecteur.MoveFirst
        While Not ListeConsosParSecteur.EOF
            CumulConsoSecteur = CumulConsoSecteur + ListeConsosParSecteur![Consommation]
            ListeConsosParSecteur.MoveNext
        Wend
     
        'Requete qui met à jour la conso du compteur de secto sur lequel le recordset se trouve
        mabase.Execute "UPDATE CompteursSectorisation SET ConsoTotaleCalculée = " & CumulConsoSecteur & " WHERE IdComptSect = " & IdCSEncours & ";"
     
        ListeCompteursSecto.MoveNext
    Wend
     
     
    'DoCmd.Hourglass False
    MsgBox "Calculs effectués !"
    Forms![SaisieCompteursSectorisation].Refresh
    End If
     
    End Function

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

Discussions similaires

  1. [XL-2013] erreur d'exécution 91 variable objet ou variable de bloc with non définie
    Par tmlpqsdpmdlc dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 08/06/2015, 13h25
  2. Réponses: 12
    Dernier message: 20/04/2015, 12h42
  3. Réponses: 6
    Dernier message: 24/02/2015, 09h06
  4. Réponses: 4
    Dernier message: 24/05/2014, 19h24
  5. Réponses: 6
    Dernier message: 31/03/2010, 09h56

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