Page 1 sur 1

Calculer les pourcentages

Publié : mer. 04/mai/2016 7:49
par Micoute
Bonjour à tous, au cas où ça peut vous servir, je vous offre ce module pour calculer les pourcentages.

Code : Tout sélectionner

;Pourcentages
 
 DeclareModule Pourcentage
   
  Structure Calcul  
    Augmentation.f
    Reduction.f
    ValeurFinale.f  
  EndStructure
  
  Global MonCalcul.Calcul
      
Declare CalculerPourcentage(ValeurTotale.f, ValeurPartielle.f)
Declare CalculerValeurPartielle(Pourcentage.f, ValeurTotale.f)
Declare CalculerValeurTotale(ValeurPartielle.f, Pourcentage.f)
Declare CalculReduction(ValeurInitiale.f, Pourcentage.f)
Declare CalculAugmentation(ValeurInitiale.f, Pourcentage.f)
Declare CalculerTauxVariation(ValeurInitiale.f, ValeurFinale.f)

EndDeclareModule

Module Pourcentage

Procedure CalculerPourcentage(ValeurTotale.f, ValeurPartielle.f)
  Protected Resultat.f
  Resultat = 100 * (ValeurPartielle / ValeurTotale)
  ProcedureReturn Resultat
EndProcedure

;Debug CalculerPourcentage(360, 216) ;60

Procedure CalculerValeurPartielle(Pourcentage.f, ValeurTotale.f)  
  Protected Resultat.f
  Resultat = (Pourcentage * ValeurTotale) / 100
  ProcedureReturn Resultat
EndProcedure

;Debug CalculerValeurPartielle(360, 60) ;216

Procedure CalculerValeurTotale(ValeurPartielle.f, Pourcentage.f)
  Protected Resultat.f
  Resultat = 100 * (ValeurPartielle / Pourcentage)
  ProcedureReturn Resultat
EndProcedure

;Debug CalculerValeurTotale(216, 60) ;360

Procedure CalculReduction(ValeurInitiale.f, Pourcentage.f)
  Protected.f Reduction, ValeurFinale
  MonCalcul\Reduction = ValeurInitiale * (Pourcentage / 100)
  MonCalcul\ValeurFinale = ValeurInitiale * (1 - Pourcentage / 100)
  ProcedureReturn Reduction
EndProcedure

;CalculReduction(360, 40)
;Debug MonCalcul\Reduction ;144
;Debug MonCalcul\ValeurFinale ;216

Procedure CalculAugmentation(ValeurInitiale.f, Pourcentage.f)
  
  Protected.f Augmentation, ValeurFinale
  
  MonCalcul\Augmentation = ValeurInitiale * (Pourcentage / 100)
  MonCalcul\ValeurFinale = ValeurInitiale * (1 + Pourcentage / 100)
  
EndProcedure

;CalculAugmentation(360, 40)
;Debug MonCalcul\Augmentation ;144
;Debug MonCalcul\ValeurFinale ;504

Procedure CalculerTauxVariation(ValeurInitiale.f, ValeurFinale.f)
  Protected Resultat.f
  Resultat = 100 * (ValeurFinale - ValeurInitiale) / ValeurInitiale
  ProcedureReturn Resultat
EndProcedure

;Debug CalculerTauxVariation(360, 216) ;-40
EndModule

CompilerIf #PB_Compiler_IsMainFile
  
  Enumeration Fenetres
    #Fenetre_Pourcentage
  EndEnumeration
  
  Enumeration Gadgets
    #Container_Pourcentage
    #Container_ValeurTotale
    #Container_Augmentation
    #Container_ValeurPartielle
    #Container_Reduction
    #Container_Variation
    
    #Btn_Pourcentage
    #Btn_ValeurTotale
    #Btn_Augmentation
    #Btn_ValeurPartielle
    #Btn_Reduction
    #Btn_Variation
    
    #Txt_CalculPourcentage
    #Txt_CalculValeurTotale
    #Txt_CalculAugmentation
    #Txt_CalculValeurPartielle
    #Txt_CalculReduction
    #Txt_CalculVariation  
    #Txt_Pourcentage
    #Txt_ValeurTotale
    #Txt_ValeurFinale
    #Txt_ValeurPartielle
    #Txt_ValeurFinaleReduction
    #Txt_Variation
    #Txt_Reduction
    #Txt_Augmentation
    
    #Txt_PourcentageValeurtotale
    #Txt_PourcentageValeurPartielle  
    #Txt_ValTotValeurPartielle
    #Txt_ValTotPourcentage
    #Txt_AugValeurInitiale
    #Txt_AugAugmentation
    #Txt_ValPartValeurTotale
    #Txt_ValPartPourcentage
    #Txt_RedValeurInitiale
    #Txt_RedReduction
    #Txt_VarValeurInitiale
    #Txt_VarValeurFinale
    
    #Str_PourcentageValeurTotale
    #Str_PourcentageValeurPartielle
    #Str_valpartvaltot
    #Str_Pourcentagevaltot
    #Str_initaug
    #Str_Augaug
    #Str_totvalpart
    #Str_Pcvalpart
    #Str_InitRed
    #Str_Redred
    #Str_Initvar
    #Str_Finalevar
  EndEnumeration
  
  Enumeration Polices
    #Police
  EndEnumeration
  
  Global.f Vt, Vt2, Vt3, Vp, Vp2, Vp3,Pc, Pc2, Pc3, Pc4, Pc5, Pc6, Vi, Vi2, V3, Vf, Vf2
  Global Evenement
  
  Procedure Ouvrir_Fenetre_Pourcentage()
    If OpenWindow(#Fenetre_Pourcentage, 448, 22, 617, 517, "Pourcentages", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
      
      ContainerGadget(#Container_Pourcentage, 5, 5, 300, 160, #PB_Container_Raised)
      TextGadget(#Txt_CalculPourcentage, 10, 10, 270, 20, "Calcul du pourcentage (%)", #PB_Text_Center)
      TextGadget(#Txt_PourcentageValeurtotale, 10, 45, 110, 20, "Valeur totale :", #PB_Text_Right)
      TextGadget(#Txt_PourcentageValeurPartielle, 10, 75, 110, 20, "Valeur partielle :", #PB_Text_Right)
      TextGadget(#Txt_Pourcentage, 10, 125, 270, 20, "Pourcentage :", #PB_Text_Center)
      StringGadget(#Str_PourcentageValeurTotale, 130, 40, 115, 20, "")
      StringGadget(#Str_PourcentageValeurPartielle, 130, 70, 115, 20, "")
      ButtonGadget(#Btn_Pourcentage, 255, 70, 30, 20, "Ok")
      CloseGadgetList()
      
      ContainerGadget(#Container_Variation, 310, 5, 300, 160, #PB_Container_Raised)
      TextGadget(#Txt_CalculVariation, 10, 10, 270, 20, "Calcul de variation", #PB_Text_Center)
      TextGadget(#Txt_VarValeurInitiale, 10, 45, 110, 20, "Valeur initiale :", #PB_Text_Right)
      TextGadget(#Txt_VarValeurFinale, 10, 75, 110, 20, "Valeur finale :", #PB_Text_Right)
      TextGadget(#Txt_Variation, 10, 125, 270, 20, "Variation : ", #PB_Text_Center)
      StringGadget(#Str_Initvar, 130, 40, 115, 20, "")
      StringGadget(#Str_Finalevar, 130, 70, 115, 20, "")
      ButtonGadget(#Btn_Variation, 255, 70, 30, 20, "Ok")
      CloseGadgetList()
      
      ContainerGadget(#Container_ValeurTotale, 5, 335, 300, 160, #PB_Container_Raised)
      TextGadget(#Txt_CalculValeurTotale, 10, 10, 270, 20, "Calcul de la valeur totale", #PB_Text_Center)
      TextGadget(#Txt_ValTotValeurPartielle, 10, 45, 110, 20, "Valeur partielle :", #PB_Text_Right)
      TextGadget(#Txt_ValTotPourcentage, 10, 75, 110, 20, "Pourcentage :", #PB_Text_Right)
      TextGadget(#Txt_ValeurTotale, 10, 125, 270, 20, "Valeur totale : ", #PB_Text_Center)
      StringGadget(#Str_valpartvaltot, 130, 40, 115, 20, "")
      StringGadget(#Str_Pourcentagevaltot, 130, 70, 115, 20, "")
      ButtonGadget(#Btn_ValeurTotale, 255, 70, 30, 20, "Ok")
      CloseGadgetList()
      
      ContainerGadget(#Container_ValeurPartielle, 310, 335, 300, 160, #PB_Container_Raised)
      TextGadget(#Txt_CalculValeurPartielle, 0, 10, 290, 20, "Calcul de la valeur partielle", #PB_Text_Center)
      TextGadget(#Txt_ValPartValeurTotale, 10, 45, 110, 20, "Valeur totale :", #PB_Text_Right)
      TextGadget(#Txt_ValPartPourcentage, 10, 75, 110, 20, "Pourcentage :", #PB_Text_Right)
      TextGadget(#Txt_ValeurPartielle, 10, 125, 270, 20, "Valeur partielle : ", #PB_Text_Center)
      StringGadget(#Str_totvalpart, 130, 40, 115, 20, "")
      StringGadget(#Str_Pcvalpart, 130, 70, 115, 20, "")
      ButtonGadget(#Btn_ValeurPartielle, 255, 70, 30, 20, "Ok")
      CloseGadgetList()
      
      ContainerGadget(#Container_Augmentation, 5, 170, 300, 160, #PB_Container_Raised)
      TextGadget(#Txt_CalculAugmentation, 10, 10, 270, 20, "Calcul d'une augmentation", #PB_Text_Center)
      TextGadget(#Txt_AugValeurInitiale, 10, 45, 110, 20, "Valeur initiale :", #PB_Text_Right)
      TextGadget(#Txt_AugAugmentation, 10, 75, 110, 20, "Augmentation %", #PB_Text_Right)
      TextGadget(#Txt_ValeurFinale, 10, 125, 270, 20, "Valeur finale : ", #PB_Text_Center)
      TextGadget(#Txt_Augmentation, 10, 100, 270, 20, "Augmentation (valeur) : ", #PB_Text_Center)
      StringGadget(#Str_initaug, 130, 40, 115, 20, "")
      StringGadget(#Str_Augaug, 130, 70, 115, 20, "")
      ButtonGadget(#Btn_Augmentation, 255, 70, 30, 20, "Ok")
      CloseGadgetList()
      
      ContainerGadget(#Container_Reduction, 310, 170, 300, 160, #PB_Container_Raised)
      TextGadget(#Txt_CalculReduction, 10, 10, 270, 20, "Calcul d'une réduction", #PB_Text_Center)
      TextGadget(#Txt_RedValeurInitiale, 10, 45, 110, 20, "Valeur initiale :", #PB_Text_Right)
      TextGadget(#Txt_RedReduction, 10, 75, 110, 20, "Réduction % :", #PB_Text_Right)
      TextGadget(#Txt_ValeurFinaleReduction, 10, 125, 270, 20, "Valeur finale : ", #PB_Text_Center)
      TextGadget(#Txt_Reduction, 10, 100, 270, 20, "Réduction (valeur) : ", #PB_Text_Center)
      StringGadget(#Str_InitRed, 130, 40, 115, 20, "")
      StringGadget(#Str_Redred, 130, 70, 115, 20, "")
      ButtonGadget(#Btn_Reduction, 255, 70, 30, 20, "Ok")
      CloseGadgetList()
      
      ; Gadget Fonts
      For i = #Txt_CalculPourcentage To #Txt_Augmentation
        SetGadgetFont(i, LoadFont(#Police, "DejaVu Sans", 10, #PB_Font_Bold|#PB_Font_HighQuality))
      Next i
      
    EndIf
  EndProcedure
  
  Ouvrir_Fenetre_Pourcentage()
  
  ; Boucle principale
  Repeat
    Evenement = WaitWindowEvent()
    Select Evenement
        
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Btn_Pourcentage
            Vt = ValF(GetGadgetText(#Str_PourcentageValeurTotale))
            Vp = ValF(GetGadgetText(#Str_PourcentageValeurPartielle))
            Pc = Pourcentage::CalculerPourcentage(Vt, Vp)
            If GetGadgetText(#Str_PourcentageValeurTotale) <> "" And GetGadgetText(#Str_PourcentageValeurPartielle) <> ""
              SetGadgetText(#Txt_Pourcentage, "Pourcentage :" + StrF(Pc) + " %")
            EndIf
            
          Case #Btn_ValeurTotale
            Vp2 = ValF(GetGadgetText(#Str_valpartvaltot))
            Pc2 = ValF(GetGadgetText(#Str_Pourcentagevaltot))
            Vt2 = Pourcentage::CalculerValeurTotale(Vp2, Pc2)
            If GetGadgetText(#Str_valpartvaltot) <> "" And GetGadgetText(#Str_Pourcentagevaltot) <> ""
              SetGadgetText(#Txt_ValeurTotale, "Valeur totale : " + StrF(Vt2))
            EndIf
            
          Case #Btn_Augmentation
            Vi = ValF(GetGadgetText(#Str_initaug))
            Pc3 = ValF(GetGadgetText(#Str_Augaug))
            If GetGadgetText(#Str_initaug) <> "" And GetGadgetText(#Str_Augaug) <> ""            
              Pourcentage::CalculAugmentation(Vi, Pc3)
              SetGadgetText(#Txt_Augmentation, "Augmentation (valeur) : " + StrF(Pourcentage::MonCalcul\Augmentation,2))
              SetGadgetText(#Txt_ValeurFinale, "Valeur finale : " + StrF(Pourcentage::MonCalcul\ValeurFinale,2))
            EndIf
            
          Case #Btn_ValeurPartielle
            Vt3 = ValF(GetGadgetText(#Str_totvalpart))
            Pc4 = ValF(GetGadgetText(#Str_Pcvalpart))
            If GetGadgetText(#Str_totvalpart) <> "" And GetGadgetText(#Str_Pcvalpart) <> ""
              Vp3 = Pourcentage::CalculerValeurPartielle(Pc4, Vt3)
              SetGadgetText(#Txt_ValeurPartielle, "Valeur partielle : " + StrF(Vp3))
            EndIf
            
          Case #Btn_Reduction
            Vi2 = ValF(GetGadgetText(#Str_InitRed))
            Pc5 = ValF(GetGadgetText(#Str_Redred))
            If GetGadgetText(#Str_InitRed) <> "" And GetGadgetText(#Str_Redred) <> ""
              Pourcentage::CalculReduction(Vi2, Pc5)
              SetGadgetText(#Txt_Reduction, "Réduction (valeur) : " + StrF(Pourcentage::MonCalcul\Reduction,2))
              SetGadgetText(#Txt_ValeurFinaleReduction, "Valeur finale : " + StrF(Pourcentage::MonCalcul\ValeurFinale,2))
            EndIf
          Case #Btn_Variation
            Vi3 = ValF(GetGadgetText(#Str_Initvar))
            Vf2 = ValF(GetGadgetText(#Str_Finalevar))
            If GetGadgetText(#Str_Initvar) <> "" And GetGadgetText(#Str_Finalevar) <> ""
              Pc6 = Pourcentage::CalculerTauxVariation(Vi3, Vf2)
              SetGadgetText(#Txt_Variation, "Variation : " + StrF(Pc6) + " %")
            EndIf  
        EndSelect
        
      Case #PB_Event_CloseWindow
        Select EventWindow()
          Case #Fenetre_Pourcentage
            CloseWindow(#Fenetre_Pourcentage)
            Break
        EndSelect
    EndSelect
  ForEver
  
CompilerEndIf

Re: Calculer les pourcentages

Publié : mer. 04/mai/2016 13:25
par Bernie
Merci micoute de ton partage

Re: Calculer les pourcentages

Publié : mer. 04/mai/2016 15:48
par Kwai chang caine
Je n'avais pas remarqué qu'il y avait autant de type de pourcentages différents 8O
En tout cas merci pour le partage 8)

Re: Calculer les pourcentages

Publié : mer. 04/mai/2016 17:32
par Micoute
Mais de rien, mon bon KCC !