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 :

calcul de part avec des valeurs négatives et positives


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 37
    Points : 34
    Points
    34
    Par défaut calcul de part avec des valeurs négatives et positives
    Bonjour,
    J'ai un petit souci concernant un calcul au sein d'un formulaire (voir image en pièce jointe).
    Plusieurs champs sont présents et doivent être utilisé pour le calcul:
    - pop99
    - pop06
    - solde migratoire apparent 99-06 (SM)
    - solde naturel 99 - 06 (SN)
    - Taux d'évolution sur la période 99 -06

    Ma question est la suivante:
    Je cherche à pouvoir introduire une phrase dans le formulaire du type:
    " L'évolution démographique de la période 99-06 provient à 58% (par ex) des migrations et à 42% de l'apport naturel".
    Le calcul à éxécuter porte sur le 58% et le 42%.

    Ainsi j'ai fait un premier essai avec le calul suivant:
    SM*100 / (pop06-pop99) : pour la part du solde migratoire
    SN*100 / (pop06-pop99) : pour la part du solde naturel

    Lorsque j'ai des valeurs positives partout, tout fonctionne normalement dans le cas ou (Pop06 - pop 99) >0 et où SM>0 et SN>0

    Cependant une commune peut perdre de la population entre 99 et 2006 (évolution négative) ou une commune peut gagner de la population mais elle peut avoir un SN ou un SM<0.

    Ainsi lorsque j'applique ma formule, cela ne fonctionne pas pour les valeurs négatives (...normal!!)

    Comme on peut le voir sur la piece jointe:
    J'ai 371 hab en 99 et 417 en 2006. Soit une augmentation de 46 habitants.
    En revanche il y a 11 personnes qui sont décédées (-11) et 57 personnes qui sont arrivées dans la commune (migration).
    Ainsi dans ce cas la formule ne fonctionne pas car cela crée un non sens:
    l'augmentation serait du à 23.9% au SN (ce qui est faux) et 123% au SM (...).
    Alors qu'il faudrait finalement afficher:
    Part du SN dans l'augmentation: 0%
    Part du SM dans l'augmentation: 100%

    Ainsi avec quelle formule (surement avec condition) je pourrais éviter ce type de problème?
    Il faudrait que mon expression fonctionne dans le cas ou toutes les valeurs sont positives, dans le cas où SM <0 , ou dans le cas d'un évolution négative avec pop06-pop99<0 et SN + SM<0.

    Je ne sais pas si c'est très clair mais si quelqu'un a compris mon problème et qu'il peut m'aider...

    Merci
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 056
    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 056
    Points : 24 655
    Points
    24 655
    Par défaut
    Bonjour,

    Penche-toi sur la fonction iif().

    ça résoudra ton problème.

    Cordialement,

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 37
    Points : 34
    Points
    34
    Par défaut
    Re!!
    J'ai une première idée mais je pense que je suis encore loin...
    Prenons:
    E = Pop06 - pop99
    X= SN (solde naturel)
    Y= SM (solde migratoire)
    X1= Part de SN dans E
    Y1= Part de SM dans E.

    On aurait par exemple:
    1 - Trouver la valeur de la part du solde naturel:
    Si E>0 et si X<0 alors X1 = 0%
    Sinon X1= (X*100)/E

    2 - Trouver la valeur de la part du solde migratoire
    Y1 = 100 - X1

    Est ce que c'est correct (dans l'idée...)??
    Si oui comment faire dans le cas ou E<0 ?

    Merci

  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 056
    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 056
    Points : 24 655
    Points
    24 655
    Par défaut
    E = Pop06 - pop99
    X= SN (solde naturel)
    Y= SM (solde migratoire)
    X1= Part de SN dans E
    Y1= Part de SM dans E.

    On aurait par exemple:
    1 - Trouver la valeur de la part du solde naturel:
    Si E>0 et si X<0 alors X1 = 0%
    Sinon X1= (X*100)/E
    le controle X1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =iif(Pop06-pop99>0 and SN<0;0;(SN*100)/(Pop06-pop99))
    2 - Trouver la valeur de la part du solde migratoire
    Y1 = 100 - X1
    le controle Y1, sachant que X1 est calculé (attention de bien respecter le nom X1, sinon mettre le nom du controle.)

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour à tous,

    je dirais plus à priori ton équation est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     SM + SN = Pop06 - Pop99 =>
     (SM + SN) / (Pop06-Pop99)  = 1 =>
     (SM/(Pop06-Pop99)) + (SN/(Pop06-Pop99)) = 1 = cos² + sin² 
     
     SN(Pop6-Pop99) et SM/(Pop06-Pop99) sont des carrés et donc 
     impérativement >=0  
     
    X1 = 100* iif(SN/(Pop06-Pop99) < 0, 0 , SN/(Pop06 - Pop99))
    Y1 = 100 - X1
    J'ajoute pour finir que la proportion des soldes devraient plutôt se calculer sur la population de départ soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     P(SM)= SM/Pop99 et P(SN)=SN/Pop99
     ainsi Pop06= Pop99 * (1 + P(SM) + P(SN))
     
    selon ton exemple :
    Pop99=371 , SM=57 , SN=-11
    P(SM) = 57/371 = +15.36% 
    P(SN) = -11/371 = -2.96%
    Soit Pop06 = 371 (1 + .1536 - 0.0296) = 417

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 37
    Points : 34
    Points
    34
    Par défaut
    Bonjour!!
    Bon faut que je me penche sur tout ca a tête reposée...Je viens de lire vos réponses et tout d'abord merci!!
    je ne suis pas matheu...mais j'adore ca!!
    Et question code et syntaxe je suis un novice...donc je vais regarder vos propositions et les tester...
    Je vous fais parvenir les retours!!
    Merci encore

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 37
    Points : 34
    Points
    34
    Par défaut
    Re bonjour,

    J'ai regardé ta proposition ilank, cependant, je ne voudrais pas créer un taux mais plutot une la part d'évolution sur 100.
    Ainsi dans l'exemple, avec 371 personnes en plus dont 57 arrivants et 11 décés,
    je dirais alors que la part du solde naturel dans le gain de population est de 0% (car négatif) et la part du solde migratoire est de 100%.
    Pour l'étude que je mène, la part sur 100 est plus parlante que le taux (que je vais tout de même intégré dans la base... )

    Cependant pour l'équation proposée, j'ai bien compris le principe mais j'ai décroché avec les sin et cos...lol
    Je vais aller faire un tour sur un ptit site de math...

    Je vais saisir ca dans acces...je vous tiens au courant!!

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 37
    Points : 34
    Points
    34
    Par défaut
    Re...je multiplie les messages...dsl lol
    La formule fonctionne bien mais je me pose la question de comment gérer les cas de diminution (pop99 > pop06).
    Si la population baisse de 100, quelle est la part due au SM et SN?
    Nous pouvons avoir par exemple un cas ou une commune a diminué de 100 personnes avec un solde migratoire de 5 et un solde naturel de -105.
    Dois je appliquer une autre condition à la formule?

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,

    il s'agît de trigo, trago.
    concernant les diminutions la formule est la même; le principe étant que si SN et l'évolution de population n'ont pas la même direction (ou même signe mathématique) alors la proportion de SN est nulle; cela vaut évidemment pour SM également. J'ai oublié toutefois un cas, celui ou SM + SN = 0 (Ex: SN=+5 et SM=-5)

    En reprenant ton exemple de diminution de 100 avec SN=-105 et SM=+5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     P(SN) = -105/-100 = 1.05 
     => P(SN)=100% et P(SM)=0%
     soit l'évolution ici est due à 100% du solde naturel
    Maintenant, on peut également calculer la part du solde migratoire et du solde naturel en travaillant avec les valeurs absolues de chaque solde.
    D'après les exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     |SN|=11  |SM|=57  |Evolution|=|SN| + |SM|=68
     P(SN) = 11 /(11+57) => 16.18% 
     P(SM) = 57/(11+57) =>  83.82%
    ==============================================
    |SN|=105 |SM|=5 |Evolution|=110
    P(SN) = 105/110 => 95.45%
    P(SM) = 5/110 => 4.55%
    [/code]

    Avec les valeurs absolues, le cas |SN| = |SM| ne pose plus de problèmes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     SI |SN|=|SM| ALORS
      SI |SN|>0  ALORS 
          P(SN)=P(SM)=50%
      SINON pas d'évolution
     FINSI

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 37
    Points : 34
    Points
    34
    Par défaut
    Bonjour,
    Merci pour la petite démonstration!!J'ai effectivement compris le principe dans le cas ou SN et l'évolution de pop n'ont pas la même direction...
    Ainsi j'ai pu intégrer une formule dans mon controle access et cela marche parfaitement...sauf pour 2 cas :
    1 - Lorsque l'évolution est positive avec un SN>0 et SM<0
    2- Evolution négative avec SN<0 et SM>0
    Je met un exemple en piece jointe...
    Je veux tout ramener au format pourcentage avec aucune décimale. Je pense que j'ai du me gourer quelque part dans mes formules...qui sont d'ailleurs assez "lourdes". Je pense qu'il y a moyen de le faire plus simplement.:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Pour PSN: 
    =(VraiFaux([SN9906]/([POP06]-[POP99])<0;0;[SN9906]/ ([POP06]-[POP99])))*100
    il faut que j'utilise ensuite la foncion format percent pour transformer en XX%
     
    Pour PSM (sit je fait PSM=100-PSN, cela fait une erreur avec la fonction %...)
    =(100-(VraiFaux([SN9906]/([POP06]-[POP99])<0;0;[SN9906]/([POP06]-[POP99])))*100)
    Mis à part ces deux cas, les formules fonctionnent nikel!!
    Merci encore pour le coup de main.
    Images attachées Images attachées   

  11. #11
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,

    essaie plutôt ceci :

    Pour Psn :
    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
    SI (SN=0 Et SM=0)
    ALORS
      Psn=0
    SINON
      SI Abs(SN)+Abs(SM)=Abs(SN+SM) Ou Abs(SN)=Abs(SM) 'Même direction
      ALORS 
         Psn=Abs(SN)/(Abs(SN)+Abs(SM))
      SINON
         SI Abs(SN)>Abs(SM)
         ALORS
             Psn=1
         SINON
             Psn=0
         FINSI
      FINSI
    FINSI
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux([sn]=0 Et [sm]=0;0;VraiFaux(Abs([sn])+Abs([sm])=Abs([sn]+[sm]) Ou Abs([sn])=Abs([sm]);Abs([sn])/(Abs([sn])+Abs([sm]));VraiFaux(Abs([sn])>Abs([sm]);1;0)))
    Pour Psm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SI SN=0 Et SM=0
    ALORS
      Psm=0
    SINON
     Psm=1-Psn
    FINSI
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(SN=0 Et SM=0;0;1-Psn)
    Pour l'affichage, les propriétés des textbox
    Format : Pourcentage
    Decimal : 0

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 37
    Points : 34
    Points
    34
    Par défaut
    Bonjour,
    Effectivement, en suivant ton cheminement la prise en compte du pb sous l'angle des valeurs absolue est une très bonne idée.
    J'ai donc adapté la formule à mon contrôle et ça fonctionne pile poile.
    Merci encore pour la ptite leçon...!!
    vive les maths!... lol
    A bientot

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

Discussions similaires

  1. Calcul d'un cheksum avec des valeurs hexa
    Par Arnaud Malabeux dans le forum VB.NET
    Réponses: 4
    Dernier message: 09/04/2010, 10h15
  2. [XL-2003] Calcul avec des heures négatives !
    Par rico63 dans le forum Excel
    Réponses: 5
    Dernier message: 16/12/2009, 19h04
  3. [XL-2003] calculer cumul puis fusionner des cellules avec des valeurs
    Par doudou8mc dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/11/2009, 16h51
  4. Problème de "select" avec des valeurs a null
    Par SchpatziBreizh dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/07/2005, 16h08
  5. Réponses: 6
    Dernier message: 04/04/2003, 15h28

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