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 :

[Programmation] Variable objet ou variable de bloc With non définie


Sujet :

VBA Access

  1. #1
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut [Programmation] Variable objet ou variable de bloc With non définie
    Bonjour !

    j'ai un souci avec le code suivant :

    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
        While Not tar.EOF
            For j = 1 To 10
     
                Dim criter As String
                criter = "SELECT * FROM R_intervalle_analyse " & "WHERE R_intervalle_analyse.n°fourchette =  " & j & " And R_intervalle_analyse.n°arrete = " & tar.Fields(0) & ";"
                Set rst = CurrentDb.OpenRecordset(criter)
     
                If Not IsNull(rst.Fields(2) = j) Then
     
                    'rempli la table T_Tmp_annee1
                    max = DMax("R_intervalle_analyse.[nb_analyse_annee1]", "R_intervalle_analyse", "R_intervalle_analyse.[n°fourchette]=" & j & " And R_intervalle_analyse.[n°arrete] = " & tar.Fields(0))
                    For k = 1 To max
                        rst2.AddNew
                        rst2.Fields(0) = rst.Fields(0)
                        rst2.Fields(1) = rst.Fields(2)
                        If IsNull(rst4.Fields(3)) Then
                            rst2.Fields(2) = (Int(52 / max / 2) + (k - 1) * rst.Fields(5)) * 7 + DateSerial(Year(Date), 1, 1)
                        Else
                            rst2.Fields(2) = (Int(52 / max / 2) + (k - 1) * rst.Fields(5)) * 7 + DateSerial(Year(Date), Month(rst4.Fields(3)), Day(rst4.Fields(3)))
                        End If
                        rst2.Update
                    Next k
     
                    'rempli la table T_Tmp_routine
                    max = DMax("R_intervalle_analyse.[nb_analyse_routine]", "R_intervalle_analyse", "R_intervalle_analyse.[n°fourchette]=" & j)
                    For k = 1 To max
                        rst3.AddNew
                        rst3.Fields(0) = rst.Fields(0)
                        rst3.Fields(1) = rst.Fields(2)
                        If IsNull(rst4.Fields(3)) Then
                            rst3.Fields(2) = (Int(52 / max / 2) + (k - 1) * rst.Fields(6)) * 7 + DateSerial(Year(Date), 1, 1)
                        Else
                            rst3.Fields(2) = (Int(52 / max / 2) + (k - 1) * rst.Fields(6)) * 7 + DateSerial(Year(Date), Month(rst4.Fields(3)), Day(rst4.Fields(3)))
                        End If
                        rst3.Update
                    Next k
     
                End If
     
            Next j
            tar.MoveNext
        Wend
    Seul le premier enregistrement de du recordset tar est pris en compte

    Je pense que le problème vient des lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    criter = "SELECT * FROM R_intervalle_analyse " & "WHERE R_intervalle_analyse.n°fourchette =  " & j & " And R_intervalle_analyse.n°arrete = " & tar.Fields(0) & ";"
                Set rst = CurrentDb.OpenRecordset(criter)
    mais je ne vois par comment résoudre...
    Sigue soñando

  2. #2
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Essaye de vérifier si ton recorset prend les bonnes valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For j = 1 To 10
    ...
    ...
    debug.print rst.Fields(2) & "  " & j
    Scuse me while I kiss the sky ! Jimi Hendrix

  3. #3
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    le problème ne vient pas de la boucle qui est effectué correctement, mais bien de tar qui ne change pas d'enregistrement...
    Sigue soñando

  4. #4
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Excuse j'avais pas tout vu.
    Un msgbox tar.recordcount donne quoi ?
    Scuse me while I kiss the sky ! Jimi Hendrix

  5. #5
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    ça donne bien le nombre d'enregistrement de la table
    Sigue soñando

  6. #6
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    je viens de me rendre compte que le problème ne vient finalement certainement pas de tar car dans la table associée, le résultat obtenue correspond au deuxième enregistrement.

    par contre, il s'agit du premier enregistrement de rst4
    Sigue soñando

  7. #7
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Autre remarque : lorsque je mets un après le , je devrais théoriquement avoir 2 msgbox successif (un pour chaque enregistrement de tar) or je n'en ai qu'un seul...
    Sigue soñando

  8. #8
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    j'ai inversé le While Not tar.EOF avec le For j = 1 to 10.

    on a donc le nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For j = 1 to 10
           While Not tar.EOF
    ...
           tar.MoveNext
           Wend
    Next j
    Dans cette configuration, les deux enregistrements de tar sont bien pris en compte, mais on ne passe pas au j suivant et le message suivant s'affiche :
    Variable objet ou variable de bloc With non définie
    Sigue soñando

  9. #9
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Par contre là, je vois pas comment résoudre...
    Sigue soñando

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Peux-tu expliquer en français ce que tu souhaites réaliser?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Bonjour !

    Voila ce que je souhaite faire :

    j'ai une requête R_intervalle_analyse (n°arrete, nom_analyse, n°fourchette, nb_analyse_annee1,nb_analyse_routine).

    je souhaite définir, pour chaque n°fourchette de chaque n°arrete, les dates d'analyses.
    Ces dates d'analyse sont calculées sur Max(nb_analyse_annee1) pour la table T_Tmp_annee1 et sur Max(nb_analyse_routine) pour la table T_Tmp_routine.

    Par exemple :
    n°arrete nom_analyse n°fourchette nb_analyse_annee1
    2170 valB 1 4
    2170 AsB 1 0
    2170 E-t 1 2
    2170 CO 1 1

    Dans ce cas je dois calculer 4 dates pour la fourchette 1 de l'arrete 2170 et les répartir correctement sur 1 an en prenant en compte, si elle existe, la date de la toute première analyse.

    Correspondance avec le code :
    j'ai au maximum 10 fourchettes =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For j = 1 To 10 ... Next j
    ma table T_arrete liste les n°arrete =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While Not tar.EOF ... tar.MoveNext Wend
    vérification de l'existence de la fourchette pour l'arrete =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsNull(rst.Fields(2) = j) Then ... End If
    vérification de l'existence de la date de la toute première analyse =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsNull(rst4.Fields(3)) Then ... End If
    répartition des dates si n'existe pas =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rst2.Fields(2) = (Int(52 / max / 2) + (k - 1) * Int(52 / max)) * 7 + DateSerial(Year(Date), 1, 1)
    répartition des dates si existe =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rst2.Fields(2) = (Int(52 / max / 2) + (k - 1) * Int(52 / max)) * 7 + DateSerial(Year(Date), Month(rst4.Fields(3)), Day(rst4.Fields(3)))
    Sigue soñando

  12. #12
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Bonjour,

    j'ai résolu le problème, donc pour ceux que ça intéresse, 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
    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
     
        tar.MoveFirst
        While Not tar.EOF
            j = 1
            For j = 1 To 10
     
                Dim criter As String
                criter = "SELECT * FROM R_intervalle_analyse " & "WHERE R_intervalle_analyse.n°fourchette =  " & j & " And R_intervalle_analyse.n°arrete = " & tar.Fields(0) & ";"
                Set rst = CurrentDb.OpenRecordset(criter)
     
                'rempli la table T_Tmp_annee1
                If rst.RecordCount <> 0 Then
                    max = DMax("R_intervalle_analyse.[nb_analyse_annee1]", "R_intervalle_analyse", "R_intervalle_analyse.[n°fourchette]=" & j & " And R_intervalle_analyse.[n°arrete] = " & tar.Fields(0))
                    If Not IsNull(max) Then
                        If max <> 0 Then
                        For k = 1 To max
                            rst2.AddNew
                            rst2.Fields(0) = rst.Fields(0)
                            rst2.Fields(1) = rst.Fields(2)
                            If IsNull(rst4.Fields(3)) Then
                                rst2.Fields(2) = (Int(52 / max / 2) + (k - 1) * Int(52 / max)) * 7 + DateSerial(Year(Date), 1, 1)
                            Else
                                rst2.Fields(2) = (Int(52 / max / 2) + (k - 1) * Int(52 / max)) * 7 + DateSerial(Year(Date), Month(rst4.Fields(3)), Day(rst4.Fields(3)))
                            End If
                            rst2.Fields(3) = k
                            rst2.Update
                        Next k
                        End If
                    End If
                End If
     
                'rempli la table T_Tmp_routine
                If rst.RecordCount <> 0 Then
                    max = DMax("R_intervalle_analyse.[nb_analyse_routine]", "R_intervalle_analyse", "R_intervalle_analyse.[n°fourchette]=" & j & " And R_intervalle_analyse.[n°arrete] = " & tar.Fields(0))
                    If Not IsNull(max) Then
                        If max <> 0 Then
                        For k = 1 To max
                            rst3.AddNew
                            rst3.Fields(0) = rst.Fields(0)
                            rst3.Fields(1) = rst.Fields(2)
                            If IsNull(rst4.Fields(3)) Then
                                rst3.Fields(2) = (Int(52 / max / 2) + (k - 1) * Int(52 / max)) * 7 + DateSerial(Year(Date), 1, 1)
                            Else
                                rst3.Fields(2) = (Int(52 / max / 2) + (k - 1) * Int(52 / max)) * 7 + DateSerial(Year(Date), Month(rst4.Fields(3)), Day(rst4.Fields(3)))
                            End If
                            rst3.Fields(3) = k
                            rst3.Update
                        Next k
                        End If
                    End If
                End If
     
            Next j
        tar.MoveNext
        Wend
    Sigue soñando

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/09/2008, 20h14
  2. Variable objet ou variable bloc with non définie
    Par tarbala dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/05/2008, 12h19
  3. Variable objet ou variable de bloc With non définie
    Par sl1980 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/08/2007, 19h15
  4. Variable objet ou variable d'un bloc With non définie.
    Par paradeofphp dans le forum ASP.NET
    Réponses: 2
    Dernier message: 21/05/2007, 20h41
  5. Réponses: 13
    Dernier message: 01/06/2006, 17h20

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