La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Séance 4: Plan Test d’auto-évaluation Relâche ou pas? À faire

Présentations similaires


Présentation au sujet: "Séance 4: Plan Test d’auto-évaluation Relâche ou pas? À faire"— Transcription de la présentation:

1 Séance 4: Plan Test d’auto-évaluation Relâche ou pas? À faire
Retour sur les exercices Méthode de dichotomie Tableaux VBA vs Tableaux Excel Gestion d’erreurs Modèle objet Excel Obtenir des données d’une base de données

2 À faire (re)Lire formation VBA:
Gestion d'erreur Collections et tableaux Dialogues et formulaires Objets et événements Excel Conseils de programmation Une macro Excel qui crée un tableau VBA contenant une matrice symétrique 500x500 de nombres aléatoires entre 1 et 100, puis en copie le contenu dans une plage Excel

3 À faire (suite)

4 Retour sur les exercices
Un bon programme… Fait toujours ce qui est prévu. Ne fait jamais ce qui n'est pas prévu. Est facile à utiliser. Est facile (peu coûteux) à modifier. Boucle de recherche: plage et test de fin Pourquoi ne pas typer les paramètres de fonction

5 Exercice: Comparaison de plages
Une fonction Excel qui compare 2 plages de cellules d’égales dimensions et retourne le nombre de cellules dont le contenu est identique (dans la même position)

6 Exercice: Création de matrice
Un programme VBA Excel qui crée une plage Excel contenant une matrice symétrique de nombres aléatoires entre 1 et 100, puis en affiche l’aperçu avant impression.

7 Exercice: Décompte de hausses
Une fonction Excel qui détermine le nombre de fois où une action a augmenté de plus de 10% dans une journée. Suggestion: tester votre programme à partir dune série de valeurs historiques obtenues de Yahoo Finance.

8 Exemple de boucle en finance
Calcul du coût en capital en utilisant « two stage Gordon model » (méthode Gordon) P0 capital au temps 0 Div0 revenus au temps 0 ghigh taux de croissance élevé de Div0 m nombre d’années de taux ghigh gnormal taux de croissance par la suite rE taux de rendement (valeur cherchée) (Tiré de Simon Benniga Financial Modeling)

9 Calcul de rE Méthode de dichotomie
Code proposé par l’auteur (p.52): Function TwoStageGordon(P0, Div0, Highgrowth, Highgrowthyrs, Normalgrowth) high = 4 low = 0 Do While (high - low) > Estimate = (high + low) / 2 factor = (1 + Highgrowth) / (1 + Estimate) Term1 = Div0 * factor * (1 - factor ^ Highgrowthyrs) / (1 - factor) Term2 = Div0 * factor ^ Highgrowthyrs * (1 + Normalgrowth) / (Estimate - Normalgrowth) If (Term1 + Term2) > P0 Then low = (high + low) / 2 Else: high = (high + low) / 2 End If Loop TwoStageGordon = Estimate End Function

10 TwoStageGordon – sur CD
Le code est (un peu) différent sur CD: Function TwoStageGordon(P0, Div0, Highgrowth, Highgrowthyrs, Normalgrowth) high = 1 low = 0 Do While (high - low) > Estimate = (high + low) / 2 factor = (1 + Highgrowth) / (1 + Estimate) Term1 = Div0 * factor * (1 - factor ^ Highgrowthyrs) / (1 - factor) Term2 = Div0 * factor ^ Highgrowthyrs * (1 + Normalgrowth) / (Estimate - Normalgrowth) If (Term1 + Term2) > P0 Then low = (high + low) / 2 Else: high = (high + low) / 2 End If Loop TwoStageGordon = (high + low) / 2 End Function

11 Code documenté Function TwoStageGordonMB(P0, Div0, Highgrowth, Highgrowthyrs, Normalgrowth) 'Auteurs: Maja Sliwinski, Beni Czaczkes et Simon Benninga, tiré de Financial Modeling (2008) p.52 'Adaptée par Michel Berthiaume, sept. 2010 'Calcul du taux de rendement d'un capital P0 donnennt des rendements Div0 au temps 0, 'avec des taux de croissance Highgrowth (durant Highgrowthyrs années) et Normalgrowth par la suite 'Résolution en utilisant la Méthode de dichotomie 'Noter que l'utilisation du type Currency au lieu de Double réduit la précision à 4 décimales Dim cHigh As Currency 'Borne supérieure Dim cLow As Currency 'Borne inférieure Dim cEstimate As Currency 'Valeur testée Dim cFactor As Currency 'Sous-calcul répété dans l'équation. Dim cterm1 As Currency 'Partie 1 Dim cterm2 As Currency 'Partie 2 'Validations If Not IsNumeric(P0) Or _ Not IsNumeric(Div0) Or _ Not IsNumeric(Highgrowth) Or _ Not IsNumeric(Highgrowthyrs) Or _ Not IsNumeric(Normalgrowth) Then TwoStageGordonMB = "Paramètre non numérique" Exit Function End If cHigh = 4 'Valeurs initiales. cLow = 0 'On cherche un taux compris entre 0 et 4. Do While (cHigh - cLow) > 'On arrète quand cHigh = cLow ou presque cEstimate = (cHigh + cLow) / 2 'Calcul de la fonction en utilisant cEstimate cFactor = (1 + Highgrowth) / (1 + cEstimate) cterm1 = Div0 * cFactor * (1 - cFactor ^ Highgrowthyrs) / (1 - cFactor) cterm2 = Div0 * cFactor ^ Highgrowthyrs * (1 + Normalgrowth) / (cEstimate - Normalgrowth) 'On remplace une des bornes par la valeur testée If (cterm1 + cterm2) > P0 Then cLow = cEstimate Else cHigh = cEstimate End If Loop 'Et on recommence.... TwoStageGordonMB = cEstimate End Function

12 Lectures… Questions?

13 Tableaux Range ("A1:A3") Dim dVecteur(1 to 3)
Range ("A1:J10") DIM tblValeurs as double(1 to 10,1 to 10) DIM tblValeurs() ReDIM tblValeurs(1 to 10,1 to 10) Utilisation de FOR ... NEXT Utilisation de FOR … EACH

14 Limites de tableaux DIM UBOUND LBOUND
REDIM UBOUND LBOUND Utiles lorsqu’on passe un tableau en paramètre OPTION BASE (éviter ou mettre à 1)

15 De Excel vers VBA: Méthode classique (2 boucles) ou
Dim vTableau() As Variant vTableau = Range("Plage") Si tableau dynamique et variant Intéressant, mais dangereux: type variant ReDim implicite

16 De VBA vers Excel Range(Cells(1, 1), Cells(UBound(vTableau, _ 1), UBound(vTableau, 2))) = vTableau si LBound() = 1 Seules les cellules de Range sont modifiées Attention aux dimensions

17 Tableaux Excel vs Tableaux VBA
En lecture: 100 fois plus lent dans Excel que dans VBA En écriture: 1000 fois plus lent Voir S04 Performance

18 Objets Excel Evaluate MsgBox [A2]
[MsgBox [VLOOKUP(DATE(2008,11,12),A4:R2620,2)] SpecialCells xlCellTypeBlanks. Cellules vides xlCellTypeConstants. Cellules contenant des constantes xlCellTypeFormulas. Cellules contenant des formules xlCellTypeLastCell. Dernière cellule dans la plage utilisée xlCellTypeVisible.Toutes les cellules visibles CurrentRegion Cette propriété renvoie un objet Range qui représente la zone en cours. Celle-ci est une plage limitée par toute combinaison de lignes et de colonnes vides. UsedRange Cette propriété renvoie un objet Range qui représente la plage utilisée dans la feuille de calcul spécifiée.

19 Gestion d’erreurs On error goto Stop

20 ByrRef, ByVal Option Explicit Sub test()
‘Par Michel Berthiaume, mai 2007 ‘ByRef ou ByVal? Dim cMontant As Currency cMontant = 9.99 MsgBox fnTaxe(cMontant) MsgBox cMontant End Sub Function fnTaxe(cValeur) If Not IsNumeric(cValeur) Then fnTaxe = "Erreur, valeur non numérique" End If cValeur = cValeur * 0.07 fnTaxe = cValeur End Function


Télécharger ppt "Séance 4: Plan Test d’auto-évaluation Relâche ou pas? À faire"

Présentations similaires


Annonces Google