Excel – Le langage Basic [vb]
Transcription
Excel – Le langage Basic [vb]
Excel – Le langage Basic [vb] K. Zampieri, Version 21 octobre 2013 Table des matières 1 Symboles d’un programme Basic 1.1 Commentaires . . . . . . . . . . . 1.2 Mots-clés . . . . . . . . . . . . . 1.3 Identifiants . . . . . . . . . . . . 1.4 Types fondamentaux . . . . . . . 1.5 Règles d’écriture des programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 3 3 3 2 Déclarations 2.1 Déclaration de variables . . . 2.2 Déclaration de constantes . . 2.3 Variables indicées . . . . . . . 2.4 Dimensionnement dynamique 2.5 Les chaines de caractères . . . 2.6 Portée des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 5 5 5 5 3 Instructions simples 3.1 Instruction d’affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Boite de message (MessageBox) . . . . . . . . . . . . . . . . . . . . . . . 3.3 Boite de saisie (InputBox) . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 6 7 . . . . . . . . . . . . 4 Instructions structurées 4.1 Test : Instruction Si . . . . . . . . . . . 4.2 Test : Instruction Si-Alors . . . . . . . 4.3 Test : Instruction Si-cascade . . . . . . 4.4 Test : Instruction Selon . . . . . . . . . 4.5 Gestion des erreurs : Si erreur dérouter 4.6 Gestion des erreurs : Variante . . . . . 4.7 Boucle : Instruction Pour . . . . . . . . 4.8 Boucle : Instruction TantQue . . . . . 4.9 Boucle : Variantes sur le TantQue . . . 4.10 Boucle : Instruction PourTout . . . . . 4.11 Instruction Avec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 8 8 8 9 9 9 10 10 10 11 5 Procédures et fonctions 5.1 Déclaration d’une procédure 5.2 Appel d’une procédure . . . 5.3 Déclaration d’une fonction . 5.4 Appel d’une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 12 12 12 13 . . . . . . . . . . . . . . . . 1 . . . . . . . . Bureautique – vb00mcours, October 21, 2013 6 Fonctions standard 6.1 Fonctions mathématiques . . . . . 6.2 Fonctions de chaine de caractères 6.3 Fonctions logiques . . . . . . . . . 6.4 Fonctions diverses . . . . . . . . . 6.5 Fonctions Excel . . . . . . . . . . 2 . . . . . 14 14 14 14 14 14 . . . . . . . 15 15 15 15 15 16 16 16 8 Utilisation des fonctions Excel dans le VBA 8.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Fonctions courantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 17 9 Exercices : Déclarations et Instructions simples 9.1 Boite de message simple . . . . . . . . . . . . . . 9.2 Boite de message avec retour de valeur . . . . . . 9.3 Saisie de valeur . . . . . . . . . . . . . . . . . . . 9.4 Utilisation de variables . . . . . . . . . . . . . . . . . . . 19 19 21 22 23 10 Exercices : Instructions structurées 10.1 Saisie validée d’un nombre . . . . . . . . . . . . . . . . . . . . . . . . . . 24 24 11 Exercices : Procédures et fonctions 11.1 Fonction numeroSemaine . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Procédure transposer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 25 28 7 Quelques fonctions/méthodes 7.1 Fonction RGB . . . . . . . . 7.2 Fonction Timer . . . . . . . 7.3 Fonction Now . . . . . . . . 7.4 Méthode Wait . . . . . . . . 7.5 Méthode Cursor . . . . . . . 7.6 Méthode OnTime . . . . . . 7.7 Méthode Quit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bureautique – vb00mcours, October 21, 2013 3 Introduction Mots-Clés Excel, Langage Basic. Requis VBA. Comprend [Minot-X2]. Le langage Basic (Beginners All-purpose Symbolic Information Code) est un langage assez ancien (1964) qui présentait la particularité d’être interprété et, à cause de cela, était très facile à apprendre. Les nouvelles versions de ce langage sont compilées avant l’exécution mais un interpréteur est en fonction lors de l’écriture des instructions. Une partie des erreurs est donc signalée au fur et à mesure de la frappe des lignes de codes. La compilation avant exécution permet d’avoir de bonnes performances lors de l’utilisation. Le langage Basic utilisé par le VBA est très proche de la version appelée Q-Basic. Ce module présente le langage Basic : gestion des entrées/sorties, l’utilisation de variables, de boucles, de tests, etc. Remarque On parlera indifféremment de VB ou de VBA. Le langage utilisé est le même, à la différence près que Visual Basic for Applications (VBA) nécessite un support logiciel (tout produit de la gamme Office, tel que Word ou Excel par exemple), alors que Visual Basic (VB) se suffit à lui-même. Conclusion Bureautique – vb00mcours, October 21, 2013 4 == Activités Cours == 1 Symboles d’un programme Basic 1.1 Commentaires Un commentaire débute par le mot-clé REM ou l’apostrophe ’. 1.2 Mots-clés Les mots-clés sont réservés, insensibles à la casse et aux accents. 1.3 Identifiants Un identifiant est constitué de lettres, de chiffres et du blanc souligné. Il commence toujours par une lettre. Il n’est pas sensible à la case. 40 caractères maximum. Il est mnémonique (mais pas trop long !). 1.4 Types fondamentaux Les types fondamentaux sont les suivants : – Integer Entier (2 octets) – Long Entier long (4 octets) – Single Réel (4 octets) – Double Réel double précision (8 octets) – Boolean Booléen (2 octets) – String Chaine de caractères (maximum 64000 caractères) – Variant Peut contenir des données de tout type y compris Error et Null. Utilise 16 octets pour un nombre et 22 octets plus 2 octets pour la longueur pour les chaı̂nes. 1.5 Règles d’écriture des programmes Voici quelques règles : – Une instruction peut avoir 255 caractères au maximum. Pour continuer l’écriture d’une instruction à la ligne suivante, on met un blanc puis un blanc souligné _ et on poursuit à la ligne suivante. – Possibilité de séparer deux instructions sur la même ligne avec le : (deux points). C’est cependant déconseillé sauf pour l’initialisation à la déclaration. – Commentez par REM ou ’ en début de ligne – ou par ’ après une instruction. – Donnez une adresse à une ligne plutôt qu’un numéro. Attention : après une adresse numérique, pas de : (deux points). Après une adresse littéral, nécessité de : (deux points). – Les lignes blanches sont admises. – L’indentation des instructions n’est pas obligatoire mais conseillé. Bureautique – vb00mcours, October 21, 2013 2 2.1 5 Déclarations Déclaration de variables Syntaxe [Static] Dim x [As TypeVariable] Explication Avec Dim la variable n’existe qu’à l’intérieur de la procédure où elle est déclarée et elle est remise à zéro à chaque appel. Avec Static elle conserve la valeur qu’elle avait lors de la sortie précédente de la procédure. Le mot-clé As et son paramètre précisent le type de donnée stockée. Remarque Définir le type d’une variable est facultatif mais conseillé : VBA se débrouille bien, en général, mais quelques fois, l’absence de déclaration conduit à des erreurs. Le type est Variant s’il n’est pas précisé. Exemple Dim chn As String ’une chaine de caractères Dim n As Integer ’un entier Dim reel As Double ’un réel Syntaxe Option implicit Explication Cette déclaration en début de programme oblige à déclarer les variables ce qui permet le contrôle des fautes d’orthographe dans les noms de variables. Cela alourdit l’écriture mais en général accélère les calculs. Remarque Une variable non déclarée est du type Variant. Attention Dim a As Integer, b As Integer, c As Single ’est correct Dim a, b, c As Integer ’uniquement c est Integer 2.2 Déclaration de constantes Syntaxe Const nom As TypeConst = valeur Explication Déclare une constante nom de type TypeConst initialisée à valeur. Bureautique – vb00mcours, October 21, 2013 2.3 6 Variables indicées Syntaxe Dim t1(dim1, dim2, ...) As TypeVariable Dim t2(1 To dim1, ...) As TypeVariable ’si base 1 Dim t2(0 To dim1, ...) As TypeVariable ’si base 0 Explication Déclare une variable indicée. Les indices doivent être des nombres entiers ou des variables entières. La déclaration Option Base 1 est le mode implicite. L’instruction Option Base 0 modifie la deuxième déclaration. 2.4 Dimensionnement dynamique Syntaxe Dim t() As TypeVariable ’déclaration d’un tableau ... ReDim [Preserve] t(dim1, dim2, ...) ’redimensionnement d’un tableau Explication Dans le cas de Preserve les anciennes valeurs sont conservées et les nouvelles valeurs sont initialisées à zéro. 2.5 Les chaines de caractères Syntaxe [Static] Dim s As String [*n] ’déclaration Explication Déclare une variable s de type chaine de caractères. Le paramètre *n (où n est un entier) précise le nombre maximum de caractères. – L’opérateur de concaténation est le &. – L’instruction Option Compare Text fait que a=A. – L’instruction Option Compare Binary fait que a<>A. – La fonction len(s) renvoie la longueur de la chaine s. 2.6 Portée des variables Une variable (ou constante) n’est connue que dans le module où elle est défini : ce peut être dans une fonction, une procédure, une feuille de travail. Pour avoir une variable visible dans tout le projet, il faut la déclarer Public ou Global dans la partie Déclarations d’un module VBA. Bureautique – vb00mcours, October 21, 2013 3 7 Instructions simples 3.1 Instruction d’affectation Syntaxe variable = expression Explication Affecte une valeur à une variable. Remarque – Hiérarchie classique des opérateurs : ^ * / + – Si égalité de priorité : priorité à gauche – Attention : une seule affectation par instruction 3.2 Boite de message (MessageBox) Syntaxe valeur = MsgBox(prompt[,buttons][,title]) Explication Affiche un message et récupère la valeur des boutons. – prompt Texte constituant le message à l’utilisateur (chaine de caractères) – buttons Expression numérique décrivant les boutons demandés dans la boite de message – title Texte venant en titre de la boite de message (chaine de caractères) Les noms commençant par vb représentent des constantes Visual Basic. On peut utiliser le nom de la constante ou sa valeur : vbOKOnly 0 vbOKCancel 1 vbAbortRetryIgnore 2 vbYesNoCancel 3 vbYesNo 4 vbRetryCancel 5 vbCritical 16 Affiche Affiche Affiche Affiche Affiche Affiche Affiche Les valeurs renvoyées sont : vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo 1 2 3 4 5 6 7 OK Annuler Abandonner Réessayer Ignorer Oui Non le bouton OK uniquement les boutons OK et Annuler les boutons Abandonner, Réessayer et Ignorer les boutons Oui, Non et Annuler les boutons Oui et Non les boutons Réessayer et Annuler l’icône Message critique Bureautique – vb00mcours, October 21, 2013 3.3 8 Boite de saisie (InputBox) Syntaxe valeur = InputBox(prompt[,title][,default][,left][,top][,helpFile][,helpContextId]) // valeur = Application.InputBox(...[,Type]) //Méthode Explication Récupère et renvoie le texte saisi par l’utilisateur. La donnée récupérée est de type String (chaine de caractères). Attention, même si le texte tapé par l’utilisateur est un numérique, VB la considère en tant que chaine alors qu’Excel convertira cette valeur en numérique (cadrage à droite). – prompt Texte demandant l’entrée de la donnée (chaine de caractères) – title Texte venant en titre de la boite de message (chaine de caractères) – default Valeur par défaut de la donnée à entrer – left et top Position en nombre de points à partir du coin en haut à gauche de l’écran. Par défaut, la boite est positionnée au centre de l’écran – helpFile et helpContextId Fichiers d’aides – type Type du résultat attendu (par défaut, du texte) Le paramètre type (somme de valeurs) est défini comme suit : – 0 : une formule – 1 : un nombre (l’utilisateur saisissant les réels avec une virgule) – 2 : une chaine de caractères – 4 : une valeur logique (True ou False, l’utilisateur tapant Vrai ou Faux) – 8 : un objet de la classe « Range » (que l’on peut saisir avec la souris). Utilisez l’instruction Set pour l’affectation Bureautique – vb00mcours, October 21, 2013 4 4.1 9 Instructions structurées Test : Instruction Si Syntaxe If condition Then instructionsAlors Else instructionsSinon End If Explication Remarque fausse. 4.2 Effectue la structure de choix classique du Si algorithmique. Le else est facultatif s’il n’y a rien à faire quand l’expression logique est Test : Instruction Si-Alors Syntaxe If condition Then instructionSimple Remarque 4.3 Une seule instruction et pas de Else ni de End If. Test : Instruction Si-cascade Syntaxe If condition Then instructionsAlors Else If condition2 Then instructions2Alors ... Else instructionsSinon End If Remarque Utilisation possible de Not, And, Or et Xor (ordre de priorité alphabétique pour les trois derniers). 4.4 Test : Instruction Selon Syntaxe Select Case expression Case c1 instructionsC1 Case c2, c3 Bureautique – vb00mcours, October 21, 2013 10 instructionsC2 Case c4 To c5 instructionsC3 Case Else instructionsDefault End Select 4.5 Gestion des erreurs : Si erreur dérouter Syntaxe On Error Goto xxx ... xxx: ... Resume Explication 4.6 Le Resume permet de reprendre à la ligne suivante si il y a erreur. Gestion des erreurs : Variante Syntaxe On Error Resume Next ... Explication Si il y a erreur, passe à la ligne suivante. Remarque Il est aussi possible de récupérer le code de l’erreur pour la traiter : – err.number ’le numéro de l’erreur – err.description ’la description de l’erreur 4.7 Boucle : Instruction Pour Syntaxe For v = vDebut To vFin [Step vPas] instructions Next [v] Explication Le compteur v est un entier ou un réel. Le pas est facultatif (par défaut 1) ainsi que le compteur en Next. Remarque Pour sortir de la boucle : Exit For. Bureautique – vb00mcours, October 21, 2013 4.8 Boucle : Instruction TantQue Syntaxe While Condition instructions Wend Remarque 4.9 Pour sortir de la boucle : Exit Do. Boucle : Variantes sur le TantQue Syntaxe Do While Condition instructions Loop Syntaxe Do Until Condition instructions Loop Syntaxe Do instructions Loop Until Condition Syntaxe Do instructions Loop While Condition Remarque 4.10 Pour sortir de ces boucles : Exit Do. Boucle : Instruction PourTout Syntaxe For Each element In ZoneA instructions Next element Remarque Pour sortir de la boucle : Exit For. 11 Bureautique – vb00mcours, October 21, 2013 4.11 12 Instruction Avec Syntaxe With obj .Prop1 = ... .Prop2 = ... ... End With Explication Permet de spécifier les propriétés d’un objet ou d’un type défini par l’utilisateur pour une série d’instructions. Les instructions With accélèrent l’exécution des procédures et permettent d’éviter des saisies répétitives. Bureautique – vb00mcours, October 21, 2013 5 13 Procédures et fonctions On appelle procédure un morceau de code que l’on peut appeler. Exemple : une procédure de mise en page, d’impression, de modification d’un jeu de données,... On appelle fonction un morceau de code qui restitue une seule valeur. Exemple : le calcul d’un sinus, le calcul d’un déterminant... Le but d’une procédure ou d’une fonction est d’écrire un morceau de code réutilisable dans la même application ou dans une autre application. L’autre raison d’être des procédures et fonctions est la structuration du programme en unités simples pour être comprises facilement. C’est donc une raison de clarté de programmation et d’esthétique du programme. 5.1 Déclaration d’une procédure Syntaxe [Private | Public] Sub nomproc ( listeDesParamètres ) ... End Sub Explication Avec Private la procédure n’est connue que dans le module où elle est définie alors qu’avec Public elle l’est dans tout le projet. Les paramètres formels sont séparés par des virgules (,). Il est possible de préciser le mode de passage par valeur ByVal (par défaut) ou par référence ByRef ainsi que le type des paramètres dans l’en-tête comme suit : [ByVal|ByRef] par1 As Type1,... Même si la procédure n’a pas besoin de paramètres, les parenthèses sont nécessaires. 5.2 Appel d’une procédure Syntaxe Call nomproc ( listeDesParamètresEffectifs ) Attention Les paramètres effectifs sont séparés par des points-virgules ( ;). S’il n’y a pas de paramètres, on ne met pas les parenthèses : Call nomproc. 5.3 Déclaration d’une fonction Syntaxe [Private | Public] Function nomfcn ( listeDesParamètres ) [As TypeRésultat] ... nomfcn = ... End Function Bureautique – vb00mcours, October 21, 2013 14 Explication Avec Private la fonction n’est connue que dans le module où elle est définie alors qu’avec Public elle l’est dans tout le projet. Les paramètres formels sont séparés par des virgules (,). Il est possible de préciser le mode de passage par valeur ByVal (par défaut) ou par référence ByRef ainsi que le type des paramètres dans l’en-tête comme suit : [ByVal|ByRef] par1 As Type1,... Même si la fonction n’a pas besoin de paramètres, les parenthèses sont nécessaires. Attention Le nom de la fonction qui est aussi le nom du résultat, doit apparaı̂tre dans le corps de la fonction (généralement à la fin), non suivi de la parenthèse, à gauche du signe =. 5.4 Appel d’une fonction Syntaxe valeur = nomfcn ( listeDesParamètresEffectifs ) Attention Les paramètres effectifs sont séparés par des virgules (,). Bureautique – vb00mcours, October 21, 2013 6 15 Fonctions standard La description et l’utilisation des fonctions standard (avec des exemples) se trouve dans l’aide de Visual Basic au mot-clé Function. 6.1 Fonctions mathématiques Syntaxe INT ABS EXP LOG SQR RDN COS SIN TAN ATN... Explication cosinus... 6.2 Partie entière, valeur absolue, exponentielle, logarithme, carré, aléatoire, Fonctions de chaine de caractères Syntaxe LEN TRIM UCASE LCASE Explication 6.3 Longueur de la chaine, élimination des blancs, mise en majuscule... Fonctions logiques Syntaxe ISARRAY ISDATE ISEMPTY ISNULL ISNUMERIC Explication 6.4 Est un tableau, est une date, est vide, est nul, est un nombre... Fonctions diverses Syntaxe RGB DAY HOUR Explication 6.5 Proportion de rouge vert bleu, jour de la semaine, heure... Fonctions Excel Syntaxe SOLVER Explication Appel du solveur Bureautique – vb00mcours, October 21, 2013 7 7.1 16 Quelques fonctions/méthodes Fonction RGB Syntaxe RGB(r,g,b) Explication Renvoie une couleur définie par sa quantité de rouge, de vert et de bleu, par trois entiers compris entre 0 et 255. Voici le tableau fourni dans VBA : Couleur Noir Bleu Vert Cyan Rouge Magenta Jaune Blanc 7.2 R 0 0 0 0 255 255 255 255 Timer Explication Single. Renvoie le nombre de secondes depuis minuit sous forme d’une variable Fonction Now Syntaxe Now Explication 7.4 B 0 255 0 255 0 255 0 255 Fonction Timer Syntaxe 7.3 G 0 0 255 255 0 0 255 255 Renvoie une variable de type Variant contenant la date et l’heure. Méthode Wait Syntaxe Application.Wait(dt) Explication Permet d’attendre une date donnée ou d’arrêter le processus pendant un petit moment. La date dt est de type Variant. Attention fait ! Exemple Pendant l’attente le poste de travail est bloqué : plus rien ne peut y être Le code suivant permet d’attendre 15 secondes. dtreprise = Now + "00:00:15" Application.Wait(dtreprise) Bureautique – vb00mcours, October 21, 2013 7.5 17 Méthode Cursor Syntaxe Application.Cursor = type_du_curseur_a_afficher Explication Permet de faire apparaı̂tre le sablier. Exemple reprise = Timer + 20 DoWhile Timer < reprise Application.Cursor = xlwait ’sablier Loop Application.Cursor = xldefault ’fleche 7.6 Méthode OnTime Syntaxe Application.OnTime(EarliestTime, Procedure, LastestTime) Explication Permet d’attendre une date ou un moment pour lancer une procédure. EarlistTime et LastestTime sont des variables de type Variant et Procedure de type String. Exemple ’Lance la procédure depuis l’heure jusqu’à: Application.OnTime(TimeValue("17:10:05"),"MaProcedure",TimeValue("17:11:10")) ’Lance la procédure à l’heure indiquée: Application.OnTime(TimeValue("17:10:05"),"MaProcedure") 7.7 Méthode Quit Syntaxe Application.Quit Explication Permet de quitter l’application Excel. Bureautique – vb00mcours, October 21, 2013 8 18 Utilisation des fonctions Excel dans le VBA 8.1 Principe Les fonctions Excel sont utilisables en VBA. Cependant : – Elles doivent être utilisées sous leur nom en anglais. – Le séparateur des paramètres dans l’appel est la virgule et non le point-virgule comme dans leur appel dans Excel. – Leur appel ne se fait pas comme dans Excel, excepté pour les fonctions propres au Basic et certaines fonctions comme cos, sqr... now, date. La méthode à utiliser est la suivante : Range("...").FormulaR1C1 = "=FCNEXCEL(...)" Dans les fonctions, utilisez le repérage des cellules par R1C1 comme le rappelle la propriété FormulaR1C1. 8.2 Fonctions courantes Les fonctions les plus courantes sont : INDEX valeurDeLaCellule=INDEX(matriceOuTable,numlig,numcol) EQUIV position=MATCH(valeurCherchée,matrice,typeRésultat COLONNE numeroColonne=COLUMN(référenceCellule) LIGNE numeroLigne=ROW(référenceCellule) COLONNES nombreColonnes=COLUMNS(plage) LIGNES nombreLignes=ROWS(plage) ADRESSE référenceCellule=ADDRESS(numlig,numcol,type,mode) INDIRECT valeurDansCellule=INDIRECT(éférenceCellule) RECHERCHE valeurResultat=LOOKUP(valeur,vecteurCible,vecteurResultat) RECHERCHEV valeurResultat=VLOOKUP(valeur,matrice,numcol,type) RECHERCHEH valeurResultat=HLOOKUP(valeur,matrice,numlig,type) CHOISIR valeur=CHOOSE(num,listeValeurs) DECALER référencePlage=OFFSET(référence,decalLig,decalCol,haut,large) CONVERT nombre=CONVERT(nombre,uniteeOrigine,unitéDesrtination) CAR caractère=ASC(codeCaractère) CODE codeAscii=CHR(caractère) TEXTE nombreTexte=TEXT(nombre,format) MAJUSCULE texteM=UPPER(texte) MINUSCULE texteM=LOWER(texte) NOMPROPRE texteM=PROPER(texte) INFO chemin=INFO("directory") INFO nombreFeuilles=INFO("nbfich") INFO adresseCellule=INFO("cellule") CELLULE chemin=CELL("filename",référence) Bureautique – vb00mcours, October 21, 2013 NBCAR nbcar=LEN(référenceOuTexte) SUPPRESPACE texteN=TRIM(texteOuCellule) GAUCHE sousChaine=LEFT(chaineOuCellule,numcaractères) DROITE sousChaine=RIGHT(chaineOuCellule,numcaractères) STXT sousChaine=MID(chaine,départ,longueur) SUBSTITUE chaine=SUBSTITUTE(chainee,sousChaine,chaineRemplacement) CHERCHE position=SEARCH(texteATrouver,texte,débutRecherche) TROUVE position=FIND(texteATrouver,texte,débutRecherche) AUJOURDHUI dt=TODAY() MAINTENANT dthr=NOW() JOUR jr=DAY(dt) JOURSEM ns=WEEKDAY(dt) MOIS mm=MONTH(dt) ANNEE an=YEAR(dt) DATE dt=DATE(an,mm,jr) 19 Bureautique – vb00mcours, October 21, 2013 20 == Activités Exercices == 9 Exercices : Déclarations et Instructions simples 9.1 Boite de message simple Cet exercice crée une boite de message simple. Action Accédez à VB (par [Alt F11]) ou appelez Développeur>Visual Basic. Action Dans l’explorateur de projets (à gauche), cliquez du bouton droit sur VBAProject, sélectionnez Insertion et cliquez sur Module. Action Une feuille de code vierge apparaı̂t. Écrivez l’en-tête d’une procédure boiteMsg1. Solution simple Tapez la ligne suivante puis appuyez sur Entrée. VB insère un End Sub en met la première lettre des mots-clés en majuscule. sub boiteMsg1() Action Affichez "Bonjour tout le monde!" dans une boite de message. Fixez son titre à "Premier programme". Solution simple Entre le Sub et le End Sub, tapez le mot-clé msgbox et un espace : VB nous aide en nous indiquant la syntaxe à utiliser : – « Prompt » est le contenu de la boite de message. Tapez entre guillemets "Bonjour tout le monde suivi d’une virgule. – VB ouvre une liste déroulante, grâce à laquelle il est possible de choisir un style de boite de message. Pour le moment, nous n’indiquerons rien et donc ajoutez une virgule pour passer au paramètre suivant. – « Title » est l’intitulé de la boite qui apparaı̂t dans la barre bleue supérieure. Tapez entre guillemets "Premier programme". – Les paramètres « HelpFile » et « Context » ne seront pas utilisés. Action Testez votre procédure. Bureautique – vb00mcours, October 21, 2013 21 Solution simple Le curseur doit être positionné dans la procédure. Dans la barre de menu VB, appelez Exécution>Exécuter Sub/User Form (ou tapez F5 ou utilisez le triangle vert de la barre d’outils). Action Validez votre procédure avec la solution. Solution simple Sub boiteMsg1() MsgBox "Bonjour tout le monde", , "Premier programme" End Sub @[vb00-boiteMsg1] Action Notez les points suivants : – Au lancement de la procédure, le fond d’écran est bien revenu dans la grille Excel elle-même et non pas le fond d’écran de Visual Basic : toutes les applications qu’on pourra développer concernant les grilles Excel et uniquement elles. – La boite de message implique que l’utilisateur clique sur le bouton OK pour arrêter le programme. Ce dernier restera en suspens indéfiniment jusqu’à la validation à l’aide du bouton. Bureautique – vb00mcours, October 21, 2013 9.2 22 Boite de message avec retour de valeur Cet exercice crée une boite de message qui renvoie une valeur suite à l’action de l’utilisateur sur la boite de message. Action Écrivez une procédure boiteMsg2 qui affiche la boite de message ci-dessus et qui range en A1 de la feuille active, l’action de l’utilisateur. Action Testez votre procédure. Action Validez votre procédure avec la solution. Solution simple Sub boiteMsg2() ActiveSheet.Range("A1").Value = MsgBox("1 pour OK, 2 pour Annuler", _ vbOKCancel, "Deuxième programme") End Sub @[vb00-boiteMsg2] Explication Voici quelques explications : – La cellule A1 reçoit la valeur de retour de la fonction MsgBox. – vbOKCancel est le paramètre du type de boite à utiliser. Dans notre cas, une alternative entre les deux boutons OK et Annuler. Action Vous constaterez en lançant plusieurs fois votre procédure, que le résultat de l’exécution précédente est restée. Complétez votre procédure de sorte à effacer l’ancien résultat. Solution simple Il suffit d’ajouter la ligne suivante (au début de la procédure) : ActiveSheet.Range("A1").Value = "" Bureautique – vb00mcours, October 21, 2013 9.3 23 Saisie de valeur Cet exercice crée une boite de message avec saisie de valeur. Action Écrivez une procédure boiteMsg3 qui affiche la boite de message ci-dessus et qui range l’entrée de l’utilisateur en A1 de la feuille active. Action Testez votre procédure en tapant du texte et des chiffres. Solution simple InputBox est la fonction VB de saisie de texte. La donnée récupérée est toujours de type String même si le texte tapé par l’utilisateur est un numérique. C’est Excel qui convertit la chaine de caractères numériques en une valeur numérique et la présente cadré à droite. Action Validez votre procédure avec la solution. Solution simple Sub boiteMsg3() ActiveSheet.Range("A1").Value = InputBox("Entrez ce que vous voulez", _ "Troisième programme", "Hello") End Sub @[vb00-boiteMsg3] Bureautique – vb00mcours, October 21, 2013 9.4 24 Utilisation de variables Cet exercice déclare une variable puis crée une boite de message avec saisie de valeur et range la valeur saisie en colonne A et ligne saisie. Action Écrivez une procédure testSaisie1 qui affiche la boite de message ci-dessus et qui range la valeur saisie en colonne A et ligne saisie. Action Testez votre procédure. Action Validez votre procédure avec la solution. Solution simple Sub testSaisie1() Dim vInt As Integer vInt = InputBox("Entrez un entier positif", "Test saisie", 1) ActiveSheet.Range("A" & vInt).Value = vInt End Sub @[vb00-testSaisie1] Action Relancez et tapez volontairement un caractère. VB refuse en dénonçant une erreur de type : Solution simple En fait, il est plus judicieux de déclarer la variable comme étant de type String et de valider ultérieurement son contenu. Bureautique – vb00mcours, October 21, 2013 10 25 Exercices : Instructions structurées 10.1 Saisie validée d’un nombre Cet exercice demande une entrée jusqu’à ce qu’elle représente un nombre. Action Écrivez une procédure testNumeric qui demande une entrée jusqu’à ce qu’elle représente une valeur numérique et range la valeur saisie en A2. Utilisez une structure Do-Until. Action Testez. Action Validez votre procédure avec la solution. Solution simple Sub testNumeric() Dim vStr As String Do vStr = InputBox("Entrez une valeur numérique") Loop Until IsNumeric(vStr) ActiveSheet.Range("A2").Value = vStr End Sub @[vb00-testNumeric1] Action Comme les variables sont par défaut initialisée à vide, écrivez une procédure testNumeric2 qui utilise une structure while. Rangez la valeur saisie en A3. Action Testez en cliquant également sur le bouton Annuler. Note : Pour sortir de boucles infinies, faites [Ctrl Pause]. Action Validez votre procédure avec la solution. Solution simple Sub testNumeric2() Dim vStr As String While Not IsNumeric(vStr) vStr = InputBox("Entrez une valeur numérique") Wend ActiveSheet.Range("A3").Value = vStr End Sub @[vb00-testNumeric2] Bureautique – vb00mcours, October 21, 2013 11 26 Exercices : Procédures et fonctions 11.1 Fonction numeroSemaine Excel intègre une fonction nommée NO.SEMAINE qui peut poser des problèmes. En effet, le numéro de semaine calculé utilise la norme américaine qui veut que la première semaine de l’année soit toujours numérotée 1, quel que soit le nombre de jours de ladite semaine. En Europe, au contraire, la semaine numérotée 1 est la première qui compte au moins quatre jours. Cet exercice crée une fonction qui calcule le numéro en utilisant soit la norme américaine, soit la norme européenne. Action Écrivez l’en-tête d’une fonction numeroSemaine(dateTexte,norme_US_ou_EU) qui prend en paramètres une date dateTexte et une chaine de caractères norme_US_ou_EU et renvoie un entier. Solution simple Action Écrivez le corps de la fonction numeroSemaine. Elle doit retourner le numéro de semaine du premier janvier de l’année considérée. Outil La fonction format(dt,"ww",vbMonday,xxx) présente la date dt sous la forme d’un numéro de semaine (ww) en considérant que la semaine commence le lundi (vbMonday) et la numérotation annuelle dès le premier jour de l’année (si xxx vaut vbFirstJan1) ou ayant au moins quatre jours (si xxx vaut vbFirstFourDays) sur la nouvelle année. Action Validez votre fonction avec la solution. Solution simple Public Function numeroSemaine(ByVal dateTexte As Date, _ ByVal norme_US_ou_EU As String) As Integer If norme_US_ou_EU = "US" Then numeroSemaine = CInt(Format(dateTexte, "ww", vbMonday, vbFirstJan1)) Else numeroSemaine = CInt(Format(dateTexte, "ww", vbMonday, vbFirstFourDays)) End If End Function @[vb00-numeroSemaineA1] Action Dans la grille Excel du même classeur, inscrivez la date 01/01/2011 puis en A2, lancez la fonction via l’Assistant de formule. Bureautique – vb00mcours, October 21, 2013 Action 27 L’assistant fonction ouvre une fenêtre comparable aux siennes : Action Avec ”EU”, la valeur renvoyée est 52 soit la 52è semaine de l’année 2010 et non pas la première semaine de 2011. Avec le paramètre ”US”, la valeur renvoyée est 1. Action Écrivez une procédure test_numeroSemaine qui demande et saisit une date dans une boite de saisie. Par défaut, mettez la date du jour. Bureautique – vb00mcours, October 21, 2013 Action Calculez et affichez le numéro de semaine dans le système européen. Action Testez. Exemple d’exécution. Action Validez votre procédure avec la solution. 28 Solution simple Sub test_numeroSemaine() Dim dt As Date dt = InputBox("Indiquez une date", "Calcul du numéro de semaine", Date) MsgBox ("Le numéro de semaine du " & dt & " est le n˚" & numeroSemaine(dt, "EU")) End Sub @[vb00-testNumeroSemaine1] Bureautique – vb00mcours, October 21, 2013 11.2 29 Procédure transposer Cet exercice réalise la transposition d’une plage sélectionnée. Action Écrivez une procédure transposer qui réalise la transposition d’une plage sélectionnée. Action Validez votre procédure avec la solution. Solution simple Sub transposer() Dim contenu() Dim olig As Long: olig = ActiveCell.Row Dim ocol As Long: ocol = ActiveCell.Column Dim nligs As Long: nligs = Selection.Rows.Count Dim ncols As Long: ncols = Selection.Columns.Count ReDim contenu(0 To nligs, 0 To ncols) Dim ix As Long, jx As Long For ix = 0 To nligs - 1 For jx = 0 To ncols - 1 contenu(ix, jx) = Cells(ix + olig, jx + ocol) Next jx Next ix Selection.ClearContents Cells(olig, ocol).Select For ix = 0 To ncols - 1 For jx = 0 To nligs - 1 Cells(ix + olig, jx + ocol).Formula = contenu(jx, ix) Next jx Next ix End Sub @[vb00-transposerA1] Action Copiez/collez les données brutes fournies dans un onglet renommé transposer. @[va00commerciaux.txt] Action Écrivez une procédure test_transposer qui demande et saisit une plage dans une boite de saisie. Bureautique – vb00mcours, October 21, 2013 Action Transposez la plage sélectionnée. Action Testez. Voici le résultat d’exécution. Action Validez votre procédure avec la solution. 30 Solution simple Sub test_transposer() Dim pl As Range Set pl = Application.InputBox(prompt:="Sélectionnez une plage", Type:=8) pl.Select Call transposer End Sub @[vb00-testTransposer1]