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 :

Effectuer des calculs dans un ordre précis


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Effectuer des calculs dans un ordre précis
    Bonjour,

    Avec un ami (qui à mon grand regret est en vacances en ce moment et qui ne peut donc pas m’aider à résoudre mes problèmes) nous développons une base Access permettant d'être exportée sur Excel.

    Dans un formulaire appelé formulaire_lignes_compte_resultat on spécifie les lignes dans lequel les données devront être sommées.

    Dans un formulaire appelé formulaire_repartition_rubrique_compte_resultat, on indique les spécificités des écritures qui entrent dans ces lignes.
    Or, il arrive parfois que des écritures soient presque semblables :

    Charges de personnel C => les écritures ayant les caractéristiques suivantes :
    Met : C
    Rub : CBB et CBD

    Charges de personnel immobilisées C => les écritures ayant les caractéristiques suivantes :
    Met : C
    Rub : CBB et CBD
    Cpt : 721000

    De ce fait, nous avons rajouté le champ "Priorité ligne CR". Ainsi,
    Charges de personnel C => Priorité ligne CR : 5
    Charges de personnel immobilisées C => Priorité ligne CR : 3

    Dans notre code VBA il faudrait donc indiquer qu'il faut faire les calculs en prenant les priorités dans l'ordre croissant.
    Or, actuellement, j'ai l'impression que les priorités n'ont pas été codés dans le code VBA car, il y a des doublons.

    Merci de m'indiquer comment je peux faire.
    C'est relativement urgent.
    Je vous remercie vivement.

    Ps : la base (simplifiée, j'ai supprimé quelques tables, formulaires et les états) est accessible ici :
    (me demander le chemin d'accès)

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    J'ai comme l'impression que mon problème est compliqué non ?

    Je me prends la tete et je m'en sors pas.
    A l'aide je coule !!!

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Effectivement, tout ça n'est pas simple !

    Alors j'ai regardé rapidement ce que nous as donné et il me semble que le problème de doublon ne vient pas de la gestion de la priorité (elle est codée dans le VBA).

    Questions:
    * Pourrais-tu préciser la nature du problème de doublon ?
    * Une écriture (de la table Donnees) doit-elle être "imputée" dans 1 et 1 seule écriture analytique ?

    Le Pb pourrait venir de cette procédure qui gère de façon confuse l'accès aux données (requêtes SQL exécutée à la fois dans une transaction DAO et via l'Application Access):
    Code vba : 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
    Sub remplir_table_ecritures_analytiques()
        Dim db As Database
        Dim WrkSpc As Workspace
        Dim recs As Recordset
        Dim vUO, vMet, vRub, vProj, vRes, vSegop, vLb, vRve As String
        Dim vCpt, cSte As Integer
        Dim id, vID As Variant
        Dim where, SQL As String
        Dim tble As String
        Dim i As Integer
        i = 0
     
        tble = "Donnees"
     
        Set db = CurrentDb()
        Set WrkSpc = DBEngine.Workspaces(0)
        WrkSpc.BeginTrans
        Set recs = db.OpenRecordset(tble, dbOpenSnapshot, dbForwardOnly)
        Do While Not recs.EOF
            i = 0
            Do While Not recs.EOF And (i < 10000)
                i = i + 1
                vID = recs.Fields("ID_ecriture")
                If IsNull(vID) Then
                    vUO = recs.Fields("UO")
                    vMet = recs.Fields("Met")
                    vRub = recs.Fields("Rub")
                    vCpt = recs.Fields("Cpt")
                    vProj = recs.Fields("Proj")
                    vRes = recs.Fields("Res")
                    vSegop = recs.Fields("Segop")
                    vLb = recs.Fields("Lb")
                    vRve = recs.Fields("Rve")
                    vSte = recs.Fields("Ste")
                    If Not IsNull(vCpt) Then
                        where = "UO = '" & vUO & "' AND Met = '" & vMet & "' AND Rub = '" & vRub & "' AND Cpt = " & vCpt & " AND Proj = '" & vProj & "' AND Res = '" & vRes & "' AND Segop = '" & vSegop & "' AND Lb = '" & vLb & "' AND Rve = '" & vRve & "' AND Ste = " & vSte
                        id = DLookup("[ID_ecriture]", "[table_ecritures_analytiques]", where)
                        If IsNull(id) Then
                            SQL = "INSERT INTO table_ecritures_analytiques (UO, Met, Rub, Cpt, Proj, Res, Segop, Lb, Rve, Ste) VALUES ('" & vUO & "', '" & vMet & "', '" & vRub & "', '" & vCpt & "', '" & vProj & "', '" & vRes & "', '" & vSegop & "', '" & vLb & "', '" & vRve & "', '" & vSte & "')"
                            DoCmd.SetWarnings False
                            DoCmd.RunSQL SQL
                            DoCmd.SetWarnings True
                            id = DLookup("[ID_ecriture]", "[table_ecritures_analytiques]", where)
                        End If
                        SQL = "UPDATE " & tble & " SET ID_ecriture = '" & id & "' WHERE " & where
                        DoCmd.SetWarnings False
                        db.Execute SQL
                        DoCmd.SetWarnings True
                    End If
                End If
                recs.MoveNext
            Loop
            WrkSpc.CommitTrans
            If i = 10000 Then
                WrkSpc.BeginTrans
            End If
        Loop
    End Sub

    J'attends plus d'informations, merci.
    _

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par =JBO= Voir le message
    Bonjour,

    Effectivement, tout ça n'est pas simple !

    Alors j'ai regardé rapidement ce que nous as donné et il me semble que le problème de doublon ne vient pas de la gestion de la priorité (elle est codée dans le VBA).

    Questions:
    * Pourrais-tu préciser la nature du problème de doublon ?
    * Une écriture (de la table Donnees) doit-elle être "imputée" dans 1 et 1 seule écriture analytique ?

    Le Pb pourrait venir de cette procédure qui gère de façon confuse l'accès aux données (requêtes SQL exécutée à la fois dans une transaction DAO et via l'Application Access):
    Code vba : 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
    Sub remplir_table_ecritures_analytiques()
        Dim db As Database
        Dim WrkSpc As Workspace
        Dim recs As Recordset
        Dim vUO, vMet, vRub, vProj, vRes, vSegop, vLb, vRve As String
        Dim vCpt, cSte As Integer
        Dim id, vID As Variant
        Dim where, SQL As String
        Dim tble As String
        Dim i As Integer
        i = 0
     
        tble = "Donnees"
     
        Set db = CurrentDb()
        Set WrkSpc = DBEngine.Workspaces(0)
        WrkSpc.BeginTrans
        Set recs = db.OpenRecordset(tble, dbOpenSnapshot, dbForwardOnly)
        Do While Not recs.EOF
            i = 0
            Do While Not recs.EOF And (i < 10000)
                i = i + 1
                vID = recs.Fields("ID_ecriture")
                If IsNull(vID) Then
                    vUO = recs.Fields("UO")
                    vMet = recs.Fields("Met")
                    vRub = recs.Fields("Rub")
                    vCpt = recs.Fields("Cpt")
                    vProj = recs.Fields("Proj")
                    vRes = recs.Fields("Res")
                    vSegop = recs.Fields("Segop")
                    vLb = recs.Fields("Lb")
                    vRve = recs.Fields("Rve")
                    vSte = recs.Fields("Ste")
                    If Not IsNull(vCpt) Then
                        where = "UO = '" & vUO & "' AND Met = '" & vMet & "' AND Rub = '" & vRub & "' AND Cpt = " & vCpt & " AND Proj = '" & vProj & "' AND Res = '" & vRes & "' AND Segop = '" & vSegop & "' AND Lb = '" & vLb & "' AND Rve = '" & vRve & "' AND Ste = " & vSte
                        id = DLookup("[ID_ecriture]", "[table_ecritures_analytiques]", where)
                        If IsNull(id) Then
                            SQL = "INSERT INTO table_ecritures_analytiques (UO, Met, Rub, Cpt, Proj, Res, Segop, Lb, Rve, Ste) VALUES ('" & vUO & "', '" & vMet & "', '" & vRub & "', '" & vCpt & "', '" & vProj & "', '" & vRes & "', '" & vSegop & "', '" & vLb & "', '" & vRve & "', '" & vSte & "')"
                            DoCmd.SetWarnings False
                            DoCmd.RunSQL SQL
                            DoCmd.SetWarnings True
                            id = DLookup("[ID_ecriture]", "[table_ecritures_analytiques]", where)
                        End If
                        SQL = "UPDATE " & tble & " SET ID_ecriture = '" & id & "' WHERE " & where
                        DoCmd.SetWarnings False
                        db.Execute SQL
                        DoCmd.SetWarnings True
                    End If
                End If
                recs.MoveNext
            Loop
            WrkSpc.CommitTrans
            If i = 10000 Then
                WrkSpc.BeginTrans
            End If
        Loop
    End Sub

    J'attends plus d'informations, merci.
    _
    Tout d'abord, je vous remercie d'avoir pris le temps de me répondre.

    Je vais donc essayer de répondre à vos questions.

    La nature du problème :
    Par exemple dans la ligne charges de personnel C, j'ai un total de 380695 540.4 alors que je devrai avoir un total de 289 823 000 (environ).

    De la même façon, pour la ligne nationales, je dois avoir 8 628 583 000 et j'ai 8 753 897 274.88 (ce qui correspond à 8 628 583 000 + 125 313 934 qui devrait être normalement affecté à la ligne export).
    Le montant 125 313 934 apparait à 2 endroits : dans la ligne nationale et dans la ligne export.

    Pourtant, j'ai renseigné les priorités de façon à traiter cela :

    La ligne export est composée par les lignes ayant les rub AAA-AAB-AAC-AAD et le res EC.
    J'ai mis la priorité 3.

    La ligne nationale est composée par la ligne ayant la rub AAA.
    J'ai mis la priorité 5.

    Donc ce qui est déjà affecté à la priorité 3 ne doit pas être pris en compte à la priorité 5.
    Effectivement, un enregistrement de la table donnees ne doit être imputée que dans une et une seule ligne.

    Je ne sais pas si cela est beaucoup plus clair.
    J'ai la pression. J'en dors plus et ma responsable me demande de lui produire quelque chose de juste...

    Je pense que j'ai le même problème pour un autre formulaire qui n'apparait pas dans la base simplifiée que j'ai communiqué ici.
    La base entière est disponible ici :
    (me demander le chemin d'accès)

    Je pense que ça pose le même problème lorsque l'on clique sur le bouton calculer les répartitions dans le formulaire_repartition.


    Merci vraiment.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    (on peut se tutoyer, si tu veux)

    Je ne suis pas sûr d'avoir identifié l'endroit où se produit l'erreur.

    Peux-tu m'indiquer quelle est l'action du "Switchboard" (formulaire de Menu) que tu exécutes pour "obtenir" le résultat ?

    S'agit-il de [Compte de résultat>>Calcul] ?
    _

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par =JBO= Voir le message
    (on peut se tutoyer, si tu veux)

    Je ne suis pas sûr d'avoir identifié l'endroit où se produit l'erreur.

    Peux-tu m'indiquer quelle est l'action du "Switchboard" (formulaire de Menu) que tu exécutes pour "otenir" le résultat ?

    S'agit-il de [Compte de résultat>>Calcul] ?
    _
    Je devrai peut etre commencer par le début. Le but de la base est de remplir un fichier excel sous forme compte de résultat par vecteurs.
    Le fichier se trouve ici :
    (me demander le chemin d'accès)

    Je vais essayer de résumer (je n'ai pas la base sous les yeux car je suis au travail et nous n'avons qu'un poste informatique. On a pas internet sur nos postes!!! trop bien )

    Tout d'abord, j'efface la table donnees, j'importe les données récupérées sur une autre application, j'effectue les modifcations.
    Configuration/Effacer les écritures analytiques.
    Configuration/Modifications des réseaux en amont.

    Du fait d'un beug que je ne pas résoudre sans mon ami, je fais une manip qu'il ne faudra plus faire par la suite : j'exporte la table donnees modifiées et je la réimporte dans la table_ecritures_analytiques.

    Tout ce qui concerne le formulaire des rubriques est renseigné qu'une seule fois normalement. Mais je pense qu'il y a un problème à résoudre pour le moment.
    Configuration/lignes du compte de résultat (permet de saisir les lignes dans lequel les lignes vont être impactées).
    Configuration/Composition des lignes du compte de résultat (permet de renseigner les caractéristiques des écritures qui doivent être impactées dans les lignes saisies dans configuration/lignes du compte de résultat).
    Je pense qu'ici aussi il y a un problème car je ne retombe pas sur les bons montant.

    Après, à l'aide de règle de répartition, je spécifie des règles plus poussée.
    En gros je dis que pour tel UO, tel Met, ... je dois répartir ça dans telle colonne du fichier excel selon tel pourcentage.
    Pour cela je clique sur le bouton, calculer les répartition.

    Puis dans le menu général/compte de résultat/Calcul
    Puis après menu/général/export Excel.

    Est ce clair ?

    J'en peux plus.
    Je veux que mon ami rentre à l'aide lol

Discussions similaires

  1. Effectuer des calculs dans un cube.
    Par baccarios dans le forum SSAS
    Réponses: 2
    Dernier message: 27/04/2010, 10h35
  2. Extraire des champs dans un ordre précis
    Par karimDevelopper dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 02/06/2009, 14h19
  3. Réponses: 1
    Dernier message: 01/12/2007, 15h18
  4. Réponses: 7
    Dernier message: 07/03/2007, 14h14
  5. Effectuer des calculs dans des zones de texte
    Par flagfight dans le forum IHM
    Réponses: 3
    Dernier message: 07/07/2006, 16h01

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