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 :

Mediane Access - Erreur 3071 Formule trop complexe pour être évaluée [Toutes versions]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2015
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Mediane Access - Erreur 3071 Formule trop complexe pour être évaluée
    Bonjour à tous,

    Je me tourne vers vous qui posséderez peut être la solution à cette énigme.

    Je suis en train de créer une base de données exploitant des données chiffrées.

    Je tente en vain de calculer la médiane d'une valeur (le TTF) à partir d'une table déterminée (Filled Unrestricted TTF values).

    Mes données se présentent sous cet aspect:
    - Personne 1 - Pays 1 - Durée 1
    - Personne 2 - Pays 2 - Durée 2
    - Personne 3 - Pays 1 - Durée 3
    - Personne 1 - Pays 1 - Durée 4...

    Je cherche à savoir la médiane du TTF (qui est un nombre, durée dans l'exemple) et que je puisse au gré des filtres avoir le résultat par pays, ou par personne.

    J'ai trouvé ceci sur les forums:

    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
    Public Function DMedian( _
     ByVal strField As String, ByVal strdomain As String, _
     Optional ByVal strcriteria As String) As Variant
     
        ' Purpose:
        '     To calculate the median value
        '     for a field in a table or query.
        ' In:
        '     strField: the field.
        '     strDomain: the table or query.
        '     strCriteria: an optional WHERE clause to
        '                  apply to the table or query.
        ' Out:
        '     Return value: the median, if successful;
        '                   Otherwise, an Error value.
     
        Dim db As DAO.Database
        Dim rstDomain As DAO.Recordset
        Dim strsql As String
        Dim varmedian As Variant
        Dim intFieldType As Integer
        Dim intRecords As Integer
     
        Const errAppTypeError = 3169
     
        On Error GoTo HandleErr
     
        Set db = CurrentDb()
     
        ' Initialize return value.
        varmedian = Null
     
        ' Build SQL string for recordset.
        strsql = "SELECT " & strField & " FROM " & strdomain
     
        ' Only use a WHERE clause if one is passed in.
        If Len(strcriteria) > 0 Then
            strsql = strsql & " WHERE " & strcriteria
        End If
     
        strsql = strsql & " ORDER BY " & strField
     
        Set rstDomain = db.OpenRecordset(strsql, dbOpenSnapshot)
     
        ' Check the data type of the median field.
        intFieldType = rstDomain.Fields(strField).Type
        Select Case intFieldType
        Case dbByte, dbInteger, dbLong, _
          dbCurrency, dbSingle, dbDouble, dbDate
            ' Numeric field.
            If Not rstDomain.EOF Then
                rstDomain.MoveLast
                intRecords = rstDomain.RecordCount
                ' Start from the first record.
                rstDomain.MoveFirst
     
                If (intRecords Mod 2) = 0 Then
                    ' Even number of records.
                    ' No middle record, so move to the
                    ' record right before the middle.
                    rstDomain.Move ((intRecords \ 2) - 1)
                    varmedian = rstDomain.Fields(strField)
                    ' Now move to the next record, the
                    ' one right after the middle.
                    rstDomain.MoveNext
                    ' And average the two values.
                    varmedian = _
                      (varmedian + rstDomain.Fields(strField)) / 2
                    ' Make sure you return a date, even when
                    ' averaging two dates.
                    If intFieldType = dbDate And Not IsNull(varmedian) Then
                        varmedian = CDate(varmedian)
                    End If
                Else
                    ' Odd number or records.
                    ' Move to the middle record and return its value.
                    rstDomain.Move ((intRecords \ 2))
                    varmedian = rstDomain.Fields(strField)
                End If
            Else
                ' No records; return Null.
                varmedian = Null
            End If
        Case Else
            ' Non-numeric field; so raise an app error.
            Err.Raise errAppTypeError
        End Select
     
        DMedian = varmedian
     
    ExitHere:
        On Error Resume Next
        rstDomain.Close
        Set rstDomain = Nothing
        Exit Function
     
    HandleErr:
        ' Return an error value.
        DMedian = CVErr(Err.Number)
        Resume ExitHere
    End Function

    Malheureusement, en voulant tester la formule de cette façon DMedian ("TTF"; "Filled Unrestricted TTF values") ou DMedian ('TTF'; 'Filled Unrestricted TTF values'), j'obtiens l'erreur 3071,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "This expression is typed incorrectly, or it is too complex to be evaluated. For example, a numeric expression may contain too many complicated elements. Try simplifying the expression by assigning parts of the expression to variables. (Error 3071)"
    Vous avez une idée de comment je peux procéder?

    En vous remerciant de votre aide.

    Bien à vous,

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    strDomain comprend des espaces, il faut donc des crochets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strsql = "SELECT [" & strField & "] FROM [" & strdomain & "]"
    peut-être ailleurs aussi

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2015
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Bonjour Hélas,

    Merci beaucoup pour votre aide. J'ai essayé de mettre les crochets dans la formule: DMedian ("[TTF]"; "[Filled Unrestricted TTF values]") pour que l'utilisation se généralise dans le code mais malheureusement cette manipulation reste vaine.

    Avez-vous une autre idée?

    En vous remerciant,

    Bien à vous,

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    L'appel de DMedian est à quel endroit (requête, formulaire, état) ?
    Si tu mets un point d'arrêt dans le code de Dmedian, ça plante où ?

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2015
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par loufab Voir le message
    Bonjour,

    L'appel de DMedian est à quel endroit (requête, formulaire, état) ?
    Si tu mets un point d'arrêt dans le code de Dmedian, ça plante où ?

    Cordialement,
    Bonjour loufab,

    Merci pour ta question. L'appel de la fonction se fait dans une requête. la forme de cette requete est la suivante:

    Pays DMedian ("[TTF]"; "[Filled Unrestricted TTF values]")

    Et question peut-être bête mais: Comment met-on un point d'arrêt dans le code?

    Bien à toi

  6. #6
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    Ma modification concernait la ligne 34

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2015
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par helas Voir le message
    Bonjour,
    Ma modification concernait la ligne 34
    Bonjour Helas,

    Merci beaucoup pour ta suggestion. j'ai intégré ta modification a la ligne 34 mais le résultat est toujours le même: TOO complex for being evaluated...

    Une idée? J'ai également changé le nom de la table filled unrestricted TTF Values par un autre nom pour éviter la confusion des champs.

    Bien à vous,

  8. #8
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    la fonction ne contient aucun crochet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DMedian ("TTF"; "Filled Unrestricted TTF values")

  9. #9
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,
    Il est certain que lors de l'utilisation de la fonction Dmedian il faut les crochets.

    Peut-on voir la requête ?

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2015
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Bonjour vous deux, je ne peux malheureusement pas vous montrer la requête au vu de la confidentialité du projet. De plus, mes clients ont décidé de ne pas poursuivre ce projet, je vais donc marquer le sujet comme résolu, et vous remercie de votre aide dans ce process.

    Je suis curieux de savoir pourquoi le code ne marchait pas alors qu'aucune irrégularité n'était apparente mais je n'ai pas plus de temps à consacrer à ce sujet.

    Je vous souhaite une bonne journée.

    Bien à vous,

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

Discussions similaires

  1. Erreur 3071 - Expression trop complexe !
    Par caesar23 dans le forum IHM
    Réponses: 3
    Dernier message: 15/06/2010, 11h26
  2. Réponses: 33
    Dernier message: 16/01/2009, 14h02
  3. Une requête trop complexe pour moi
    Par prgasp77 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 14/01/2009, 17h12
  4. Fichier trop complexe pour m'en sortir tout seul
    Par angoul16 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/01/2009, 10h39
  5. [VBA-E] Erreur 16 expression trop complexe
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/04/2006, 11h44

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