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 :

Message "#Erreur" pour calculs dans formulaire


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 28
    Points
    28
    Par défaut Message "#Erreur" pour calculs dans formulaire
    bonjour,

    J'ai besoin de faire une moyenne, dans mon pied de page d'un formulaire resultat, de données se trouvant dans le détail de mon formulaire.

    lorsque ce sont des champs la syntaxe est = AVG ([nomchamp]),

    or je veux faire la moyenne sur des données calculées qui sont des calculs sur des champs dans une zone de texte.

    la syntaxe que j'ai alors utilisée est = AVG ([nom Zone de texte]).... et évidemment ça ne marche pas: "#Erreur".

    Il faut savoir que pour le moment ma base ne contient pas les données nécessaire aux calculs, mais contient des enregistrements ;

    D'où ma question : Est ce que le message d'erreur vient du fait qu'il n'y ai pas de données (diviser par 0 étant impossible = "#Erreur".) ? où est ce que la syntaxe est quand même fausse ?

    Merci

    tieuphuong

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    J'ai remarqué un truc trés vicieux sous Access en Français c'est que les fonctions traditionnelles de maths sont renommées, essaie Moy().

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonsoir,
    Citation Envoyé par icare_1er
    .. un truc trés vicieux sous Access en Français...().
    Pas si vicieux... On sait que pour les requêtes,Formulaires, étâts on emploie la syntaxe française. Mais on peut employer l'anglais sans problème. Moyenne ou Avg seront acceptés, compris, traduits.
    Pour le cas cité : Si la zone Détail du Formulaire comporte un calcul genre =[Champ1]+[Champ2] et que le résultat soit [Champ3]
    il est tecniquement impossible d'écrire dans le pied du formulaire = Moyenne([Champ3]
    Le calcul doit être repris intégralement : Moyenne([Champ1]+[Champ2])
    Nous ne rencontrons pas ce problème si le calcul champ3 est effectué au niveau de la requête. Dans ce cas champ3 est considéré comme un champ simple dans le formulaire et la syntaxe = Moyenne([Champ3]) est envisageable.

    Cordialement.

    Ps : La fonction Nz peut aider à éviter les erreurs provenant de champ vide...
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    le probleme c'est que mon formulaire retourne la liste des entreprises qui repondent aux différents critères d'un moteur de recherche. la liste des entreprises est ensuite retournée dans le détail de mon formulaire avec les caractéristiques suivante :

    Nom de l'Hotel,
    NbreChambreDispo,
    le PMC
    NbreChambreLouee,
    NbreClient,

    TO = ([NbreChambreLouee]/[NbreChambreDispo])/100,
    IF =[NbreClient]/[NbreChambreLouee],
    RevPar = ([NbreChambreLouee]/[NbreChambreDispo]/100)*[PMC]

    Dans mon pied de page je voudrais faire la moyenne sur ma selection du TO, IF, RevPar, PMC.

    par consequent je ne peux pas rependre les champs car il peuvent varier de 1 à N selon les criteres retournés... et j'avoue ne pas trop savoir comment faire..
    Images attachées Images attachées  

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonsoir,
    Citation Envoyé par tieuphuong
    Dans mon pied de page je voudrais faire la moyenne sur ma selection du TO, IF, RevPar, PMC.

    par consequent je ne peux pas rependre les champs car il peuvent varier de 1 à N selon les criteres retournés...
    Peut-être la solution :
    Citation Envoyé par FrancisHop
    Nous ne rencontrons pas ce problème si le calcul champ3 est effectué au niveau de la requête. Dans ce cas champ3 est considéré comme un champ simple dans le formulaire et la syntaxe = Moyenne([Champ3]) est envisageable.
    Cordialement.
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Merci bcp!

    effectivement avec la requête ça marche!

    Par contre toujours sur les même calcul :

    Je dois faire afficher automatiquement sur une page web et/ou dans un état Access le resultat de chaque indicateur de la periode N-1 dans une zone de texte pour chaque fiche d'hôtel...

    j'ai impérativement besoin de passer par code sql (pour utiliser la fonction à la fois en ACCESS et en ASP moyennant quelques modifications...) j'ai de suite pensé à passer par un module dans lequel il y aurait une fonction de calcul qui me suffirait alors d'appeler.

    Etant donné que j'ai un identifiant par enquête je pensais par un code de ce type :

    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
     
    'exemple pour l'Indice de fréquentation :
     
    Sub Calcul_IndiceF
     
    Dim n as Integer,
    Dim db As DAO.Database,
    Dim requete As String,
     
    n= Id_Donnees;
     
    requete = 
    "Select NbreArrivee/NbreChambreLouee As IF" + _
    "From tbl_Donnees" + _
    "Where Id_Hotel = tbl_Hotels.IdHotel and " + _
    If Id_Donnees > = 1 then Id_Donnees = n-1 " + _
    " Else " + _
    " MsgBox " Pas de données antérieures disponibles !"" + _
    " End If"
     
    End Sub
    Je ne sais pas grand chose en programmation... est ce que ce type de synthaxe est correcte ? Manque t -il du code pour que cela marche ? Enfin comment dois je faire pour appeler cette fonction depuis ma zone de texte (Propriétés => Origine source = Calcul_IndiceF ?...)

    Merci d'avance,

    tieuphuong

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonsoir,
    Le moins qu'on puisse dire c'est "Tu t'y retrouves dans tout ça?" J'avais déjà été surpris par :
    Citation Envoyé par tieuphuong
    TO = ([NbreChambreLouee]/[NbreChambreDispo])/100,
    IF =[NbreClient]/[NbreChambreLouee],
    RevPar = ([NbreChambreLouee]/[NbreChambreDispo]/100)*[PMC]

    Dans mon pied de page je voudrais faire la moyenne sur ma selection du TO, IF, RevPar, PMC.

    par consequent je ne peux pas rependre les champs car il peuvent varier de 1 à N selon les criteres retournés...
    Dans un premier temps choisis des noms explicites et évite certains "IF". Sinon gare à la confusion.
    Il semble qu'on puisse obtenir un résultat satisfaisant à l'aide de ta requête et de :bluewin.ch/w.stucki/Requetes.htm#Comparaison

    Cordialement.
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    la citation à laquelle tu fais reference servait à completer un formulaire et état de recherche qui me renvoyait les 4 indicateurs d'après une sélection d'hotels d'une recherche multicritères du moteur de recherche, ce dont je me suis a peu près sortie...

    vu comme ça c'est vrai que ça parait un peu brouillon... faut dire que je sais pas forcement hyper bien expliquer non plus et ce que je cherche à faire est un peu tendu...

    Voilà sous format texte ce que je cherche à faire actuellement :

    L'idée c'est que les hôteliers remplissent 6 champs de données (en ligne) et que qu'avec ces 6 champs ont calcule 4 indicateurs :
    l'indice de fréquentation égal au Nombre d'arrivées divisé par le Nombre de chambre Louées),
    le taux d'occupation égal au (Nbre de Chambre de Louee divisé par le Nbre de Chambre Dispo)*100,,
    le Prix Moyen Chambre qu'ils nous donnent directement
    et le prix moyen par chambre dispo appelé RevPar égal au taux d'occupation multiplié par le Prix Moyen Chambre).

    Lorsqu'ils remplissent le questionnaire en ligne ils ont dans un encart le récapitulatif de leurs 4 indicateurs du ou des mois précedents (selon ce que je pourrais faire...) ;

    ainsi que la moyenne de chaque indicateur par zone hotelière et/ou par catégorie (nbre d'étoiles d'une part et/ou par categories - Indpt/Chaine volontaire/chaine intégrée) du ou des mois précédents à condition que le nombre de repondants à l'enquete mensuelle au mois m-1 sur la zones soit > ou = à 5 et soient > ou = à 50% du nbre total d'hôtels sur la zone! ( ). conditions sans quoi les données ne peuvent être exploitées et surtout pas diffusées....

    Avec une table Hotels, un table Données (<=> Enquêtes), une table Etoiles, une table Catégories et une table ZonesHotelières.
    les 4 dernières étant liées à la table hotels en respectant l'intégrité referentielle.

    je cherche donc à créer une ou plusieurs requête(s) SQL qui me permette(nt) d'obtenir ces résultats récapitulatifs afin de pouvoir l'utiliser à la fois sur la base de données Access "en interne" et sur l'interface web en asp après quelques modifs de syntaxes idouines.

    d'après ce que j'ai lu dans le cours SQL sur ce site cela pourrait passer par des requetes sql imbriquées (jointures) conditionnées dans la procédure WHERE et HAVING ... c'est notamment pour cela que je pensais à un module de fonctions de calculs pour automatiser au max la procedure.

    sauf que que quand on lit ça paraît simple alors que c'est loin d'être évident quand on est pas informaticien...

    je suis à peu près dans le même état que ce smileys actuellement... il me reste plus qu'a trouver ces deux types de requetes (récap individuelle et moyennes) pour finir mon projet et exploiter enfin mon travail.... ça paraît super simple et rapide à faire alors que non :" 'y a qu'à! "

    Ainsi tout conseils/guidages/pistes me seraient bien utiles...

    merci pour le lien... mais tu pourrais me donner l'url complete car même avec www.bluewin.ch/w.stucki/Requetes.htm#Comparaison ça marche pas...

    Bonne soirée,

    Tieuphuong

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Merci pour le lien,

    je vais voir ce que je peux en faire

    tieuphuong

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Voici par quoi finalement on est passé :

    On a créé une requête 'Indicateurs' dans laquelle nous avons automatisé les calculs et fait appel à une fonction de calcul de moyennes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    moyTO: calcmoyenneTO([tbl_hotels].[idhotel];[tbl_donnees].[annee];[tbl_donnees].[mois])
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF: VraiFaux([NbreChambreLouee]<>0;[nbreArrivee]/[NbreChambreLouee];0)
    Les fonctions appelées ont été placées dans un module, 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
     
    Function calcMoyenneTO(id_hotel As Integer, enquete_annee As Integer, enquete_mois As Integer) As Double
     
    Dim moyTO As Double
    Dim id_zone As Integer
     
    If (teste_critere(id_hotel, enquete_annee, enquete_mois, id_zone) = True) Then
       moyTO = renvoieMoyenneZoneTO(id_zone, enquete_annee, enquete_mois, "TO")
    Else
       moyTO = -1
    End If
     
    calcMoyenneTO = moyTO
    End Function
     
    Function renvoieMoyenneZoneTO(id_zone As Integer, enquete_annee As Integer, enquete_mois As Integer, AvgTOZone As String) As Double
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim requete As DAO.QueryDef
     
    Dim total_TO As Double
     
    Dim moyenne_TO As Double
     
    total_TO = 0
    moyenne_TO = 0
     
     
    Set db = CurrentDb
    Set requete = db.CreateQueryDef("", _
    "SELECT tbl_Hotels.IdZone, " + _
    "IIf([NbReChambreDispo]<>0 And [nbrechambrelouee]<>0 And [NbreJourOuverture]<>0,[NbreChambreLouee]/[NbreChambreDispo],0) AS [TO], " + _
    "IIf([NbreChambreLouee]<>0,[nbreArrivee]/[NbreChambreLouee],0) AS IF, " + _
    "IIf([TO]<>0 And [PMC]<>0,[TO]*[PMC],0) AS RevPar, " + _
    "tbl_Donnees.Annee, tbl_Donnees.Mois, tbl_Donnees.PMC, tbl_Donnees.IdHotel, tbl_Donnees.Annee, tbl_Donnees.Mois " + _
    "FROM tbl_Hotels INNER JOIN tbl_Donnees ON tbl_Hotels.IdHotel = tbl_Donnees.IdHotel " + _
    "WHERE (((tbl_Hotels.IdZone)=" + CStr(id_zone) + ") AND tbl_Donnees.Annee=" + CStr(enquete_annee) + _
        " AND tbl_Donnees.mois=" + CStr(enquete_mois) + ");")
    Set rs = requete.OpenRecordset
     
    While Not (rs.EOF)
     
        total_TO = total_TO + rs.Fields!TO
     
        rs.MoveNext
    Wend
     
    moyenne_TO = total_TO / rs.RecordCount
     
    renvoieMoyenneZoneTO = moyenne_TO
    rs.Close
    requete.Close
    db.Close
    End Function
    Function calcMoyenneIF(id_hotel As Integer, enquete_annee As Integer, enquete_mois As Integer) As Double
     
    Dim moyIF As Double
    Dim id_zone As Integer
     
    If (teste_critere(id_hotel, enquete_annee, enquete_mois, id_zone) = True) Then
       moyIF = renvoieMoyenneZoneIF(id_zone, enquete_annee, enquete_mois, "IF")
    Else
       moyIF = -1
    End If
     
    calcMoyenneIF = moyIF
    End Function
    En esperant que cela serviera à d'autres...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/01/2015, 15h56
  2. Calculs dans formulaire.
    Par Marmouz dans le forum IHM
    Réponses: 3
    Dernier message: 06/12/2005, 10h56
  3. [Débutant(e)] Message d'erreur JDBC pour oracle
    Par krakatoe dans le forum JDBC
    Réponses: 1
    Dernier message: 14/09/2005, 16h44

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