Solution Des Exercices
Solution Des Exercices
H6 =INDEX($E$6:$E$8;EQUIV([Link]($F$6:$F$8;G6);$F$6:$F$8;0))
recopie jusqu’à H8.
I6 =SI(F6>50000;F6*$B$3;0) recopie jusqu’à I8.
G11 {=MOYENNE(SI(C7:C24<>0;C7:C24;FAUX))}
G12 {=MIN(SI(C7:C24<>0;C7:C24;FAUX)) }
G13 {=MAX(SI(C7:C24<>0;C7:C24;FAUX)) }
G14 {=MOYENNE(SI(MOIS(B7:B24)=1;C7:C24)) }
G15 {=SOMME(SI(MOIS(B7:B24)=1;C7:C24)) }
G16 =EQUIV(MIN(C7:C24);C7:C24;0)+LIGNE(C7)-1
G17 =EQUIV(MAX(C7:C24);C7:C24;0)+LIGNE(C7)-1
© Groupe Eyrolles
Nous avons utilisé l’opérateur de concaténation pour lier les deux éléments. Une cellule appartenant à un bloc de cellules
contenant une formule matricielle ne peut pas se désolidariser. Si vous souhaitez entreprendre une modification de détail sur
une matrice, il faut en figer les données en sélectionnant la matrice, en la copiant, puis en utilisant Collage spécial du menu
« Édition », option « Valeurs ».
© Groupe Eyrolles
Taux_TVA = 5.5
'Saisie de la créance due TTC
Créances_dues_TTC = InputBox("Veuillez saisir la créance due TTC au 31/12/N du client concerné.")
'Calcul de la créance due HT
Reprise = 0
Else
Dotation = 0
End If
Else
Dotation = 0
Reprise = DépréciationN - 1
End If
'Affichage des informations demandées
© Groupe Eyrolles
Code VBA
Function Commission(Ventes As Currency, Anciennete As Integer) As Currency
'Déclaration des constantes
Const TauxCom1 As Double = 0.06
Const TauxCom2 As Double = 0.08
Const TauxCom3 As Double = 0.1
Const TauxCom4 As Double = 0.12
'Traitement des données
Select Case Ventes
Case 0 To 10000
Commission = Ventes * TauxCom1
Case 10000 To 20000
Commission = Ventes * TauxCom2
Case 20000 To 30000
Commission = Ventes * TauxCom3
Case Is >= 30000
Commission = Ventes * TauxCom4
End Select
'Affichage des données
Commission = Commission + (Commission * Anciennete / 100)
End Function
La fonction InputBox
© Groupe Eyrolles
La fonction MsgBox
Code VBA
Option Explicit
Sub EquationSecondDegre_Click()
Private btDOK_Click()
[Link]
End Sub
Une fois réalisée, l’interface ressemblera à l’illustration ci-dessous.
© Groupe Eyrolles
Code VBA
Option Explicit
'Déclaration des variables
Dim Sh As Double
Dim Nh As Double
Dim Sb As Currency
Private Sub Com_Calculer_Click()
'Traitement des données
Sheets("Salaire").Select
Range("B4").Select
[Link] = Scro_Horaire.Value
Range("B5").Select
[Link] = Text_NHeure.Value
Sh = Scro_Horaire.Value
Nh = Text_NHeure.Text
Sb = Sh * Nh
'Affichage des données
Lab_Sbrut.Caption = Format(Sb, "currency")
End Sub
Private Sub Com_Quitter_Click()
End
End Sub
Sub salaire1()
B_Salaire.Show
End Sub
ANNEXE 2
Module 1
'Ouverture du formulaire
Sub ELEVEstg()
Fml_Eleve.Show
End Sub
ANNEXE 2
Algorithme TVA_A_DECAISSER
Variable TVACollectée : Réel
Variable TVADéductibleABS : Réel
Variable TVADéductibleImmob : Réel
Variable TVADécaisser : Réel
Début
| Afficher ("Saisir la TVA collectée sur les ventes :")
| Saisir (TVACollectée)
| Afficher ("Saisir la TVA déductible sur les achats de biens et services :")
| Saisir (TVADéductibleABS)
| Afficher ("Saisir la TVA déductible sur les immobilisations :")
| Saisir (TVADéductibleImmob)
| TVADécaisser TVACollectée – (TVADéductibleABS + TVADéductibleImmob)
| Afficher ("La TVA à décaisser est de : ",TVADécaisser, " € ")
Fin
AlgoSeuilRentabilite
Variable CAffaires : Réel
Variable CVariable : Réel
Variable CFixe : Réel
Variable MCV : Réel
Variable TMCV : Réel
Variable RESULTAT: Réel
Variable SR : Réel
Variable PM : Réel
Début
| Afficher ("Saisir le montant du Chiffre d'affaires HT : ")
| Saisir (CAffaires)
| Afficher ("Saisir le montant des Charges variables : ")
| Saisir (CVariable)
| Afficher ("Saisir le montant des Charges fixes : ")
| Saisir (CFixe)
| MCV CAffaires - CVariable
| TMCV MCV / CAffaires
| RESULTAT MCV - CF
| SR CF / TMCV
| Afficher ("La seuil de rentabilité est de :", SR, "euros")
|SI CAffaires > SR
|Alors PM SR/ CAffaires * 360
© Groupe Eyrolles
For I = 1 To .[Link]
Total = Total + Numerique(.ListItems(I).ListSubItems(4))
Next I
© Groupe Eyrolles
End With
'Traitement du total
Lab_Total.Caption = Format(Total, "#,##0.00 €") ' Total TTC
MontantTVA = Total * 19.6 / 100
MontantTTC = Total + MontantTVA
Lab_TVA.Caption = Format(MontantTVA, "#,##0.00 €")
Listview ListView1
© Groupe Eyrolles
.../...
Montant
Code VBA
Sub TVA()
'Déclaration des variables
Dim Vente As Single, Achat As Single, Immob As Single
Dim report_credit As Single, TVACollectee As Single, TVADeductibleABS As Single, TVADeductibleImmob As
Single, TVADecaisser As Single
'Saisie des variables
Vente = InputBox("Saisir le montant des ventes HT du mois :", "Ventes HT")
Achat = InputBox("Saisir le montant des achats HT du mois :", "Achats HT")
Immob = InputBox("Saisir le montant des acquisitions d'immobilisations HT du mois :", "Immobilisations
HT")
report_credit = InputBox("Saisir le crédit de TVA du mois précédent :", "Report crédit de TVA")
'Traitement des variables
Vente = Round(Vente, 0)
Achat = Round(Achat, 0)
Immob = Round(Immob, 0)
TVACollectee = Round(Vente * 0.196, 0)
TVADeductibleABS = Round(Achat * 0.196, 0)
TVADeductibleImmob = Round(Immob * 0.196, 0)
TVADecaisser = TVACollectee - TVADeductibleABS - TVADeductibleImmob - report_credit
'Affichage des résultats
If TVADecaisser > 0 Then
MsgBox ("La TVA à décaisser est de " & TVADecaisser & " € ")
Else
MsgBox ("La crédit de TVA est de " & -(TVADecaisser) & " € ")
End If
End Sub
Cellule Formule
F26 =SOMME(F17:F25)
F27 =F26*E27
F28 =F26+F27
Propriété Propriété
Contrôle Outils
Name Caption
.../...
Code VBA
Option Explicit
'Déclaration des variables
Dim ListProduit As Integer
Dim DerLigne As Integer
Dim PlageList As String
Dim Ligne As Integer
Private Sub Com_Ajouter_Click()
'Ajouter ligne suivante
Ligne = Sheets("Facture").Range("B24").End(xlUp).Row + 1
With Sheets("Facture")
.Range("B" & Ligne) = LabelCode
.Range("C" & Ligne) = ListBox1
.Range("D" & Ligne) = TextBoxQuantite
.Range("E" & Ligne) = Format(LabelPrixUnit, 0#)
.Range("F" & Ligne) = Format(LabelPrixTotal, 0#)
End With
'Récupération des données de la boîte de dialogue
Nom = BD_FACTURE.Nom
Adresse = BD_FACTURE.Adresse
CPostal = BD_FACTURE.CPostal
'Entrée des données du client dans la facture
Sheets("Facture").Select
Range("D7").Value = Nom
Range("D8").Value = Adresse
Range("D9").Value = CPostal
[Link]
Sheets("Facture").Range("E12") = "le " & Format(Now, "DD/MM/YYYY")
End Sub
Module 1
Sub bdfact()
BD_FACTURE.Show
End Sub
Sub Efface()
Sheets("Facture").Range("B17:F25").ClearContents
Sheets("Facture").Range("D7:D9").ClearContents
End Sub
© Groupe Eyrolles
Code VBA
Sub AmortL()
'Variables des données
Dim Annee, Durée As Integer
Dim Taux As Single
Dim VO, AMORT, VNC, MontantAmort As Currency
Dim Ligne As String 'Cette variable va afficher le plan d'amortissement
VO = InputBox("Saisissez la base d'amortissement", "Plan d'amortissement linéaire")
Durée = InputBox("Saisissez la durée d'amortissement", "Plan d'amortissement linéaire")
'Affiche les titres du plan d’amortissement
Ligne = "Année" & vbTab & " Base " & vbTab & vbTab & " Annuité " & vbTab & vbTab & " Valeur NC " &
vbCrLf
Code VBA
Option Explicit
Private Sub Cmd_Calculer_Click()
'Déclaration des variables
Dim tabConso(10) As Double
Dim tabAnnuite(10) As Double
Dim tabCumul(10) As Double
Dim nbreMaxLigne, duree As Integer
Const nbreMaxColonne As Integer = 6
Dim baseAmortissable, totalConso As Double
Dim annee As Variant
Dim indiceLigne, indiceColonne, indice As Integer
'Nombre de colonnes du tableau d’amortissement non linéaire
[Link] = nbreMaxColonne
[Link] = "1,5 cm; 2 cm ; 3,5 cm ; 3,5 cm ; 4 cm"
[Link]
nbreMaxLigne = GetDureeUtilisation()
'Date système
annee = Year(Date)
'Boucle de traitement
For indiceLigne = 0 To nbreMaxLigne
If indiceLigne = nbreMaxLigne Then
[Link] "TOTAL"
Else
[Link] (annee)
End If
annee = annee + 1
Next indiceLigne
baseAmortissable = GetValeurTextBox("tbBaseAmortissable")
indiceColonne = 2
For indiceLigne = 0 To (nbreMaxLigne - 1)
[Link](indiceLigne, indiceColonne) = baseAmortissable
Next indiceLigne
totalConso = GetValeurTextBox("tbTotalConso")
indice = 0
For indiceLigne = 0 To (nbreMaxLigne - 1)
tabAnnuite(indice) = CalculerAnnuite(tabConso(indice), totalConso, baseAmortissable)
indice = indice + 1
Next indiceLigne
indice = 0
indiceColonne = 3
For indiceLigne = 0 To nbreMaxLigne
If indiceLigne = nbreMaxLigne Then
[Link](indiceLigne, indiceColonne) = Format(baseAmortissable, "####0.00")
Else
[Link](indiceLigne, indiceColonne) = Format(tabAnnuite(indice),
"####0.00")
indice = indice + 1
End If
Next indiceLigne
indice = 0
For indiceLigne = 0 To (nbreMaxLigne - 1)
If indice = 0 Then
tabCumul(indice) = tabAnnuite(indice)
© Groupe Eyrolles
indiceColonne = 4
indice = 0
For indiceLigne = 0 To (nbreMaxLigne - 1)
[Link](indiceLigne, indiceColonne) = Format(tabCumul(indice), "####0.00")
indice = indice + 1
Next indiceLigne
indiceColonne = 5
indice = 0
For indiceLigne = 0 To (nbreMaxLigne - 1)
[Link](indiceLigne, indiceColonne) = Format(baseAmortissable -
tabCumul(indice), "####0.00")
indice = indice + 1
Next indiceLigne
End Sub
'Quitter l’application
Private Sub CmdQuitter_Click()
End
End Sub
indice = 1
[Link]
nbreMaxTB = GetDureeUtilisation()
End Sub
nbreMaxTB = GetDureeUtilisation()
nbreIteration = 1
[Link] = 0
Do While nbreIteration <= nbreMaxTB
[Link] = GetValeurTextBox("tbConso" & nbreIteration) + [Link]
nbreIteration = nbreIteration + 1
Loop
End Sub
End Select
End Sub
nbreMaxTB = GetDureeUtilisation()
nbreIteration = 1
[Link] = 0
Do While nbreIteration <= nbreMaxTB
[Link] = GetValeurTextBox("tbConso" & nbreIteration) + [Link]
nbreIteration = nbreIteration + 1
Loop
End Sub
nbreMaxTB = GetDureeUtilisation()
nbreIteration = 1
[Link] = 0
Do While nbreIteration <= nbreMaxTB
[Link] = GetValeurTextBox("tbConso" & nbreIteration) + [Link]
nbreIteration = nbreIteration + 1
Loop
End Sub
nbreMaxTB = GetDureeUtilisation()
nbreIteration = 1
[Link] = 0
Do While nbreIteration <= nbreMaxTB
[Link] = GetValeurTextBox("tbConso" & nbreIteration) + [Link]
nbreIteration = nbreIteration + 1
Loop
End Sub
nbreMaxTB = GetDureeUtilisation()
nbreIteration = 1
[Link] = 0
Do While nbreIteration <= nbreMaxTB
[Link] = GetValeurTextBox("tbConso" & nbreIteration) + [Link]
nbreIteration = nbreIteration + 1
Loop
End Sub
nbreMaxTB = GetDureeUtilisation()
nbreIteration = 1
[Link] = 0
Do While nbreIteration <= nbreMaxTB
[Link] = GetValeurTextBox("tbConso" & nbreIteration) + [Link]
nbreIteration = nbreIteration + 1
Loop
End Sub
nbreMaxTB = GetDureeUtilisation()
nbreIteration = 1
[Link] = 0
Do While nbreIteration <= nbreMaxTB
[Link] = GetValeurTextBox("tbConso" & nbreIteration) + [Link]
nbreIteration = nbreIteration + 1
Loop
End Sub
nbreIteration = 1
[Link] = 0
Do While nbreIteration <= nbreMaxTB
[Link] = GetValeurTextBox("tbConso" & nbreIteration) + [Link]
nbreIteration = nbreIteration + 1
Loop
End Sub
nbreMaxTB = GetDureeUtilisation()
nbreIteration = 1
[Link] = 0
Do While nbreIteration <= nbreMaxTB
[Link] = GetValeurTextBox("tbConso" & nbreIteration) + [Link]
nbreIteration = nbreIteration + 1
Loop
End Sub
nbreMaxTB = GetDureeUtilisation()
nbreIteration = 1
[Link] = 0
Do While nbreIteration <= nbreMaxTB
© Groupe Eyrolles
End Sub
End Select
End Sub
duree = GetDureeUtilisation()
End Sub
End Sub
Private Sub tbValeurResiduelle_KeyPress(ByVal KeyAscii As [Link])
End Select
End Sub
GetValeurTextBox = Controls(NomTextBox)
End Function
© Groupe Eyrolles
Controls(NomTextBox) = valeurInitialisation
End Sub
Private Function CalculerAnnuite(ByVal valeurTextBox As Double, ByVal Total As Double, ByVal BaseAmort
As Double) As Double
End Function
End Function
Module 1
'Ouverture de la boîte
Sub AmortNonLineaire()
[Link]
End Sub
ANNEXE 2
ANNEXE 1
Maquette
ANNEXE 3
Listview ListView1
Code VBA
Private Sub CB_Calculer_Click()
'Déclaration des variables
Dim VO As Double
Dim Duree As Integer
Dim mois As Integer
Dim jour As Integer
Dim Prorata As Double
Dim TauxLinéaire As Double
Dim CoefProrata_Temporis As Double
Dim Amort As Double
With .ColumnHeaders
.Clear
.Add , , "Année", 80
.Add , , "Base HT", 80
.Add , , "Amortissement", 80
.Add , , "Cumul", 80
.Add , , "VNC", 80
End With
For i = 8 To Sheets("Linéaire").Range("A65536").End(xlUp).Row
.[Link] , , Sheets("Linéaire").Cells(i, 1)
For k = 2 To 5
.ListItems(.[Link]).[Link] , , Format(Sheets("Linéaire").Cells(i, k), "# ### ##0.00")
Next
Next
End With
End Sub
ANNEXE 1
Maquette
ANNEXE 3
Le tableau de synthèse des contrôles de l’interface graphique
PLAN D'AMORTISSEMENT
Formulaire (UserForm) FM_Degressif
DEGRESSIF
Listview ListView1
Code VBA
Private Sub CB_Calculer_Click()
'Déclaration des variables
Dim VO As Double
Dim CoefDegressif As Double
Dim Duree As Integer
Dim Mois As Integer
Dim Prorata As Double
Dim TauxDegressif As Double
Dim CoefProrata_Temporis As Double
Dim TauxLineaire As Double
Dim Amort As Double
Dim Tauxlineaire1 As Double
Cells(8, 1) = Year(Range("B5"))
Cells(8, 2) = VO
Cells(8, 3) = VO * CoefProrata_Temporis
Cells(8, 4) = VO * CoefProrata_Temporis
Cells(8, 5) = VO - Cells(8, 4)
Range("B6") = TauxLineaire
Range("D6") = TauxDegressif
For j = i To Duree
Cells(7 + j, 1) = Year(Range("B5")) + j - 1
Cells(7 + j, 2) = Cells(7 + j - 1, 5)
Cells(7 + j, 3) = Amort
Cells(7 + j, 4) = Cells(7 + j - 1, 4) + Cells(7 + j, 3)
Cells(7 + j, 5) = VO - Cells(7 + j, 4)
© Groupe Eyrolles
Next j
Else
rep = MsgBox("La durée doit être supérieure à 2 ans et inférieure ou égale à 15 ans", vbOKOnly)
End If
Lab_TauxLDé[Link] = Format(TauxDegressif, "#,##0.00" & "%")
Module 1
Sub Degressif()
FM_Degressif.Show
End Sub
© Groupe Eyrolles
CELLULE FORMULE
B13 =B3*1/12
C13 =(B4*1/6)-B13
D13 =B4*1/12
E13 =B4*1/12
F13 =B5*1/3-SOMME(B13:E13)
© Groupe Eyrolles
Résultat fiscal N – 2
Résultat fiscal N – 1
Résultat fiscal N
Code VBA
Sub IMPOT()
Dim RFN2 As Single, RFN1 As Single, RFN As Single
Dim Acompte1 As Single, Acompte2 As Single, Acompte3 As Single, Acompte4 As Single, Solde As Single
RFN2 = Round(RFN2, 0)
RFN1 = Round(RFN1, 0)
RFN = Round(RFN, 0)
Acompte1 = Round(RFN2 * 1 / 12, 0)
Acompte2 = Round(RFN1 * 1 / 6 - Acompte1, 0)
Acompte3 = Round(RFN1 * 1 / 12, 0)
Acompte4 = Round(RFN1 * 1 / 12, 0)
Solde = Round(((RFN * 1 / 3) - (Acompte1 + Acompte2 + Acompte3 + Acompte4)), 0)
MsgBox ("L'Acompte 1 est de " & Acompte1 & " € ")
MsgBox ("L'Acompte 2 est de " & Acompte2 & " € ")
MsgBox ("L'Acompte 3 est de " & Acompte3 & " € ")
MsgBox ("L'Acompte 4 est de " & Acompte4 & " € ")
MsgBox ("La Solde est de " & Solde & " € ")
End Sub
Code VBA
Private Sub Cmd_Calculer_Click()
Dim RFN2 As Single
Dim RFN1 As Single
Dim RFN As Single
Dim Acompte1 As Single
Dim Acompte2 As Single
Dim Acompte3 As Single
Dim Acompte4 As Single
Dim Solde As Single
RFN2 = [Link]
RFN1 = [Link]
RFN = [Link]
Acompte1 = RFN2 * 1 / 12
Acompte2 = RFN1 * 1 / 6 - Acompte1
Acompte3 = RFN1 * 1 / 12
Acompte4 = RFN1 * 1 / 12
Solde = ((RFN * 1 / 3) - (Acompte1 + Acompte2 + Acompte3 + Acompte4))
Label_Acompte1.Caption = [Link](Acompte1, 0) & " € "
Label_Acompte2.Caption = [Link](Acompte2, 0) & " € "
Label_Acompte3.Caption = [Link](Acompte3, 0) & " € "
Label_Acompte4.Caption = [Link](Acompte4, 0) & " € "
Label_Solde.Caption = [Link](Solde, 0) & " € "
Range("B3") = FormatNumber(RFN2, 0)
Range("B4") = FormatNumber(RFN1, 0)
Range("B5") = FormatNumber(RFN, 0)
Range("B13") = FormatNumber(Acompte1, 0)
Range("C13") = FormatNumber(Acompte2, 0)
Range("D13") = FormatNumber(Acompte3, 0)
Range("E13") = FormatNumber(Acompte4, 0)
Range("F13") = FormatNumber(Solde, 0)
End Sub
ANNEXE 1
Maquette
ANNEXE 2
E11 =SI(B13>0;B13;0) Si le report à nouveau N-1 >0 alors report à nouveau N-1 ; sinon rien.
E12 =E8-E9-E10+E11 Bénéfice distribuable = résultat de l’exercice N – dotation à la réserve légale – dotation
réserve statutaire + report à nouveau N-1 .
E13 =B9*B16 Intérêt statutaire = capital x 6 %
E15 =E12-E13-E14 Superdividende = bénéfice distribuable – intérêt statutaire – dotation réserve facultative
E16 =E12-E14-E21 Report à nouveau N= bénéfice distribuable – dotation réserve facultative – dividende total.
E19 =(E13+E15)/B10 Dividende théorique /Nombre actions = (intérêt statutaire + superdividende)/ nombre d'actions
E20 =[Link](E19;0) Dividende /Nombre actions = arrondi à l’euro inférieur dividende théorique
ANNEXE 2
Propriété Propriété
Contrôle Outils
Name Caption
Code VBA
Private Sub Cb_Calculer_Click()
'Variables de travail
Const tauxMaxReserve As Double = 0.1
Const tauxRLegale As Double = 0.05
© Groupe Eyrolles
'Récupération de la valeur des textes box et affectation des valeurs aux variables de travail
capital = Txt_Capital.Value
resultat = Txt_Resultat.Value
reserveLegale = Txt_RLegale.Value
reportDebiteurN_1 = Txt_ReportDebiteur.Value
reportCrediteurN_1 = Txt_ReportCrediteur.Value
Dividende = Txt_Dividendes.Value
dotationRFacultative = Txt_RFacultative.Value
Module 1
Sub AffectBenefice()
Fm_AffectationResultat.Show
End Sub
La société Paranati doit réaliser au moins un chiffre d’affaires critique de 1 405 509 €, soit vendre 56 220 produits au
minimum pour réaliser un résultat égal à zéro, au-delà de ce chiffre d’affaires critique, elle devient bénéficiaire. La date du
seuil de rentabilité sera atteinte le 23 juillet N. La société Paranati peut perdre 43,78 % de son chiffre d’affaires sans devenir
déficitaire. Cette marge de sécurité est satisfaisante.
Le levier d'exploitation indique la réactivité du résultat face à une variation du chiffre d’affaires. Le levier d'exploitation
mesure la sensibilité du résultat à la variation du chiffre d’affaires. Dans notre application, une variation de 1 % du chiffre
d’affaires provoque une variation de 2,28 % du résultat. On peut considérer que cette variation est modérée et que le risque
d’exploitation est modéré.
Cellule Formule
D5 =C5*E5 Recopie vers le bas jusqu’à D11
F5 =C5*G5 Recopie vers le bas jusqu’à F11
C12 =SOMME(C5:C11) Recopie vers la droite jusqu’à D12 et F12
C16 =G17*G18
C17 =D12
C18 =C16-C17
C19 =F12
C20 =C18-C19
C24 =C19/D18
C25 =C24/G18
C26 =(12*C24)/C16
© Groupe Eyrolles
C27 =(C16-C24)/C16
C28 =1/C27
Code VBA
'==== Tableau de variabilité des charges et seuil de rentabilité ====
Option Explicit
'Déclaration des variables
Dim Qte As Integer
Dim PVU As Double
Dim CAHT As Double
Dim CV As Double
Dim CF As Double
Dim MCV As Double
Dim TxMCV As Double
Dim TxResultat As Double
Dim SRV As Double
Dim SRQ As Double
Dim RESULTAT As Double
Dim PM As Double
Dim MS As Double
Dim IndiceS As Double
Dim LevierE As Double
End
End Sub
Sub SeuilRentabilite()
Fml_VARIABILITE.Show
End Sub
Propriété Propriété
Contrôle Outils
Name Caption
Exercice 1 : résolution sur tableur EXCEL d’un CUMP après chaque entrée ••
Cellule Formule
Cellule Formule
E5 =SI(C5>0;C5*D5;"") recopie jusqu’à E15
G6 =SI(F6>0;$D$16;"") recopie jusqu’à G15
H6 =SI(F6="";"";F6*G6) recopie jusqu’à H15
I5 =C5
I6 =SI(ESTVIDE(C6);SI(ESTVIDE(F6);"";I5-F6);I5+C6) Recopie jusqu’à I15
J5 =D5
J6 =SI(A6="";"";$D$16) recopie jusqu’à J15
K5 =I5*J5
K6 =SI(A6="";"";I6*J6) recopie jusqu’à K15
Cellule Formule
E3 =SI(ESTVIDE(C3);0;C3*D3) recopie vers le bas jusqu’à E50
Code VBA
MODULE 1
Sub Calcul_PEPS_Clic()
'Déclaration des variables
Dim Tabstocks() As Long
Dim Qte As Integer
Dim i As Integer
Dim j As Integer
Dim Indice As Integer
Dim Montant As Long
'Traitement des données
© Groupe Eyrolles
Indice = 1
ReDim Tabstocks(1 To Calcul_lot(), 1 To 3)
For i = 1 To Calcul_lot()
Tabstocks(i, 1) = -1
Tabstocks(i, 2) = -1
Tabstocks(i, 3) = -1
Next i
Tabstocks(Indice, 1) = Range("C" & 3).Value
Tabstocks(Indice, 2) = Range("D" & 3).Value
Tabstocks(Indice, 3) = Range("E" & 3).Value
Range("I" & 3).Value = Range("C" & 3).Value
Range("J" & 3).Value = Range("D" & 3).Value
Range("K" & 3).Value = Range("E" & 3).Value
i = 4
Range("A3:K3").Borders(xlEdgeTop).LineStyle = xlContinuous
Range("A3:K3").Borders(xlEdgeTop).ColorIndex = 0
Range("A3:K3").Borders(xlEdgeTop).Weight = xlThin
While Range("A" & i).Value
Range("A" & i & ":K" & i).Borders(xlEdgeTop).LineStyle = xlContinuous
Range("A" & i & ":K" & i).Borders(xlEdgeTop).ColorIndex = 0
Range("A" & i & ":K" & i).Borders(xlEdgeTop).Weight = xlThin
If Range("C" & i).Value Then
Indice = Indice + 1
Tabstocks(Indice, 1) = Range("C" & i).Value
Tabstocks(Indice, 2) = Range("D" & i).Value
Tabstocks(Indice, 3) = Range("E" & i).Value
End If
If Range("F" & i).Value Then
Qte = Range("F" & i).Value
Montant = 0
For j = 1 To Indice
If Tabstocks(j, 1) > Qte Then
Tabstocks(j, 1) = Tabstocks(j, 1) - Qte
Tabstocks(j, 3) = Tabstocks(j, 3) - Qte * Tabstocks(j, 2)
Montant = Montant + Qte * Tabstocks(j, 2)
Range("H" & i).Value = Montant
Range("G" & i).Value = Montant / Range("F" & i).Value
Qte = 0
Else
Qte = Qte - Tabstocks(j, 1)
Montant = Montant + Tabstocks(j, 1) * Tabstocks(j, 2)
Tabstocks(j, 1) = 0
Tabstocks(j, 3) = 0
End If
Next j
End If
For j = 1 To Indice
If j > 1 Then
i = i + 1
Range("A" & i).[Link]
End If
Range("I" & i).Value = Tabstocks(j, 1)
Range("J" & i).Value = Tabstocks(j, 2)
Range("K" & i).Value = Tabstocks(j, 3)
Next j
i = i + 1
Wend
End Sub
Private Function Calcul_lot()
Dim Lot As Integer
Dim i As Integer
Lot = 0
For i = 3 To 100
If Range("C" & i).Value Then
Lot = Lot + 1
End If
Next i
Calcul_lot = Lot
End Function
MODULE 2
Sub Reset_Clic()
'Déclaration de la variable
Dim i As Long
© Groupe Eyrolles
'Réinitialisation
i = 3
While Range("J" & i).Value
Range("A" & i & ":K" & i).Borders(xlEdgeTop).LineStyle = xlNone
If Range("A" & i).Value Then
Range("G" & i).Value = ""
Propriété Propriété
Contrôle Outils
Name Caption
Listview ListView1
© Groupe Eyrolles
.../...
Propriété Propriété
Contrôle Outils
Name Caption
Code VBA
Option Explicit
indice = 3
End Sub
End Sub
Case 58 To 126
KeyAscii = 0
End Select
End Sub
KeyAscii = 0
End Select
End Sub
indice = 6
End Sub
End Sub
KeyAscii = 0
End Select
End Sub
End Sub
With [Link]
.Clear
.Add , , "NumLigne", 0
.Add , , "Date", 55
.Add , , "Libellé", 85, lvwColumnLeft
.Add , , "Quantité", 60, lvwColumnCenter
.Add , , "Coût unitaire", 60, lvwColumnCenter
.Add , , "Montant", 60, lvwColumnCenter
[Link] = True
[Link] = lvwReport
[Link] = True
[Link] = 1
End Sub
Call SupprimerListeItems
End Sub
nbItem = [Link]
For i = 1 To nbItem
[Link] 1
Next i
End Sub
Txt_Date = ""
Txt_Libelle = ""
Txt_Qte = ""
Txt_CoutUnitaire = ""
Txt_Montant = ""
Txt_Qte1 = ""
Txt_CoutUnitaire1 = ""
Txt_Montant1 = ""
Txt_Qte2 = ""
Txt_CoutUnitaire2 = ""
Txt_Montant2 = ""
End Sub
Private Sub MouvementerStock(ByRef ListView1 As ListItem, ByRef DateMvt As Date, ByRef LibelleMvt As
String, ByRef QuantiteMvt As Double, ByRef puMvt As Double, ByVal indice As Integer)
End Sub
End Sub
Private Sub Cmd_Supprimer_Click()
[Link] ([Link])
End Sub
© Groupe Eyrolles
Module 1
Sub StocksCUMP()
Fm_CUMP.Show
End Sub
ANNEXE 1
Maquette
ANNEXE 2
Cellule Formule
B12 =SOMME(C12:I12)
C13 =C12
E13 =$C$13*E5 recopie jusqu’à I13
D14 =D12
C15 =C12-C13
D15 =D12-D14
E15 =SOMME(E12:E14) recopie jusqu’à I15
© Groupe Eyrolles
Formule de la CAF
© Groupe Eyrolles
Commentez.
La trésorerie nette est négative car le FRNG est inférieur au BFR. Cela signifie que l’entreprise ne dispose pas de disponibilités
suffisantes. Elle doit donc avoir recours aux découverts bancaires pour assurer son équilibre financier. Le FRNG est positif
mais insuffisant pour couvrir le BFR. Les ressources stables sont donc trop faibles. Le BFR a augmenté ce qui peut provenir
soit de l’augmentation des créances clients, soit des stocks. Il faudrait envisager de réduire le délai de paiement accordé à
certains clients (durée moyenne 52 jours), réduire aussi le niveau des stocks (durée de stockage 80 jours), soit augmenter le
délai fournisseurs (durée moyenne 46 jours). Le ratio de financement des immobilisations (1,36) est supérieur à 1, l'entreprise
finance ses investissements par des ressources stables. L'endettement est assez faible, le ratio d'endettement est de 0,19, ceci
signifie que les emprunts représentent 19 % des ressources propres. L’entreprise peut s’endetter à long terme pour augmenter
ses ressources stables, car elles sont moins coûteuses que les découverts bancaires.
© Groupe Eyrolles
Bilan fonctionnel
© Groupe Eyrolles
Programme VBA
Option Explicit
Sub VALEUR_ACTUELLE()
Dim Capital As Single
Dim Taux As Single
Dim Duree As Integer
Dim VA As Single
Capital = InputBox("Saisir le Capital:")
Taux = InputBox("Saisir le taux:")
Duree = InputBox("Saisir la durée:")
VA = round((Capital * (1 + Taux) ^ -Duree),2)
MsgBox ("La Valeur actuelle est de :" & VA & " € ")
End Sub
© Groupe Eyrolles
Module 1 VBA
Sub CALCUL()
Form_Financier.Show
End Sub
Code VBA
Private Sub Cmd_Fermer_Click()
Form_Financier.Hide
Unload Form_Financier
End Sub
ANNEXE 2
Le tableau de synthèse des contrôles
Propriété Propriété
Contrôle Outils
Name Caption
Module VBA
Sub ANNUITES()
Formulaire_Annuité.Show
End Sub
ANNEXE 2
Propriété
Contrôle Outils Propriété Caption
Name
Formulaire (UserForm) Formulaire_Annuité Coût total d'un emprunt indivis
01/03/2010
512 Banque 50 000
164 Emprunt 50 000
Selon le tableau d’emprunt
Le remboursement de l’emprunt
01/03/2010
164 Emprunt 9 048,74
661 Charges d’intérêts 2 500,00
512 Banque 11 548,74
Selon le tableau d’emprunt
© Groupe Eyrolles
La régularisation de l’emprunt
31/12/2010
661 Charges d’intérêts 2 083,33
1688 Intérêts courus 2 083,33
Selon le tableau d’emprunt
10
2 500 × --------- = 2 083,33
212
Code VBA
Sub Emprunt()
'Déclaration des variables
Dim indice, Annee, Durée As Integer
Dim Taux As Single
Dim CapitalRestant, Interet, Amort, Capital, annuite As Currency
Dim Ligne As Variant
'Traitement des données
Capital = InputBox("Saisissez le montant de l'emprunt", "Emprunt indivis")
Durée = InputBox("Saisissez la durée de l'emprunt", "Emprunt indivis")
Taux = InputBox("Saisissez le taux d'intérêt 0,07 pour 7%", "Emprunt indivis")
annuite = Format(Capital * Taux / (1 - (1 + Taux) ^ (-Durée)), "Currency")
CapitalRestant = Format(Capital, "Currency")
Ligne = "Année" & vbTab & "Capital restant dû" & vbTab & " Intérêt " & vbTab & vbTab &
"Amortissement" & vbTab & "Annuité" & vbCrLf
'Boucle des données
For indice = 1 To Durée
Interet = Format((CapitalRestant * Taux), "Currency")
Amort = Format((annuite - Interet), "Currency")
Ligne = Ligne & vbCrLf & indice & vbTab & CapitalRestant & vbTab & Interet & vbTab & Amort & vbTab
& annuite
CapitalRestant = Format((CapitalRestant - Amort), "Currency")
Annee = Annee + 1
Next indice
'Affichage du tableau de remboursement
reponse = MsgBox(Ligne, , "Emprunt indivis")
End Sub
ANNEXE 1
ANNEXE 2
Propriété
Contrôle Outils Propriété Caption
Name
Code vba
Private Sub CmdCalculer_Click()
'Variables de travail
Dim indice, numAnnee As Integer
Dim amortissement, annuite, CapitalDu, interet, cumulInteret As Double
Dim capitalAmorti, cumulCapitalAmorti As Double
Dim ligneEmprunt As Variant
Next indice
'Affichage du général
ligneEmprunt =
"======================================================================================================
============="
[Link] (ligneEmprunt)
ligneEmprunt = "TOTAL GENERAL" + vbTab + vbTab + vbTab + Format(cumulInteret, "### ##0.00") + vbTab
+ vbTab + vbTab + Format(cumulCapitalAmorti, "## ### ##0.00")
[Link] (ligneEmprunt)
ligneEmprunt =
"======================================================================================================
============="
[Link] (ligneEmprunt)
'Affichage des résultats
[Link] = Format(annuite, "#### ##0.00 €")
[Link] = Format(cumulInteret, "#### ##0.00 €")
[Link] = Format(cumulInteret + cumulCapitalAmorti, "### #### ##0.00 €")
End Sub
Module 1
Sub EmpruntC()
[Link]
End Sub
ANNEXE 1
Interface graphique utilisateur
ANNEXE 2
Tableau des contrôles et leurs propriétés
Propriété
Contrôle Outils Propriété Caption
Name
Code VBA
Private Sub CmdCalculer_Click()
'Variables de travail
Dim indice, numAnnee As Integer
Dim amortissement, annuite, CapitalDu, interet, cumulInteret As Double
Dim capitalAmorti, cumulCapitalAmorti, cumulPaye As Double
Dim ligneEmprunt As Variant
Next indice
'Affichage du général
ligneEmprunt =
"======================================================================================================
============="
[Link] (ligneEmprunt)
ligneEmprunt = "TOTAL " + vbTab + vbTab + vbTab + vbTab + vbTab + Format(cumulInteret, "### ##0.00")
+ vbTab + vbTab + Format(cumulCapitalAmorti, "## ### ##0.00")
[Link] (ligneEmprunt)
ligneEmprunt =
"======================================================================================================
============="
[Link] (ligneEmprunt)
'Affichage des résultats
[Link] = Format(amortissement, "#### ##0.00 €")
[Link] = Format(cumulInteret, "#### ##0.00 €")
[Link] = Format(cumulInteret + cumulCapitalAmorti, "### #### ##0.00 €")
© Groupe Eyrolles
End Sub
Propriété
Contrôle Outils Propriété Caption
Name
Code VBA
Option Explicit
'Déclaration des variables
Const Taux = 0.1
Dim MI As Single
Dim RNE1 As Single
Dim RNE2 As Single
Dim RNE3 As Single
Dim RNE4 As Single
Dim RNE5 As Single
Dim VResid As Single
Dim VAN As Single
Dim IProfit As Single
RNE5 = Txt_CAF5.Value
VResid = Txt_VR.Value
VAN = -MI + (RNE1 * (1 + Taux) ^ -1 + RNE2 * (1 + Taux) ^ -2 + RNE3 * (1 + Taux) ^ -3 + RNE4 * (1 + Taux)
^ -4 + RNE5 * (1 + Taux) ^ -5 + VResid * (1 + Taux) ^ -5)
IProfit = (VAN + MI) / MI
ANNEXE 2
Propriété
Contrôle Outils Propriété Caption Propriété FONT
Name
Code VBA
Private Function ValActualiser(ByVal taux As Double, ByVal Somme1 As Double, ByVal Somme2 As Double,
© Groupe Eyrolles
Code VBA
Option Explicit
Private Sub CB_Calculer_Click()
'Déclaration des variables
Dim nombreTB, indice As Integer
Dim tabTB(20), tabFNA(20) As Variant
Dim NomTB As String
Dim crCalculerVAN, crTailleTabFNA, crTailleTabTB As Double
Dim cr As Boolean
If TB_MtInvestissement.Value <= 0 Or TB_MtInvestissement.Value = "" Then
MsgBox ("Le Montant de l'Investissement est obligatoire.")
Exit Sub
End If
If TB_TxtActualisation.Value <= 0 Or TB_TxtActualisation.Value = "" Then
MsgBox ("Le Taux d'Actualisation est obligatoire.")
Exit Sub
End If
nombreTB = NombreVariable()
nombreTB = NombreVariable()
indice = 0
Do While nombreTB > 0
tabFNA(indice) = CalculerFluxActualises(tabTB, TB_TxtActualisation.Value, indice)
Call SetValeurTextBox(FZoneSaisie, "FNA" & (indice + 1), Format(tabFNA(indice), "## ###0.00"))
nombreTB = nombreTB - 1
indice = indice + 1
Loop
CB_DureeInvest.ListIndex = 0
Next NbSerie
End Sub
Private Function CalculerSommeFNA(ByRef TableauTB(), ByVal Taux As Double, ByVal TailleTab As Integer)
As Double
Dim indice As Integer
Dim cumulFlux As Double
Taux = 1 + (Taux / 100)
Do While indice <= TailleTab
cumulFlux = cumulFlux + TableauTB(indice) * Taux ^ -(indice + 1)
indice = indice + 1
© Groupe Eyrolles
Loop
CalculerSommeFNA = cumulFlux
End Function
Private Function CalculerVAN(ByVal Montant As Double, ByRef Tableau(), ByVal TailleTab As Integer) As
Double
Dim indice As Integer
Dim cumul As Double
cumul = -Montant
Do While indice <= TailleTab
cumul = cumul + Tableau(indice)
indice = indice + 1
Loop
CalculerVAN = cumul
End Function
Private Sub AjouterTextBox(ByRef SrceControle As Control, ByVal NomTextBox As String, ByVal width As
Integer, ByVal height As Integer, ByVal size As Integer, ByVal top As Integer, ByVal left As Integer,
ByVal locked As Boolean)
Dim objetTextBox As Object
Set objetTextBox = [Link]("[Link].1")
With objetTextBox
.Name = NomTextBox 'Définit le nom du Text_Box
.top = top 'Définit l'écart entre deux Text_Box dans le sens de la hauteur
.left = left 'Définit la distance entre le bord gauche de la fenêtre et le bord du conteneur
.width = width 'Définit la largeur de l'objet
.height = height 'Définit la hauteur de l'objet
.[Link] = size 'Définit la taille de la police des valeurs saisies
.Visible = True
.locked = locked
End With
End Sub
Private Sub AjouterLabel(ByRef SrceControle As Control, ByVal NomLabel As String, ByVal width As
Integer, ByVal height As Integer, ByVal size As Integer, ByVal top As Integer, ByVal left As Integer)
Dim objetLabel As Object
Set objetLabel = [Link]("[Link].1", True)
With objetLabel
.Caption = NomLabel
.top = top
.left = left
.width = width
.height = height
.[Link] = size
.Visible = True
.ForeColor = RGB(200, 255, 200)
End With
End Sub
Private Sub SetValeurTextBox(ByVal SrceControle As Control, ByVal NomTextBox As String, ByVal Valeur As
Double)
If RechercherControle(SrceControle, NomTextBox) = True Then
Controls(NomTextBox) = Valeur
End If
End Sub
Module 1
Sub MONT_INVEST()
Form_Investissement.Show
End Sub
ANNEXE 1
Maquette
∑ ni xi
Moyenne = -----------------
9 450
x = ------------- = 94,50
100
∑ ni
2
Variance =
∑ ni xi
------------------ – x
2 464 475 2
V ( x ) = ------------------ – 94,50 = 4 644,75
100
∑ ni
Écart type = V(x) σ = 4 644,75 = 68,15
Cellule Formule
C6 =D5 recopie vers le bas jusqu’à D8
G5 =(C5+D5)/2 recopie vers le bas jusqu’à G9
H5 =F5*G5 recopie vers le bas jusqu’à H9
I5 =G5-$I$15 recopie vers le bas jusqu’à I9
J5 =I5^2 recopie vers le bas jusqu’à J9
K5 =F5*J5 recopie vers le bas jusqu’à K9
F10 =SOMME(F5:F9) recopie vers le bas jusqu’à K10
I15 =H10/F10
I17 =K10/F10
© Groupe Eyrolles
I19 =RACINE(I17)
ANNEXE 1
Maquette
La classe modale se trouve dans la classe [1000,1200[ car 220 est le plus grand effectif de cette série statistique. La médiane se
situe dans la classe [1200,1400[.
Me = 1 200 + [(1 400 – 1 200) × (50 – 44) / (70 – 44)] = 1 246,15. La médiane est de 1 246 €.
∑ ni xi
Moyenne = -----------------
698 500
x = ------------------ = 1 397
500
∑ ni
La moyenne est de 1 397 €.
2
Variance =
∑ ni xi
------------------ – x
2 1 063 525 000 2
V ( x ) = --------------------------------- – 1 397 = 175 441
500
∑ ni
Écart type = V(x) σ = 175 441 = 418,86
L’étendue est de 3 000 – 1 000 = 2 000.
Cellule Formule
A4 =CONCATENER("[";B4;" ; ";C4;"[") recopie vers le bas jusqu’à A9.
D10 =SOMME(D4:D9)
E4 =(B4+C4)/2 recopie vers le bas jusqu’à E9.
F4 =D4*E4 recopie vers le bas jusqu’à F9.
F10 =SOMME(F4:F9)
G4 =D4/$D$10 recopie vers le bas jusqu’à G9.
G10 =SOMME(G4:G9).
H4 =G4 recopie vers le bas jusqu’à H9.
I4 =D4*E4^2 recopie vers le bas jusqu’à I9.
I10 =SOMME(I4:I9)
© Groupe Eyrolles
B13 =MAX(D4:D9)
B14 =G17+(G18-G17)/(G16-G15)*(H9/2-G15)
B15 =F10/D10
.../...
Cellule Formule
B16 =(I10/D10)-B15^2
B17 =RACINE(B16)
B18 =C9-B4
G14 =EQUIV(H9/2;H4:H9;H4:H9)
G15 =INDEX(H4:H9;G14)
G16 =INDEX(H4:H9;G14+1)
G17 =INDEX(C4:C9;G14)
G18 =INDEX(C4:C9;G14+1)
ANNEXE 1
Maquette
La classe modale se trouve dans l’intervalle [600,700[ car 200 est le plus grand effectif de cette série.
Moyenne : 506 000/800 = 632,5
Variance : V(x) = 341 600 000 – 632,5²/800 = 26 943,75
L’écart type : σ (x) = 164,15
L’étendue est de 1 000 – 300 = 700
2. Concevez une fonction personnalisée en VBA pour chaque indicateur statistique : le mode, la moyenne, la variance,
l’écart type et l’étendue.
End Function
Moyenne
Function MOYPOND(Centre_Classe As Variant, Effectifs As Variant) As Variant
s1 = [Link](Centre_Classe, Effectifs)
s2 = [Link](Effectifs)
MOYPOND = s1 / s2
End Function
Variance
Function VARPOND(Serie_xi As Variant, Serie_ni As Variant) As Double
With WorksheetFunction
s1 = [Link](Serie_xi, Serie_ni)
s2 = [Link](Serie_ni)
M = s1 / s2
Var = .SumProduct(Serie_xi, Serie_xi, Serie_ni) / .SumIf(Serie_xi, "<>", Serie_ni)
VARPOND = Var - M ^ 2
End With
End Function
Écart type
Function EcartType(Serie_xi As Variant, Serie_ni As Variant) As Variant
With WorksheetFunction
s1 = [Link](Serie_xi, Serie_ni)
s2 = [Link](Serie_ni)
Moy = s1 / s2
Var = .SumProduct(Serie_xi, Serie_xi, Serie_ni) / .SumIf(Serie_xi, "<>", Serie_ni)
VarP = Var - Moy ^ 2
'Affiche le résultat de l'écart-type
EcartType = Sqr(VarP)
End With
End Function
Étendue
Function Etendue(Classe As Variant) As Variant
Etendue = [Link](Classe) - [Link](Classe)
End Function
3. Établissez un tableau des formules.
Cellule Formule
G4 =(C4+D4)/2 Recopie vers le bas jusqu’à G10
H4 =F4*G4 Recopie vers le bas jusqu’à H10
I4 =F4/$F$11 Recopie vers le bas jusqu’à I10
J4 =I4
J5 =J4+I5 Recopie vers le bas jusqu’à J10
K4 =F4*G4^2 Recopie vers le bas jusqu’à K10
F11 =SOMME(F4:F10)
H11 =SOMME(H4:H10)
K11 =SOMME(K4:K10)
F14 =MAX(F4:F10)
F16 =MOYPOND(G4:G10;F4:F10)
F18 =VARPOND(G4:G10;F4:F10)
F20 =EcartType(G4:G10;F4:F10)
F22 =Etendue(C4:D10)
© Groupe Eyrolles
∑ ni xi
Moyenne = -----------------
222 000
x = ------------------ = 2 220
100
∑ ni
2
Variance =
∑ ni xi
------------------ – x
2 555 250 000 2
V ( x ) = ----------------------------- – 2 220 = 624 100
100
∑ ni
Écart type = V(x) σ = 624 100 = 790
Code VBA
Sub Clic()
'Déclaration des variables
total
centreclasse
nixi
frequence
nixi²
classemodale
mediane
moyenne
© Groupe Eyrolles
variance
ecarttype
etendue
End Sub
Sub centreclasse()
For i = 3 To 9
Range("G" & i).Value = (Range("C" & i) + Range("D" & i)) / 2
Next i
End Sub
Sub nixi()
Dim count As Long
For i = 3 To 9
Range("H" & i).Value = Range("G" & i) * Range("F" & i)
Next i
count = 0
For i = 3 To 9
count = count + Range("H" & i).Value
Next i
Range("H10").Value = count
End Sub
Sub total()
Dim count As Integer
count = 0
For i = 3 To 9
count = count + Range("F" & i).Value
Next i
Range("F10").Value = count
End Sub
Sub frequence()
Dim count As Long
For i = 3 To 9
Range("I" & i).Value = Round(Round(Range("F" & i) * 10000 / Range("F10"), 2) / 100, 4)
Next i
count = 0
For i = 3 To 9
count = count + Range("I" & i).Value * 100
Range("J" & i).Value = count / 100
Next i
End Sub
Sub nixi²()
Dim count As Long
For i = 3 To 9
Range("K" & i).Value = Range("G" & i) * Range("G" & i) * Range("F" & i)
Next i
count = 0
For i = 3 To 9
count = count + Range("K" & i).Value
Next i
Range("K10").Value = count
End Sub
Sub classemodale()
Dim count As Integer
count = 0
For i = 3 To 9
If count < Range("F" & i).Value Then
count = Range("F" & i).Value
End If
Next i
Range("F13").Value = count
End Sub
Sub mediane()
Dim count As Integer
Dim i As Integer
© Groupe Eyrolles
i = 3
count = 0
Do While count <= (Range("F10").Value / 2)
count = count + Range("F" & i).Value
i = i + 1
Loop
Range("F15").Value = Range("G" & i - 1).Value
End Sub
Sub moyenne()
Range("F17").Value = Round(Range("H10") / Range("F10"), 2)
End Sub
Sub variance()
Dim count As Long
count = 0
For i = 3 To 9
count = count + Range("F" & i) * ((Range("G" & i) - Range("F17")) * (Range("G" & i) -
Range("F17")))
Next i
count = count / Range("F10").Value
Range("F19").Value = count
End Sub
Sub ecarttype()
Range("F21").Value = Round(Sqr(Range("F19").Value), 2)
End Sub
Sub etendue()
Range("F23").Value = Range("D9").Value - Range("C3").Value
End Sub
Exercice 5 : statistique descriptive sous Excel VBA – cas d’une variable continue ••••
1. Complétez le tableau statistique en annexe 1 et calculer le mode, la médiane, la moyenne, la variance, l’écart type et
l’étendue.
Centre des
Nombre de salariés Fréquences cumulées
Années d'ancienneté xi classes [Link] Fréquences en % [Link]²
ni en %
xi
[ 0 3 [ 30 1,5 45 30,00% 30,00% 68
[ 3 6 [ 28 4,5 126 28,00% 58,00% 567
[ 6 9 [ 12 7,5 90 12,00% 70,00% 675
[ 9 12 [ 8 10,5 84 8,00% 78,00% 882
[ 12 15 [ 7 13,5 95 7,00% 85,00% 1 276
[ 15 18 [ 6 16,5 99 6,00% 91,00% 1 634
[ 18 21 [ 5 19,5 98 5,00% 96,00% 1 901
[ 21 24 [ 4 22,5 90 4,00% 100,00% 2 025
Total 100 726 9 027
La classe modale se trouve dans la classe [0,3[ car 30 est le plus grand effectif de cette série statistique. La médiane se situe
dans la classe [3,6[.
Me = 3 + [(6 – 3) × (50 – 30) / (58 – 30)] = 5,14. La médiane est de 5,14 années.
∑ ni xi
Moyenne = -----------------
726
x = -------- = 7,26
100
∑ ni
La moyenne est de 7,26 années d’ancienneté.
2
Variance =
∑ ni xi
------------------ – x
2 9 027 2
V ( x ) = ------------- – 7,26 = 37,56
100
∑ ni
© Groupe Eyrolles
nbIteration2 = 1
nbLigne = NombreVariable()
Do While nbIteration1 <= nbColonne
Do While nbIteration2 <= nbLigne
top = top + ecartTop
Call AjouterTextBox("TB_Variable" & indiceNom, width, height, Size, top, left, nbTextBox,
locked)
indiceNom = indiceNom + 1
nbIteration2 = nbIteration2 + 1
If nbIteration2 > nbLigne Then
top = 30
left = left + ecartLeft
End If
Loop
nbIteration2 = 1
nbIteration1 = nbIteration1 + 1
Select Case nbIteration1
Case 1 To 2
locked = False
Case 3 To 6
locked = True
End Select
Loop
End Sub
Private Sub AjouterTextBox(ByVal NomControle As String, ByVal width As Integer, ByVal height As Integer,
ByVal Size As Integer, ByVal top As Integer, ByVal left As Integer, ByVal nbTextBox As Integer, ByVal
locked As Boolean)
Dim objetTextBox As Control
Set objetTextBox = Fm_Statistique.[Link]("[Link].1")
With objetTextBox
.name = NomControle 'Définit le nom du Text_Box
.top = top 'Définit l'écart entre deux Text_Box dans le sens de la hauteur
.left = left 'Définit la distance entre le bord gauche de la fenêtre et le bord du conteneur
.width = width 'Définit la largeur de l'objet
.height = height 'Définit la hauteur de l'objet
.[Link] = Size 'Définit la taille de la police des valeurs saisies
.Visible = True
.locked = locked
End With
End Sub
i = i + 1
Next indice
'Calcul du centre de classe
i = 0
For indice = indice To nbVariable * 3
j = PositionCaractere(tabInterval(i), "-")
If j = 0 Then
Exit Sub
Else
bInfAlph = ExtraireGauche(tabInterval(i), j - 1)
taille = Len(tabInterval(i))
bSupAlph = ExtraireDroit(tabInterval(i), taille - j)
bInfNum = ConvertirDouble(bInfAlph)
tabBorneInf(i) = bInfNum
bSupNum = ConvertirDouble(bSupAlph)
tabBorneSup(i) = bSupNum
moyenne = Format((bInfNum + bSupNum) / 2, "### ##0.00")
tabValeurX(i) = moyenne
Call AfficherResultat("TB_Variable" & indice, moyenne)
End If
i = i + 1
Next indice
'X*Ni
i = 0
For indice = indice To nbVariable * 4
valeurTextboxXN = tabValeurX(i) * tabValeurN(i)
tabValeurXN(i) = valeurTextboxXN
Call AfficherResultat("TB_Variable" & indice, valeurTextboxXN)
sommeNX = sommeNX + valeurTextboxXN
i = i + 1
Next indice
'X^2*Ni
i = 0
For indice = indice To nbVariable * 5
valeurTextboxXXN = tabValeurX(i) ^ 2 * tabValeurN(i)
tabValeurXXN(i) = valeurTextboxXXN
Call AfficherResultat("TB_Variable" & indice, valeurTextboxXXN)
sommeNXX = sommeNXX + tabValeurXXN(i)
i = i + 1
Next indice
'Affichage du cumul de Ni
i = 0
sommeN = 0
For indice = indice To nbVariable * 6
sommeN = sommeN + tabValeurN(i)
nomTextBox = "TB_Variable" & indice
Call AfficherResultat("TB_Variable" & indice, sommeN)
i = i + 1
Next indice
'Affichage de la somme de Ni
Call AfficherResultat("TB_TotalNi", sommeN)
i = i + 1
Wend
BInf = tabBorneInf(i - 1)
BSup = tabBorneSup(i - 1)
cumulInf = cumul - tabValeurN(i - 1)
Private Function Mediane(ByVal BInf As Double, ByVal BSup As Double, ByVal FInf As Double, ByVal FSup As
Double, ByVal moyenne As Double)
Mediane = (moyenne * (BSup - BInf) + FInf * (BInf - BSup) + BInf * (FSup - FInf)) / (FSup - FInf)
End Function
© Groupe Eyrolles
Propriété
Contrôle Outils Propriété Caption
Name
Statistique descriptive à
Formulaire (UserForm) Fm_Statistique
une variable
Propriété
Contrôle Outils Propriété Caption
Name
Code VBA
Private Sub UserForm_Initialize()
Dim NbSerie As Single
For NbSerie = 4 To 16 Step 1
CB_NbreSerie.AddItem (NbSerie)
CB_NbreSerie.ListIndex = 0
Next NbSerie
End Sub
nbIteration1 = 1
nbIteration2 = 1
nbLigne = NombreVariable()
Do While nbIteration1 <= nbColonne
Do While nbIteration2 <= nbLigne
top = top + ecartTop
Call AjouterTextBox("TB_Variable" & indiceNom, width, height, Size, top, left, nbTextBox,
locked)
indiceNom = indiceNom + 1
nbIteration2 = nbIteration2 + 1
If nbIteration2 > nbLigne Then
top = 60
left = left + ecartLeft
End If
Loop
nbIteration2 = 1
nbIteration1 = nbIteration1 + 1
If nbIteration1 > 2 Then
locked = True
End If
Loop
End Sub
Private Sub AjouterTextBox(ByVal nomControle As String, ByVal width As Integer, ByVal height As Integer,
ByVal Size As Integer, ByVal top As Integer, ByVal left As Integer, ByVal nbTextBox As Integer, ByVal
locked As Boolean)
With objetTextBox
.name = nomControle 'Définit le nom du Text_Box
.top = top 'Définit l'écart entre deux Text_Box dans le sens de la hauteur
© Groupe Eyrolles
.left = left 'Definit la distance entre le bord gauche de la fenetre et le bord du conteneur
.width = width 'Définit la largeur de l'objet
.height = height 'Définit la hauteur de l'objet
.[Link] = Size 'Définit la taille de la police des valeurs saisies
.Visible = True
.locked = locked
End With
End Sub
[Link] = nbVariable + 1
[Link] = Format((penteD * [Link]) + constanteB, "###,##0.00")
'Afficher la droite Y
penteD = Format(penteD, "###,##0.00")
constanteB = Format(constanteB, "###,##0.00")
If constanteB >= 0 Then
nomLabel = "Y=" & penteD & "x+" & constanteB
Call AjouterLabel(nomLabel, 150, 15, 12, 20, 45)
Else
nomLabel = "Y=" & penteD & "x-" & constanteB
Call AjouterLabel(nomLabel, 150, 40, 12, 20, 45)
End If
End Sub
End Function
Private Sub AjouterLabel(ByVal nomLabel As String, ByVal width As Integer, ByVal height As Integer,
ByVal Size As Integer, ByVal top As Integer, ByVal left As Integer)
.ForeColor = RGB(250, 0, 0)
End With
End Sub
End Sub
Private Function NombreVariable() As Integer
NombreVariable = CB_NbreSerie.Value
End Function
End Function
End Function
Dim i As Integer
i = 1
GetNbreControl = i
End Function
Controls(NomTextBox) = valeur
End Sub
MODULE 1
Private Sub CB_Coefficient_Saisonnier_Click()
© Groupe Eyrolles
Fm_MoindresCarres.Show
End Sub
Testez votre modèle à l’aide de l’exemple ci-dessous.
ANNEXE 4
Évolution des ventes en dizaine de milliers d’euros au cours des douze dernières années
Années 1 2 3 4 5 6 7 8 9 10 11 12
Chiffre d’affaires 84 123 165 108 103 137 200 124 100 167 196 140
© Groupe Eyrolles
Code VBA
Private Sub BC_Calculer_Click()
'Déclaration des variables
Dim tabValeurX(16), tabValeurY(16) As Double
Dim NomTextBox, nomLabel As String
Dim rMoyenneX, rMoyenneY, rProduit, rCarre, ValeurTextBoxX, ValeurTextboxY As Double
Dim sommeXX, sommeYY, sommeXY, rVarianceX, rVarianceY, rSommeX, rSommeY, rCoefficientXY,
rCovarianceXY As Double
Dim indice, nbVariable, indiceAffich As Integer
Dim rDeterminerCoeffDroite, rDeterminerDroite As Double
Dim objetTxtBox As Control
nbVariable = NombreVariable()
'Calcul de la covariance XY
rCovarianceXY = Format(covariance(sommeXY, rMoyenneX, rMoyenneY), "### ### ##0.000")
Call AfficherResultat("TB_CovarianceXY", rCovarianceXY)
End Sub
i = i + 1
Next Control
End Sub
End Function
End Sub
TB_NbreSerie.Value = NbreVarDefaut
Call NbreVariable
End Sub
Private Sub DessinerText_Box(ByVal Width As Integer, ByVal Height As Integer, ByVal Size As Integer,
ByVal Top As Integer, ByVal Left As Integer, ByVal nbTextBox As Integer, ByVal locked As Boolean)
With objetTxtBox
.Tag = "TB_Variable" & indice 'Définit le nom du Text_Box
.Top = (Top * indice) + 40 'Définit l'écart entre deux Text_Box dans le sens de la hauteur
.Left = Left 'Definit la distance entre le bord gauche de la fenetre et le bord du conteneur
.Width = Width 'Definit la largeur de l'objet
.Height = Height 'Definit la hauteur de l'objet
.[Link] = Size 'Définit la taille de la police des valeurs saisies
.Visible = True
.locked = locked
End With
i = i + 1
Next indice
End Sub
Private Sub AjouterLabel(ByVal nomLabel As String, ByVal Width As Integer, ByVal Height As Integer,
ByVal Size As Integer, ByVal Top As Integer, ByVal Left As Integer)
.ForeColor = RGB(255, 0, 0)
End With
End Sub
NombreVariable = TB_NbreSerie.Value
End Function
End Function
End Function
Carre = ValeurTextBox ^ 2
End Function
End Function
End Function
End Function
Private Function covariance(ByVal sommeXY As Double, ByVal rMoyenneX As Double, ByVal rMoyenneY As
Double) As Double
ANNEXE 3
Propriété
Contrôle Outils Propriété Caption
Name
136 1 188
x = -------- = 8,5 et y = ------------- = 74,25
16 16
∑ xi yi – nxy-
a = -------------------------------
2 2
∑ xi – n x
b = y –ax
11 010 – 16 × 8,5 × 74,25
a = ------------------------------------------------------------
2
= 2,68
1 496 – 16x ( 8,5 )
b = 74,25 – 2,68 × 8,5 = 51,45
Cellule Formule
C21 =SOMME(C5:C20) recopie vers la droite jusqu’à E21
D5 SI(A5="";"";B5*C5) recopie vers le bas jusqu’à D20
E5 =SI(A5="";"";B5^2) recopie vers le bas jusqu’à E20
F5 =SI(A5="";"";$B$25*B5+$B$26) recopie vers le bas jusqu’à F20
G5 =SI(A5="";"";C5/F5) recopie vers le bas jusqu’à G20
B23 =MOYENNE(B5:B20)
B24 =MOYENNE(C5:C20)
B25 =INDEX(DROITEREG(C5:C20;B5:B20);1)
B26 =INDEX(DROITEREG(C5:C20;B5:B20);2)
B28 =(G5+G9+G13+G17)/4 recopie vers le bas jusqu’à B31
E25 =$B$25*D25+$B$26 recopie vers le bas jusqu’à E28
F25 =E25*B28 recopie vers le bas jusqu’à F28
136 79 100
x = -------- = 8,5 et y = ---------------- = 4 943,75
16 16
a =
∑ x i y i – nxy
-------------------------------- b = y –ax
2 2
∑ xi – n x
675 400 – 16 × 8,5 × 4 943,75-
a = ----------------------------------------------------------------------
2
= 0,15
1 496 – 16x ( 8,5 )
b = 4 943,75 – 0,15 × 8,5 = 4 920,50
Prévisions N
55 000 × 2 × 12
N = ------------------------------------- = 8
200 × 100
Lot économique en quantité = 55 000/8 = 6 875 unités.
Lot économique en valeur = 110 000/8 = 13 750 €.
Il faut donc passer 8 commandes d’une valeur de 13 750 € par commande. Soit 6 875 unités par commande.
ANNEXE 1
ANNEXE 2
Propriété
Contrôle Outils Propriété Caption
Name
Code VBA
Private Sub CB_Calculer_Click()
'Déclaration des variables
Dim Consommation As Single
Dim PU As Single
Dim Qt As Single
Dim CoutPassation As Single
Dim TxPossession As Single
Dim Ca As Single ' cout de passation
Dim Cp As Single ' cout de possession
Dim Ct As Single ' cout total
Dim indice As Integer
Dim ligneCadence1 As Variant
'Calcul de la cadence
PU = Txt_PrixU.Value
Qt = Txt_Quantite.Value
CoutPassation = Txt_CPassation.Value
TxPossession = Txt_TPossession.Value
Consommation = PU * Qt
'boucle For
For indice = 1 To 12
'Traitement de la première ligne
If indice = 0 Then
© Groupe Eyrolles
Next indice
'Affichage du total général
ligneCadence1 =
"======================================================================================================
============="
[Link] (ligneCadence1)
'Traitement du nombre de commande et du lot économique en valeur
NbreCommande = Sqr((Consommation * TxPossession) / (200 * CoutPassation))
LotEconomique = Consommation / NbreCommande
QtOptimale = Qt / NbreCommande
'Affichage des résultats
Lab_NbreCommande.Caption = Format(NbreCommande, "### ##0")
Lab_LotEconomique.Caption = Format(LotEconomique, "### ##0")
Lab_QtOpti.Caption = Format(QtOptimale, "### ##0")
End Sub
MODULE 1
‘ Ouverture de la boîte de dialogue
Sub stocks()
fm_Wilson.Show
End Sub
© Groupe Eyrolles
ANNEXE 2
ANNEXE 3
Propriété
Contrôle Outils Propriété Caption
Name
.../...
Propriété
Contrôle Outils Propriété Caption
Name
Remarque : les autres contrôles apparaissent dynamiquement à l’aide d’un programme en langage VBA.
Code VBA
'Option Explicit
Private Sub CB_Calculer_Click()
'Déclaration des variables
Dim tabPassation(12), tabPossession(12), tabCoutTotal(12) As Double
Dim PU, coutPassation, consoAnnuelle, tauxPossession, crNbreCde, crLotEco As Double
Dim Qt, indice, indiceTB, indice3, indice4 As Integer
'Vérification d'une valeur non nulle dans TB_Prix_Unitaire
If TB_Prix_Unitaire.Value = "" Or TB_Prix_Unitaire.Value <= 0 Then
MsgBox ("Le champ prix unitaire est incorrect.")
Exit Sub
End If
'Vérification d'une valeur non nulle dans TB_Quantité
If TB_Quantite.Value = "" Or TB_Quantite.Value <= 0 Then
MsgBox ("Le champ quantité est incorrect.")
Exit Sub
End If
'Vérification d'une valeur non nulle dans TB_CoûtPassation
If TB_CoutPassation.Value = "" Or TB_CoutPassation.Value <= 0 Then
MsgBox ("Le champ Cout de passation est incorrect.")
Exit Sub
End If
'Vérification d'une valeur non nulle dans TB_TauxPossession
If TB_TauxPossession.Value = "" Or TB_TauxPossession.Value <= 0 Then
MsgBox ("Le champ Taux de possession est incorrect.")
Exit Sub
End If
'ConsoAnnuelle = TB_ConsoAnnuelle.Value
PU = TB_Prix_Unitaire.Value
Qt = TB_Quantite.Value
coutPassation = TB_CoutPassation.Value
tauxPossession = TB_TauxPossession.Value
consoAnnuelle = Qt * PU
For indice = 1 To NombreVariable()
tabPassation(indice - 1) = CalculerCoutPassation(coutPassation, indice)
tabPossession(indice - 1) = CalculerCoutPossession(consoAnnuelle, indice, tauxPossession)
Next
For indice = 1 To NombreVariable()
tabCoutTotal(indice - 1) = CalculerCoutTotal(tabPassation(indice - 1), tabPossession(indice - 1))
Next
'Calcul du coût de passation et remplissage de la colonne
indiceTB = NombreVariable() + 1
indice3 = (NombreVariable() * 2) + 1
indice4 = (NombreVariable() * 3) + 1
For indice = 1 To NombreVariable()
Call SetValeurTextBox("TB_Variable" & (indiceTB), tabPassation(indice - 1))
Call SetValeurTextBox("TB_Variable" & (indice3), Format(tabPossession(indice - 1), "## ###0.00"))
Call SetValeurTextBox("TB_Variable" & (indice4), Format(tabCoutTotal(indice - 1), "## ###0.00"))
indiceTB = indiceTB + 1
indice3 = indice3 + 1
indice4 = indice4 + 1
Next
crNbreCde = CalculerNbreCommandeAn(consoAnnuelle, coutPassation, tauxPossession)
Call AfficherResultat(TB_NbreCdeAn, Format((crNbreCde), "###"))
© Groupe Eyrolles
Quantite_Optimale = Qt / crNbreCde
Call AfficherResultat(TB_Qt_Optimale, Format((Quantite_Optimale), "###"))
crLotEco = CalculerLotEconomique(consoAnnuelle, crNbreCde)
Call AfficherResultat(TB_LotEco, Int(crLotEco))
End Sub
Private Sub AjouterTextBox(ByVal NomControle As String, ByVal width As Integer, ByVal height As Integer,
ByVal Size As Integer, ByVal top As Integer, ByVal left As Integer, ByVal nbTextBox As Integer, ByVal
locked As Boolean)
Set objetTextBox = Fm_Wilson.[Link]("[Link].1")
With objetTextBox
.Name = NomControle 'Définit le nom du Text_Box
.top = top 'Définit l'écart entre deux Text_Box dans le sens de la hauteur
.left = left 'Définit la distance entre le bord gauche de la fenêtre et le bord du conteneur
.width = width 'Définit la largeur de l'objet
.height = height 'Définit la hauteur de l'objet
.[Link] = Size 'Définit la taille de la police des valeurs saisies
.Visible = True
.locked = locked
End With
End Sub
Private Sub SupprimerControle(ByVal NomControle As String)
For Each Control In Fm_Wilson.Controls
If [Link] = NomControle Then
Fm_Wilson.[Link] NomControle
Exit Sub
End If
Next Control
End Sub
F19 =SOMME(F16:F18)
© Groupe Eyrolles
Société Trans’Boisure
© Groupe Eyrolles