ASI (L2) : TP5 Programmation sous Excel



Documents pareils
Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Algorithmique et programmation : les bases (VBA) Corrigé

Comment créer et utiliser une fonction

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

Formations 2015 Bureautique

Visual Basic for Applications

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Traitement des données avec Microsoft EXCEL 2010

1 TD 2 : Construction d'une chier Acrobat et envoi par

La Clé informatique. Formation Excel XP Aide-mémoire

Préparation à l examen EFA en Macro

Corrigé des TD 1 à 5

Rapport de Mini-Projet en ArcGIS Engine

Application 1- VBA : Test de comportements d'investissements

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

GUIDE Excel (version débutante) Version 2013

EXCEL Les tableaux croisés dynamiques

Utilitaires méconnus de StrataFrame

PRÉSENTÉ PAR : NOVEMBRE 2007

FORMATION au VBA Pour EXCEL. Version 2007 & +

Programmation Visual Basic. Visite guidée d'un programme Visual Basic 6.0

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B

Formation VBA 3 Interagir

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Débuter avec Excel. Excel

Ecran principal à l ouverture du logiciel

Mon aide mémoire traitement de texte (Microsoft Word)

TD3 - Facturation avec archivage automatisé

Note de cours. Introduction à Excel 2007

Excel. Identification. Informations sur vos besoins et objectifs. Notions fondamentales. Fiche de validation des besoins en formation Bureautique

PROGRAMMATION EVENEMENTIELLE sur EXCEL

TABLEAU CROISE DYNAMIQUE

Initiation à VBA pour Excel. Philippe Bernard Ingénierie Economique et Financière Université Paris-Dauphine

Comment créer des rapports de test professionnels sous LabVIEW? NIDays 2002

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Comment consolider des données

TABLEAU CROISE DYNAMIQUE

Java Licence Professionnelle CISII,

Formation Word/Excel. Présentateur: Christian Desrochers Baccalauréat en informatique Clé Informatique, 15 février 2007

Excel 2007 Niveau 3 Page 1

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Activité 11 : Nuage de points ou diagramme de dispersion

Stockez et organisez vos données sous Excel. Une approche systématique, structurée et simplifiée

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Guide de formation avec cas pratiques. Programmation. Philippe Moreau Patrick Morié. Daniel-Jean David

Travail de projet sur VBA

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Listes de validation dans OpenOffice Calc

EXCEL TUTORIEL 2012/2013

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

Initiation à LabView : Les exemples d applications :

.NET - Classe de Log

Excel avancé. Frédéric Gava (MCF)

Utilisation d objets : String et ArrayList

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

ASTUCES VBA Excel BO

COURS WINDEV NUMERO 3

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Cours d algorithmique pour la classe de 2nde

Se Perfectionner à Excel

Présentation du langage et premières fonctions

Créer le schéma relationnel d une base de données ACCESS

Excel et les bases de données

STAGE IREM 0- Premiers pas en Python

Excel 2010 Intermediaire

Examen Médian - 1 heure 30


Automatisation d'une Facture 4. Liste Déroulante Remises Case à cocher Calculs

1. Structure d'un programme FORTRAN 95

Introduction à MATLAB R

Méthode de préparation du fichier texte d import depuis Excel, via Access jusqu à Drupal.

Recherche dans un tableau

Styler un document sous OpenOffice 4.0

Séminaire d information MIGRATION WINDOWS 7 ET OFFICE 2010

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Évaluation des compétences. Identification du contenu des évaluations. Septembre 2014

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

PRISE EN MAIN D UN TABLEUR. Version OPEN OFFICE

VOCABULAIRE LIÉ AUX ORDINATEURS ET À INTERNET

manuellement. Le prototype ayant obtenu des résultats satisfaisants aux différents essais de labour est validé sur le plan suivant :

Excel 2010 Module 13. Comment créer un tableau d amortissement dégressif d une immobilisation. Enseignant : Christophe Malpart

L alternative, c est malin 1. Comment faire plein de choses pour pas cher sur MacIntosh

Programmation Objet - Cours II

SPHINX Logiciel de dépouillement d enquêtes

BIRT (Business Intelligence and Reporting Tools)

Cadastre du bruit SIT-JURA. Connecteur Arcview9.x - MSAccess. Mode d emploi. Appel formulaire. Page 1 sur 15

Initiation à Excel. Frédéric Gava (MCF)

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

MODE D EMPLOI DU MODULE D E-COMMERCE

Paginer les données côté serveur, mettre en cache côté client

Manuel M O D U L E D I M P O R T A T I O N

Module 1 : Tableau de bord Excel * 2010 incl.*

Le langage C. Séance n 4

Alain DI MAGGIO Mise à jour sur le site 11/01/10

Transcription:

ASI (L2) : TP5 Programmation sous Excel Objectifs du TP : Savoir programmer des fonctions et des boucles sous Excel ; savoir bien gérer les relations de récurence sous Excel. 1. Programmation avec Excel 1.1 Fonctions rapides Montrer comment on écrit une fonction sous Excel à l aide de Outils / Macros / Visual Basic Editor pour faire des ORF ( one-result functions ) c est à dire des fonctions qui renvoient une seule valeur comme pour - carre(x) renvoie le carré de l argument, - duree(a) renvoie nb de secondes écoulées entre an 0 et an a, Remarque : A la fac, il faut sans doute faire Insertion / Module avant de pouvoir écrire le texte de la fonction.

Leur faire écrire les deux textes suivants : Function carre(n) donne le carré d un nombre, d une case... carre = n * n Function duree(a) essaie de calculer le nombre de secondes écoulées entre la naissance du Christ et l an fourni comme paramètre duree = 365 * (a - 1) * 12 * 24 * 60 * 60 Tester ce que fait carre pour un nombre, une plage de valeurs. Leur faire écrire une fonction cdv qui renvoie ECARTYPEP/MOYENNE si l argument est une plage de valeurs. Rappeler et faire vérifier la distinction entre variance exacte (échantillon) donnée par VAR.P et variance estimée (VAR). Utiliser les valeurs 1,2,3,4,5,6 c est à dire la loi uniforme discrète UD(6) ou encore loi de lancer d un dé pour voir le rapport (n 1)/n entre ces deux variances. Ces fonctions ne font aucun test, aucune boucle. Elles se contentent de calculer ou d appeler des fonctions d Excel. Voir l onglet Fonctions de la feuille Excel nommée funcs sur K:\Stat_ad pour voir où mettre les valeurs... 1.2 Eviter les fonctions avec Excel Comme la programmation n est pas toujours simple avec V BA, on peut souvent se contenter de mettre des formules dans des cellules ce qui remplace la programmation. Rappeler comment afficher la loi binomiale sous Excel selon le modèle de l onglet Binom de la feuille Excel nommée funcs sur K:\Stat_ad à savoir : On met n en B1, p en D1 et on affiche les x i en colonne 2, les p i en colonne 3 via LOI.BINOMIALE et en colonne 4 à la main via C k np k (1 p) n k ; prendre n = 5, p = 0.3. 2

Là encore, on se servira de la page W eb http://www.info.univ-angers.fr/pub/gh/vitrine/democgi/loisstatp.htm pour vérifier les résultats. Même chose pour la loi de P oisson. On ajoutera en colonne 5 le calcul par la formule de récurence d un terme à l autre à savoir : à l ordre k + 1 on multiplie par λ et on divise par k + 1 (voir l onglet Poisson). Reprendre λ = 1.5 pour τ = 10 termes (montrer comment on obtient λ et τ à partir de l et t via la police Symboles). 1.3 Fonctions avancées en Excel Montrer comment écrire un programme de type Sub qui écrit 4 cellules avec un bouton pour lancer l exécution du programme (qui au passage demande la plage de variation des cellules). Expliquer pourquoi on met Application dans Averag et StDev. Le fichier VBALIST.XLS contient la correspondance Anglais/Français et permet d avoir une idée des fonctions à utiliser. Voici le programme : Sub decrit() demande de la plage Set r = Application.InputBox( Prompt:="Sélectionner la plage de recherche", Type:=8 ) calculs lamoy = Application.Average(r) sonect = Application.StDev(r) 3

stockage dans les cellules Worksheets(1).Cells(14, 2) = "moyenne" Worksheets(1).Cells(14, 3) = lamoy Worksheets(1).Cells(14, 4) = "écart-type" Worksheets(1).Cells(14, 5) = sonect Une fois le programme saisi (et enregistré, ce qui montre les erreurs éventuelles), il faut faire apparaitre la barre d outils F ormulaires, cliquer sur le symbole du bouton et le dessiner (aux environs de B4). Lorsque le panneau affecter apparait, lui dire que c est la macro decrit qui est associée au bouton. C est pourquoi il vaut mieux écrire la fonction (quitte à n écrire que la ligne de renvoi de la veleur) et ensuite le bouton. Changer le texte du bouton puis vérifier que le programme marche en cliquant sur le bouton. Avec l onglet Sub de la feuille proposée, c est la plage $B$1:$K$1 qu il faut fournir comme zone d entrée. Leur faire chercher pourquoi on ne voit rien... si on l exécute dans un onglet autre que l onglet 1 et leur faire rajouter MsgBox ("et voila ") pour bien voir que le programme s exécute. Leur faire modifier le programme pour qu il affiche au bon endroit, leur faire rajouter le nombre de termes et le cdv (coefficient de variation, déjà programmé). Détailler ce qui se passe si on clique sur Ok sans donner de plage de variation. Ne pas détailler le déboggage. Ne pas oublier d indiquer que & permet de concaténer les chaines, 4

1.4 Pour ceux qui voudraient approfondir : Rappeler ce qu est un test en si en algorithmique et donner la traduction en Excel. Faire un programme (sub) testevaleurs qui refuse de calculer si n n est pas un entier, si p n est pas un réel compris entre 0 et 1 ; n étant par exemple en B1 et p en D1. Rappeler ce qu est une boucle pour en algorithmique et donner la traduction en Excel. Ecrire un programme (sub) sdpe qui calcule la somme des n premiers entiers. Ne pas insister sur les variables locales, donner un algorithme rapide. Rappeler ce qu est une boucle tant que en algorithmique et donner la traduction en Excel. Ecrire un programme (sub) diffalphan qui donne afiche les valeurs de n et α n tant que α n 1/3 > 10 5 où α n correspond à la position du sprite. On rappelle que α n = 1 3 + 2 3 ( ) n 1 2 On trouvera une solution dans la feuille subs.xls du disque K: à l emplacement habituel. Dim permet de déclarer des variables, dont les tableaux, exemple : Dim Armoire(3) Armoire(1) = "Assiette" Armoire(2) = "Verre" Dim Tableau(1 To 10) As Integer attention : Tableau(3) = "test" G\ {e}n\ {e}re une erreur Tableau(4) = 775 Ecrire un programme qui affiche la valeur du maximum et sa position, la plage de variation étant transférée dans un tableau (si on ne veut pas de question utilisateur, mettre 5 valeurs dans un tableau). Pour ceux qui vont vite, leur faire lire essais_excel.txt et les laisser essayer les fonctions proposées. 5

Esquisse de solution en Excel Function carre(n) donne le carré d un nombre, d une case... carre = n * n Function duree(a) essaie de calculer le nombre de secondes écoulées entre la naissance du Christ et l an fourni comme paramètre duree = 365 * (a - 1) * 12 * 24 * 60 * 60 Function cdv(rge) calcule le coefficient de variation cdv = Application.StDev(rge) / Application.Average(rge) 6

Sub decrit() Set r = Application.InputBox( Prompt:="Sélectionner la plage de recherche", Type:=8) If r.count() < 2 Then MsgBox "désolé, vous n avez pas assez de valeurs!" calculs m = Application.Average(r) e = Application.StDev(r) stockage Worksheets(1).Cells(14, 3) = "longueur" Worksheets(1).Cells(14, 4) = r.count() Worksheets(1).Cells(14, 5) = "moyenne" Worksheets(1).Cells(14, 6) = m Worksheets(1).Cells(14, 7) = "écart-type" Worksheets(1).Cells(14, 8) = e Worksheets(1).Cells(14, 9) = "cdv" Worksheets(1).Cells(14, 10) = cdv(r) MsgBox ("et voilà") Sub Binomiale() récupération des valeurs valn = Worksheets("testevaleurs").Cells(1, 2).Value valp = Worksheets("testevaleurs").Cells(1, 4).Value 7

tests sur n If IsEmpty(Worksheets("testevaleurs").Cells(1, 2)) Then MsgBox ("la case B1 est vide ") Exit Sub If Not IsNumeric(valn) Then MsgBox ("la valeur pour n, à savoir " & valn & " n est pas numérique") Exit Sub If Not (valn = Int(valn)) Then MsgBox ("votre n " & " qui est " & valn & " ne doit pas ^etre un entier...") Exit Sub tests sur p If IsEmpty(Worksheets("testevaleurs").Cells(1, 4)) Then MsgBox ("la case D1 est vide ") Exit Sub If Not IsNumeric(valp) Then MsgBox ("la valeur pour p, à savoir " & valp & " n est pas numérique") Exit Sub If (valp < 0) Or (valp > 1) Then MsgBox ("la valeur de p soit " & valp & " n est pas comprise entre 0 et 1") Exit Sub si on arrive ici, c est que tout va bien MsgBox (" tout va bien, on pourrait calculer B(" & valn & " ; " & valp & ")") 8

Sub resetdecrit() Worksheets("bonne Sub").Cells(14, 4) = "" Worksheets("bonne Sub").Cells(14, 6) = "" Worksheets("bonne Sub").Cells(14, 8) = "" Worksheets("bonne Sub").Cells(14, 10) = "" Function sdpe(n) sdv = 0 somme des valeurs For indi = 1 To n sdv = sdv + indi Next indi sdpe = sdv Sub resetalphan() nblig = 40 nbcol = 40 9

For indi = 1 To nblig For jndj = 1 To nbcol Worksheets("diffalphan").Cells(indi, jndj) = "" Next jndj Next indi Function Alphan(n) Alphan = (1 / 3) + (2 / 3) * ((-1 / 2) ^ n) Sub DiffAlphan() Worksheets("diffalphan").Cells(10, 3) = "n" Worksheets("diffalphan").Cells(10, 4) = "alphan" Worksheets("diffalphan").Cells(10, 5) = " alphan-1/3 " n = 0 While Abs(Alphan(n) - 1 / 3) > 10 ^ (-5) n = n + 1 Worksheets("diffalphan").Cells(10 + n, 3) = n Worksheets("diffalphan").Cells(10 + n, 4) = Alphan(n) Worksheets("diffalphan").Cells(10 + n, 5) = Abs(Alphan(n) - 1 / 3) Wend 10

REFERENCE WEB : http://www.info-3000.com/vbvba/tableau.php ==================================================== Les tableaux, exemple basique Sub Tableau() Dim Armoire(3) Armoire(1) = "Assiette" Armoire(2) = "Verre" Armoire(3) = "Serviette" MsgBox Armoire(1) MsgBox Armoire(2) MsgBox Armoire(3) --------------- Exemple de tableau typé Sub tableauv2() Dim Tableau(1 To 10) As Integer Tableau(3) = "test" Génère une erreur Tableau(4) = 775 ---------------- Sub ChercheMaxDansTableau() Dim montableau(5) Nbval = 5 lemax = 1 montableau(1) = 3 ; montableau(2) = 8 ; montableau(3) = 8 etc. lemax = montableau(1) For indval = 1 To Nbval If montableau(indval) > lemax Then lemax = montableau(indval) Next indval MsgBox (" le max est " & lemax) 11

******************************* * * * Fichier essais_excel.txt * * * ******************************* Attribute VB_Name = "EnvironnementEtLoginName" renseignements sur l environnement local et réseau Ron de Bruin, mpep Sub PCInformation() Dim msg msg = "UserName" & vbtab & Environ$("username") & vbnewline _ & "UserProfile" & vbtab & Environ("UserProfile") & vbnewline _ & "Computer #" & vbtab & Environ$("ComputerName") & vbnewline _ & "Logon Server" & vbtab & Environ$("Logonserver") & vbnewline _ & "UserDomain " & vbtab & Environ$("UserDomain") MsgBox msg,, "Environment Variables" suite Sub RetrieveLogonName() Dim wshnetwork As Object Dim LogonName As Variant Set wshnetwork = CreateObject("WScript.Network") LogonName = "Logon Name = " & wshnetwork.username MsgBox LogonName ======================================================== Dim new_value As String Dim txt As String Dim i As Integer Dim Buffer() As Byte Dim Addr As Long Dim stemp As String Dim i As Lon 12

Dim TLApp As TLI.TLIApplication Dim TLInfo_XL As TLI.TypeLibInfo Dim MemInfo As TLI.MemberInfo Dim ConstInfo As TLI.ConstantInfo Dim DestCell As Range Dim hpl$ Dim MyData As DataObject ======================================================== Attribute VB_Name = "AvecDoublonsOuNon" savoir si une plage comporte ou non des doublons Function HasDoublons(Plage As Range) Dim Coll As New Collection, cell As Range On Error Resume Next For Each cell In Plage If cell.text <> "" Then Coll.Add "zaza", cell.text Next Err.Clear HasDoublons = Not (Coll.Count = Plage.Count) ======================================================== Attribute VB_Name = "ChercherDansUneChaine" Comment je peux tester facilement la présence d un caractère dans une cha^ıne? la petite fonction suivante qui renvoie VRAI si Caractere est trouvé dans Chaine (Pierre Fauconnier, mpfe) Function RechercheCar(Chaine, Caractere) As Boolean Dim i As Integer For i = 1 To Len(Chaine) If Mid(Chaine, i, 1) = Caractere Then RechercheCar = True Next i 13

======================================================== Y a t il une fonction VBA qui renvoie le nombre d occurences d un caractère trouvées dans une cha^ıne Function nbocc(textecherché As String, Texte As String) As Integer Iznogood, mpfe Dim i As Long Do i = InStr(i + 1, Texte, TexteCherché, 1) If i <> 0 Then nbocc = nbocc + 1 Loop Until i = 0 ======================================================== Retourne le nombre d occurences du 1er caractère de Texte2 dans Texte1 utilisation de references-cellule et/ou textes entre quotes doubles. ex: NbrOccurences(A5;A3) ou NbrOccurences("Le blaba abcdefgh";"e") Function NbrOccurences(Texte1, Texte2) GeeDee, mpfe NbrOccurences = 0 For i = 1 To Len(Texte1) If Mid(Texte1, i, 1) = Left(Texte2, 1) Then NbrOccurences = NbrOccurences + 1 Next Sans VBA (JièL, mpfe) =NBCAR(A1)-NBCAR(SUBSTITUE(MINUSCULE(A1);"e";"")) Const Symb = "IVXLCDM" Dim I As Integer, J As Integer Dim K As Integer, L As Integer, S As Integer Dim C As String * 1, Prec As Boolean 14

======================================================== Attribute VB_Name = "ChiffresRomainsChiffresArabes1" ---------------------------------------------------------------------- Conversion d un nombre < 4000 en chiffres romains (style "classique") vers un nombre en chiffres arabes ---------------------------------------------------------------------- Laurent Longre, mpfe Function ROMINVERSE(Nombre As String) Const Symb = "IVXLCDM" Dim I As Integer, J As Integer Dim K As Integer, L As Integer, S As Integer Dim C As String * 1, Prec As Boolean On Error GoTo Erreur I = Len(Nombre) Do K = InStr(1, Symb, Mid$(Nombre, I, 1)) If K = 0 Or K = J Then Err.Raise xlerrvalue S = IIf(K Mod 2, 1, 5) * 10 ^ ((K - 1) \ 2) If K < J Then If Not Prec Then Err.Raise xlerrvalue Select Case Mid$(Nombre, I, 2) Case Is = "ID", Is = "IM", Is = "VX", Is = "VD", _ Is = "VM", Is = "LC", Is = "DM" Err.Raise xlerrvalue End Select ROMINVERSE = ROMINVERSE - S I = I - 1 Prec = False ElseIf K Mod 2 Then C = Mid$(Symb, K, 1) L = 0 Do If Mid$(Nombre, I, 1) = C Then If L = 3 Then Err.Raise xlerrvalue ROMINVERSE = ROMINVERSE + S I = I - 1 15

L = L + 1 Else Prec = L = 1 Exit Do Loop While I Else ROMINVERSE = ROMINVERSE + S I = I - 1 Prec = True J = K Loop While I Exit Function Erreur: ROMINVERSE = CVErr(Err) ======================================================== Attribute VB_Name = "CompareChaines" Eric Jeanne, mpfe compare lettre à lettre 2 chaines de caractères renvoie -1 si elles sont identiques, ou le nombre de caractères qu elles ont en commun, de la gauche vers la droite (sensible à la casse) Function comparch(ch1, ch2) Dim lg1%, lg2%, i% Application.Volatile True If ch1 = ch2 Then comparch = -1 Else lg1 = Len(ch1) 16

lg2 = Len(ch2) i = 1 While Mid(ch1, i, 1) = Mid(ch2, i, 1) i = i + 1 Wend comparch = i - 1 Sub test() MsgBox comparch("paul za", "paul zaza") MsgBox comparch("paul za", "paul Zaza") ======================================================== 17