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

IHM Discussion :

Etat analyse croisée


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 29
    Points
    29
    Par défaut Etat analyse croisée
    Bonjour,

    tout d'abord BONNE ANNÉE 2008 à tous !

    j'essaie de réaliser un état sur base d'une requête analyse croisée via la procédure suivante : http://access.developpez.com/sources...RequeteCroisee

    J'applique tout à la lettre mais j'ai le message d'erreur suivant :

    L'espression Sur ouverture entrée comme paramètre de la propriété de type événement est à l'origine d'une erreur. type défini par l'utilisateur non défini.
    * Le résultat de l'expression n'est pas le nom d'une macro, le nom d'une fonction définie par l'utilisateur ou [Event Procedure].
    * Une erreur a peut-être été commise lors de l'évaluation d'une fonction, d'un évènement ou d'une macro.
    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
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
     
     
    Option Compare Database
     
    ' ***** déclaration des variables ***** '
    Const Nombre_colonnes = 7
    Dim dbBase As DAO.Database
    Dim rstEnregistrement As DAO.Recordset
    Dim NbColonnes As Integer
    Dim Total_colonnes(1 To Nombre_colonnes) As Long
    Dim Total_etat As Long
     
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
     
        Dim entX As Integer
     
        If Not Enregistrement.EOF Then
            If Me.FormatCount = 1 Then
                For entX = 1 To NbColonnes
                    Me("Detail" + Format(entX)) = Nz(Enregistrement(entX - 1), 0)
                Next entX
     
                For entX = NbColonnes + 2 To Nombre_colonnes
                    Me("Detail" + Format(entX)).Visible = False
                Next entX
     
                Enregistrement.MoveNext
            End If
        End If
     
    End Sub
     
    Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
     
        Dim entX As Integer
        Dim Nblignes As Long
     
        If Me.PrintCount = 1 Then
            Nblignes = 0
     
            For entX = 2 To NbColonnes
                Nblignes = Nblignes + Me("Detail" + Format(entX))
                Total_colonnes(entX) = Total_colonnes(entX) + Me("Detail" + Format(entX))
            Next entX
     
            Me("Detail" + Format(NbColonnes + 1)) = Nblignes
            Total_état = Total_état + Nblignes
        End If
     
    End Sub
    Private Sub Détail_Retreat()
     
        rstEnregistrement.MovePrevious
     
    End Sub
     
    Private Sub EntêteÉtat_Format(Annuler As Integer, FormatCount As Integer)
     
        rstEnregistrement.MoveFirst
        Initvar
     
    End Sub
    Private Sub EntêtePage_Format(Annuler As Integer, FormatCount As Integer)
    ' Pour la version 2002 : remplacer EntêtePage_Format par Zone EntêtePage_Format. A voir pour les autres versions
     
        Dim entX As Integer
     
        ' Met les entêtes de colonnes
        ' dans des zones de texte dans la section Entête.
        For entX = 1 To NbColonnes
            Me("Entete" + Format(entX)) = Enregistrement(entX - 1).Name
        Next entX
     
        ' Crée l'entête Totaux de la prochaine zone de liste disponible.
        Me("Entete" + Format(NbColonnes + 1)) = "Totaux"
     
        ' Cache les zones de texte inutilisées dans la section Entête.
        For entX = (NbColonnes + 2) To Nombre_colonnes
            Me("Entete" + Format(entX)).Visible = False
        Next entX
     
    End Sub
    Private Sub PiedÉtat_Format(Annuler As Integer, NBimpression As Integer)
     
        Dim entX As Integer
     
        ' Affecte la valeur Total_Colonne(entX) des champs en colonne au champs total
        For entX = 2 To NbColonnes
            Me("Total" + Format(entX)) = Total_colonnes(entX)
        Next entX
     
        ' Place TotalEtat dans une boite de texte dans le pied d'état.
        Me("Total" + Format(NbColonnes + 1)) = Total_état
     
        ' Cache les zones de texte inutilisées dans le pied d'état.
        For entX = (NbColonnes + 2) To Nombre_colonnes
            Me("Total" + Format(entX)).Visible = False
        Next entX
     
    End Sub
     
    Private Sub Report_Close()
     
        rstEnregistrement.Close
     
    End Sub
     
    Private Sub Report_NoData(Annuler As Integer)
     
        MsgBox "Aucun enregistrement n'a été trouvé.", vbExclamation, "Information"
        rstEnregistrement.Close
        Annuler = True
     
    End Sub
     
    Private Sub Report_Open(Annuler As Integer)
     
        Dim rstRequete As DAO.QueryDef
     
        Set dbBase = CurrentDb
        Set rstRequete = dbBase.QueryDefs("TCD_01Janvier_etat")
        Set rstEnregistrement = rstRequete.OpenRecordset()
     
        'Définit le nombre de colonnes de la requête
        NbColonnes = rstRequete.Fields.Count
     
    End Sub
     
    Private Sub Initvar()
     
        Dim entX As Integer
        Total_etat = 0
     
        For entX = 1 To NbColonnes
            Total_colonnes(entX) = 0
        Next entX
     
    End Sub
    Je ne vois pas où est l'erreur. Est-il possible de m'aider?

    Merci

    Nabouille

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    salut,
    euh, à tout hasard :
    - cancel à mettre à la place de Annuler dans la fonction open ?
    - passe ton code en mode pas à pas et dis nous où cela semble poser pb.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    j'ai remplacé le annuler par cancel, et j'ai le même message d'erreur.

    Il a l'air de bloquer sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim dbBase As DAO.Database
    Merci de votre aide

    Nabouille

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    salut,
    as-tu la réference DAO dans ton projet ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Salut,

    oui, effectivement, la référence DAO n'était pas cochée...

    merci, mon problème avance... mais il y a une nouvelle erreur '424' à la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Enregistrement.EOF Then
    dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Détail_Format(cancel As Integer, FormatCount As Integer)
    et une erreur '91' à la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Report_Close()
     
        rstEnregistrement.Close
    Je ne sais pas ce que je dois changer...

    Merci beaucoup pour votre aide,

    Nabouille

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    salut,
    petite chose qui pourra t'aider à débugger ton code :
    Option Explicit
    en début de module te permet de relever toutes les variables qui n'ont pas été déclarées.

    D'autre part, pour les erreurs relevées,
    de quel type est enregistrement ?
    " " rstenregistrement ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    bonjour,

    merci de ton aide, je suis pas très experte en VB. Je récupère les codes et essaie de les comprendre... mais il me manque parfois quelques bases...

    En effet, l'option explicit me dit que la variable "Enregistrement" n'est pas définie.

    J'ai copié le code tel quel du FAQ et je ne sais pas à quoi cela correspond. Dois-je remplacer ce mot par le nom d'une des colonnes de ma table ou autre chose?

    Pour essayer, j'ai remplacé "Enregistrement" par "rstEnregistrement". J'ai alors une nouvelle erreur dans :

    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
    Private Sub Détail_Format(cancel As Integer, FormatCount As Integer)
     
        Dim entX As Integer
     
        If Not rstEnregistrement.EOF Then
            If Me.FormatCount = 1 Then
                For entX = 1 To NbColonnes
                    Me("Detail" + Format(entX)) = Nz(rstEnregistrement(entX - 1), 0)
                Next entX
     
                For entX = NbColonnes + 2 To Nombre_colonnes
                    Me("Detail" + Format(entX)).Visible = False
                Next entX
     
                rstEnregistrement.MoveNext
            End If
        End If
     
    End Sub
    à la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Me("Detail" + Format(entX)) = Nz(rstEnregistrement(entX - 1), 0)
    L'erreur indique qu'il ne trouve pas le champ "Detail8" dont il est fait référence dans l'expression... ce qui est logique puisque j'ai construit mes textbox jusque Detail7 et j'ai précidé au début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const Nombre_colonnes = 7
    Merci de ton aide,

    Nabouille

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    il faut éviter de multiplier les noms de variables,
    ici tu as :
    - nbcolonnes qui va au delà de 7 apparemment.
    - nombre_colonnes qui est une constante.

    d'où mon conseil,
    - passe en revue les différentes variables que tu utilises
    - supprime celles qui ne servent pas
    - renomme celles qui doivent l'être

    - déroule ton code ligne par ligne pour voir si des erreurs sont relevées.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Re-bonjour,

    j'voudrais pas abuser de ton aide, mais là je sèche ... de nouveau. J'ai corrigé quelques "nb_colonnes" en "nombre_colonne" et cela fonctionne : Je n'ai plus de message d'erreur MAIS...

    J'ai bien toutes les lignes générées dans la partie "Détail"... mais je n'ai rien dans l'entete (donc pas de titre de colonne) ni dans le pied de page (donc pas de totaux)...

    Je me casse la tête la dessus depuis ce matin... je ne vois plus quoi faire d'autres...

    Voici la dernière version de mon 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
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    Option Compare Database
    Option Explicit
     
     
    ' ***** déclaration des variables ***** '
    Const Nombre_colonnes = 7
    Dim dbBase As DAO.Database
    Dim rstEnregistrement As DAO.Recordset
    Dim NbColonnes As Integer
    Dim Total_colonnes(1 To Nombre_colonnes) As Long
    Dim Total_etat As Long
     
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
     
        Dim entX As Integer
     
        If Not rstEnregistrement.EOF Then
            If Me.FormatCount = 1 Then
                For entX = 1 To Nombre_colonnes
                    Me("Detail" + Format(entX)) = Nz(rstEnregistrement(entX - 1), 0)
                Next entX
     
                For entX = NbColonnes + 2 To Nombre_colonnes
                    Me("Detail" + Format(entX)).Visible = False
                Next entX
     
                rstEnregistrement.MoveNext
            End If
        End If
     
    End Sub
     
    Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
     
        Dim entX As Integer
        Dim Nblignes As Long
     
        If Me.PrintCount = 1 Then
            Nblignes = 0
     
            For entX = 2 To Nombre_colonnes
                Nblignes = Nblignes + Me("Detail" + Format(entX))
                Total_colonnes(entX) = Total_colonnes(entX) + Me("Detail" + Format(entX))
            Next entX
     
            Me("Detail" + Format(Nombre_colonnes + 1)) = Nblignes
            Total_etat = Total_etat + Nblignes
        End If
     
    End Sub
    Private Sub Détail_Retreat()
     
        rstEnregistrement.MovePrevious
     
    End Sub
     
    Private Sub EntêteÉtat_Format(Annuler As Integer, FormatCount As Integer)
     
        rstEnregistrement.MoveFirst
        Initvar
     
    End Sub
     
    Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
     
    ' Pour la version 2002 : remplacer EntêtePage_Format par Zone EntêtePage_Format. A voir pour les autres versions
     
        Dim entX As Integer
     
        ' Met les entêtes de colonnes
        ' dans des zones de texte dans la section Entête.
        For entX = 1 To NbColonnes
            Me("Entete" + Format(entX)) = rstEnregistrement(entX - 1).Name
        Next entX
     
        ' Crée l'entête Totaux de la prochaine zone de liste disponible.
        Me("Entete" + Format(NbColonnes + 1)) = "Totaux"
     
        ' Cache les zones de texte inutilisées dans la section Entête.
        For entX = (NbColonnes + 2) To Nombre_colonnes
            Me("Entete" + Format(entX)).Visible = False
        Next entX
     
     
    End Sub
    Private Sub ZonePiedPage_Format(Cancel As Integer, FormatCount As Integer)
     
        Dim entX As Integer
     
        ' Affecte la valeur Total_Colonne(entX) des champs en colonne au champs total
        For entX = 2 To NbColonnes
            Me("Total" + Format(entX)) = Total_colonnes(entX)
        Next entX
     
        ' Place TotalEtat dans une boite de texte dans le pied d'état.
        Me("Total" + Format(NbColonnes + 1)) = Total_etat
     
        ' Cache les zones de texte inutilisées dans le pied d'état.
        For entX = (NbColonnes + 2) To Nombre_colonnes
            Me("Total" + Format(entX)).Visible = False
        Next entX
     
    End Sub
     
    Private Sub Report_Close()
     
        rstEnregistrement.Close
     
    End Sub
     
    Private Sub Report_NoData(Annuler As Integer)
     
        MsgBox "Aucun enregistrement n'a été trouvé.", vbExclamation, "Information"
        rstEnregistrement.Close
        Annuler = True
     
    End Sub
     
    Private Sub Report_Open(Cancel As Integer)
     
        Dim rstRequete As DAO.QueryDef
     
        Set dbBase = CurrentDb
        Set rstRequete = dbBase.QueryDefs("01_Janvier")
        Set rstEnregistrement = rstRequete.OpenRecordset()
     
        'Définit le nombre de colonnes de la requête
        NbColonnes = rstRequete.Fields.Count
     
    End Sub
     
    Private Sub Initvar()
     
        Dim entX As Integer
        Total_etat = 0
     
        For entX = 1 To NbColonnes
            Total_colonnes(entX) = 0
        Next entX
     
    End Sub
    Merci pour ton aide,
    Nabouille

  10. #10
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,

    J'ai pas eu le temps de corriger les quelques erreurs sur cette source.
    En attendant, voici le code qui fonctionne (je m'en sers presque tous les jours )

    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    Const Nombre_colonnes = 12
    Dim Base As Database
    Dim Enregistrement As Recordset
    Dim NbColonnes As Integer
    Dim Total_colonnes(1 To Nombre_colonnes) As Long
    Dim Total_état As Long
     
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
     
        Dim entX As Integer
     
        If Not Enregistrement.EOF Then
            If Me.FormatCount = 1 Then
                For entX = 1 To NbColonnes
                    Me("Nombre" + Format(entX)) = Nz(Enregistrement(entX - 1), 0)
                Next entX
     
                For entX = NbColonnes + 2 To Nombre_colonnes
                    Me("Nombre" + Format(entX)).Visible = False
                Next entX
     
                Enregistrement.MoveNext
            End If
        End If
     
    End Sub
     
    Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
     
        Dim entX As Integer
        Dim Nblignes As Long
     
        If Me.PrintCount = 1 Then
            Nblignes = 0
     
            For entX = 2 To NbColonnes
                Nblignes = Nblignes + Me("Nombre" + Format(entX))
                Total_colonnes(entX) = Total_colonnes(entX) + Me("Nombre" + Format(entX))
            Next entX
     
            Me("Nombre" + Format(NbColonnes + 1)) = Nblignes
            Total_état = Total_état + Nblignes
        End If
     
    End Sub
     
    Private Sub Détail_Retreat()
     
        Enregistrement.MovePrevious
     
    End Sub
     
    Private Sub EntêteÉtat_Format(Annuler As Integer, FormatCount As Integer)
     
        Enregistrement.MoveFirst
        Initvar
     
    End Sub
     
    Private Sub EntêtePage_Format(Annuler As Integer, FormatCount As Integer)
     
        Dim entX As Integer
     
        ' Met les entêtes de colonnes
        ' dans des zones de texte dans la section Entête.
        For entX = 1 To NbColonnes
            Me("Entête" + Format(entX)) = Enregistrement(entX - 1).Name
        Next entX
     
        ' Crée l'entête Totaux de la prochaine zone de liste disponible.
        Me("Entête" + Format(NbColonnes + 1)) = "Totaux"
     
        ' Cache les zones de texte inutilisées dans la section Entête.
        For entX = (NbColonnes + 2) To Nombre_colonnes
            Me("Entête" + Format(entX)).Visible = False
        Next entX
     
    End Sub
     
    Private Sub PiedÉtat_Format(Annuler As Integer, NBimpression As Integer)
     
        Dim entX As Integer
     
        For entX = 2 To NbColonnes
            Me("Total" + Format(entX)) = Total_colonnes(entX)
        Next entX
     
        ' Place TotalEtat dans une boite de texte dans le pied d'état.
        Me("Total" + Format(NbColonnes + 1)) = Total_état
     
        ' Cache les zones de texte inutilisées dans le pied d'état.
        For entX = (NbColonnes + 2) To Nombre_colonnes
            Me("Total" + Format(entX)).Visible = False
        Next entX
     
    End Sub
     
    Private Sub Report_Close()
     
        Enregistrement.Close
     
    End Sub
     
    Private Sub Report_NoData(Annuler As Integer)
     
        MsgBox "Aucun enregistrement n'a été trouvé.", vbExclamation
        Enregistrement.Close
        Annuler = True
     
    End Sub
     
    Private Sub Report_Open(Annuler As Integer)
     
        Dim Requête As QueryDef
     
        Set Base = CurrentDb
        Set Requête = Base.QueryDefs("rRecapESAgrees")
        Set Enregistrement = Requête.OpenRecordset()
     
        'Définit le nombre de colonnes de la requête
        NbColonnes = Requête.Fields.Count
     
    End Sub
     
    Private Sub Initvar()
     
        Dim entX As Integer
        Total_état = 0
     
        For entX = 1 To NbColonnes
            Total_colonnes(entX) = 0
        Next entX
     
    End Sub
     
    Private Function xtabCnulls(varX As Variant)
     
        If IsNull(varX) Then
            xtabCnulls = 0
            Else
            xtabCnulls = varX
        End If
     
    End Function

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Merci pour le code corrigé...

    Mais... cela ne marche pas, j'ai encore un autre message d'erreur cette fois:

    Erreur 9 (L'indice n'appartient pas à la sélection) à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Total_colonnes(entX) = 0
    dans Initvar

    Merci de m'aider...

    Nabouille

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Ok, j'ai trouvé : ma requete test comptait plus de colonnes que prévu ...

    Merci à tous, tout fonctionne enfin à présent

    Bonne soirée

  13. #13
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    salut, il me semble que la boucle des indices va de 0 à nb d'éléments-1,
    ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For entX = 1 To NbColonnes
    deviendrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For entX = 0 To NbColonnes-1
    non ?
    avec l'option

  14. #14
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Non.

    Car entX sert à atteindre les différents contrôles de l'état.

    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                Nblignes = Nblignes + Me("Nombre" + Format(entX))
                Total_colonnes(entX) = Total_colonnes(entX) + Me("Nombre" + Format(entX))

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Re bonjour,

    après encodage de quelques données, je me rends compte que j'ai un problème avec le code que Lou Pitchoun m'as transmis ci-dessus :

    les totaux ne sont pas corrects (en ligne et en colonne) de manière aléatoire... je ne comprends pas le problème...

    Voici ci-joint le résultat que j'obtiens...

    Merci de m'aider... je ne trouve pas le problème.

    Nabouille
    Images attachées Images attachées  

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 29
    Points
    29
    Par défaut Etat analyse croisée (bis)
    Re bonjour,

    Suite à la discussion que j'ai eu la semaine passée concernat un tableau croisée dynamique dans un état : http://www.developpez.net/forums/sho...d.php?t=468928, j'ai quelques petites soucis :

    Après encodage de quelques données, je me rends compte que j'ai un problème avec le code que Lou Pitchoun m'as transmis:

    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    Option Compare Database
    Option Explicit
     
    Const Nombre_colonnes = 32
    Dim Base As DAO.Database
    Dim Enregistrement As DAO.Recordset
    Dim NbColonnes As Integer
    Dim Total_colonnes(1 To Nombre_colonnes) As Long
    Dim Total_état As Long
     
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
     
        Dim entX As Integer
     
        If Not Enregistrement.EOF Then
            If Me.FormatCount = 1 Then
                For entX = 1 To NbColonnes
                    Me("Detail" + Format(entX)) = Nz(Enregistrement(entX - 1), 0)
                Next entX
     
                For entX = NbColonnes + 2 To Nombre_colonnes
                    Me("Detail" + Format(entX)).Visible = False
                Next entX
     
                Enregistrement.MoveNext
            End If
        End If
     
    End Sub
     
    Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
     
        Dim entX As Integer
        Dim Nblignes As Long
     
        If Me.PrintCount = 1 Then
            Nblignes = 0
     
            For entX = 2 To NbColonnes
                Nblignes = Nblignes + Me("Detail" + Format(entX))
                Total_colonnes(entX) = Total_colonnes(entX) + Me("Detail" + Format(entX))
            Next entX
     
            Me("Detail" + Format(NbColonnes + 1)) = Nblignes
            Total_état = Total_état + Nblignes
        End If
     
    End Sub
     
    Private Sub Détail_Retreat()
     
        Enregistrement.MovePrevious
     
    End Sub
     
    Private Sub EntêteÉtat_Format(Annuler As Integer, FormatCount As Integer)
     
        Enregistrement.MoveFirst
        Initvar
     
    End Sub
     
    Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
     
        Dim entX As Integer
     
        ' Met les entêtes de colonnes
        ' dans des zones de texte dans la section Entête.
        For entX = 1 To NbColonnes
            Me("Entete" + Format(entX)) = Enregistrement(entX - 1).Name
        Next entX
     
        ' Crée l'entête Totaux de la prochaine zone de liste disponible.
        Me("Entete" + Format(NbColonnes + 1)) = "Totaux"
     
        ' Cache les zones de texte inutilisées dans la section Entête.
        For entX = (NbColonnes + 2) To Nombre_colonnes
            Me("Entete" + Format(entX)).Visible = False
        Next entX
     
    End Sub
     
    Private Sub PiedÉtat_Format(Annuler As Integer, NBimpression As Integer)
     
        Dim entX As Integer
     
        For entX = 2 To NbColonnes
            Me("Total" + Format(entX)) = Total_colonnes(entX)
        Next entX
     
        ' Place TotalEtat dans une boite de texte dans le pied d'état.
        Me("Total" + Format(NbColonnes + 1)) = Total_état
     
        ' Cache les zones de texte inutilisées dans le pied d'état.
        For entX = (NbColonnes + 2) To Nombre_colonnes
            Me("Total" + Format(entX)).Visible = False
        Next entX
     
    End Sub
     
    Private Sub Report_Close()
     
        Enregistrement.Close
     
    End Sub
     
    Private Sub Report_NoData(Annuler As Integer)
     
        MsgBox "Aucun enregistrement n'a été trouvé.", vbExclamation
        Enregistrement.Close
        Annuler = True
     
    End Sub
     
    Private Sub Report_Open(Annuler As Integer)
     
        Dim Requete As QueryDef
     
        Set Base = CurrentDb
        Set Requete = Base.QueryDefs("01_Janvier")
        Set Enregistrement = Requete.OpenRecordset()
     
        'Définit le nombre de colonnes de la requête
        NbColonnes = Requete.Fields.Count
     
    End Sub
     
    Private Sub Initvar()
     
        Dim entX As Integer
        Total_état = 0
     
        For entX = 1 To NbColonnes
            Total_colonnes(entX) = 0
        Next entX
     
    End Sub
     
    Private Function xtabCnulls(varX As Variant)
     
        If IsNull(varX) Then
            xtabCnulls = 0
            Else
            xtabCnulls = varX
        End If
     
    End Function
    Chaque fois que j'ai des chiffres avec décimales, les totaux ne sont pas corrects (en ligne et en colonne) de manière aléatoire... parfois, il sont trop grand, parfois trop petits... sans aucune logique... je ne comprends pas le problème...

    Voici ci-joint le résultat que j'obtiens... Je devrais avoir 8 pour chaque colonne et les totaux des lignes ne sont pas toujours justes non plus !

    Merci de m'aider... je ne trouve pas le problème.

    Nabouille
    Images attachées Images attachées  

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    je crois que c'est une question de décimale, parcque lorsque je n'encode des des nombres entiers, les totaux sont justes...

    Mais avec les décimales :

    2+1+1+1.5+0.5+0.5+0.5+0.5+0.5 donne bien 8
    par contre
    1+1+1+1+2+0.5+0.5+0.5+0.5 fait 7 au lieu de 8
    4+1+1.5+0.5+0.5+0.5 donne 6 au lieu de 8

    Pour les totaux des lignes:
    0.5+0.5+0.5 donne 0 au lieu de 1.5
    1+0.5 donne 1 au lieu de 1.5
    1+1+1+1.5+0.5 donne 6 au lieu de 5
    etc

    Parfois c'est plus grand, parfois plus petit parfois beaucoup plus petit !!

    c'est très bizarre... A quoi cela serait dû? Que faire pour arranger cela?

    Nabouille

  18. #18
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Content que tu en sois arrivé(e ??) à cette conclusion.

    Il ne te reste plus qu'à vérifier les formats.

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    oui, j'y ai déjà pensé.

    J'ai adapté les formats pour avoir 2 décimales dans les totaux, mais cela ne change rien, j'ai .00 partout.

    En plus c'est pas tout à fait une erreur d'arrondi... parfois j'ai 6 au lieu de 8 qd même !! C'est pas très logique...

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    si quelqu'un voit une solution, ça serait super... pcq franchement rien ne fonctionne!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/01/2008, 17h04
  2. Etat à partir requête analyse croisée
    Par Daniel MOREAU dans le forum IHM
    Réponses: 4
    Dernier message: 28/11/2006, 18h19
  3. [Etat] Requete d'analyse croisée
    Par Boolean69 dans le forum IHM
    Réponses: 1
    Dernier message: 25/08/2006, 19h05
  4. Etat basé sur une Requete Analyse Croisée
    Par Bercud dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/06/2006, 16h03
  5. Etat issu d'une requête d'analyse croisée
    Par loutsky dans le forum Access
    Réponses: 3
    Dernier message: 18/03/2006, 16h19

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