Application VBS
Un livre de Wikibooks.
Cette page est considérée comme une ébauche à compléter. Si vous possédez quelques connaissances sur le sujet, vous pouvez les partager en éditant dès à présent cette page (en cliquant sur le lien « modifier »).
Ressources suggérées : Aucune (vous pouvez indiquer les ressources que vous suggérez qui pourraient aider d'autres personnes à compléter cette page dans le paramètre « ressources » du modèle? engendrant ce cadre)
Pour commencer, VBS comme tous les langages d'édition nécessite un éditeur de texte. Il doit être enregistré avec l'extension .vbs pour être reconnu par MIME et interprété par wscript.exe ou cscript.exe qui se trouvent dans le répertoire %system% de votre OS Windows.
- Pour ecrire un .vbs, il faut au minimum un editeur de texte comme notepad.exe et sauver le fichier en NomProgramme.vbs en mettant Type à "Tous les fichiers".
- Pour avoir une description complète des fonctions et de leurs paramètres, consulter le book VBScript et ses liens externes.
- Qu'est ce qu'un programme :
Un programme est une suite d'instructions qui comporte des TRAITEMENTS sur des DONNEES.
- Légende des abréviations utilisées ici :
| cond | condition |
| arg | argument |
| ins | instruction |
| var | variable |
| cmt | commentaire |
| expr | expression |
| var | variable |
| res | resultat |
| str | string |
| > | Sortie |
| < | Entree |
Sections |
[modifier] Paradigme de programmation
Un programme fonctionne en terme d'entrée de données et de sortie de données. Les fonctions recoivent des données en entrée et les renvoient. Ces entrées et sorties (E/S) permettent à un programme d'être rédigé comme une pile d'instructions ou pipeline traitant/renvoyant des données. Pour concevoir un programme, il faut d'abord vous demander ce que vous voulez faire, c'est à dire le résultat à produire.
Les résultats peuvent être transmis à d'autres (sous)programmes.
- Qu'est-ce qu'une donnée ?
Une donnée est une valeur.
- Qu'est-ce qu'une expression ?
Une expression est un TERME comprenant des operations sur données et qui produisent un résultat.
- Qu'est-ce qu'un résultat ?
Un résultat est une nouvelle donnée.
- Qu'est-ce qu'une instruction ?
Une instruction est une pile d'opérations sur données.
- Qu'est-ce qu'une variable ?
Une variable est une zone temporaire recevant une donnée. Elle doit commencer par une lettre. Une var CONSTANTE est une cellule de donnée permanente pour toute la durée du programme.
- Qu'est-ce qu'une condition ?
Une condition est une expression à TESTER.
- Qu'est-ce qu'un "type" ?
Un type est une façon d'interpréter une donnée. Il y a les nombres, les caractères, les chaines de caractère, les tableaux...
[modifier] Notions élémentaires
- Faire un commentaire
Un commentaire est une ligne du programme qui commence par ' et qui indique au programme qu'il doit la sauter car ne faisant pas partie des [ins].
'ceci est un commentaire ...
- Afficher un string
msgbox "bonjour tout le monde" '>Bonjour tout le monde
- Initialiser une variable <
Il n'est pas encore utile de définir le type de variable, par défaut entre "" c'est du [str] sinon c'est du [nbr].
msg="salut à tous" msgbox msg '>salut à tous
- Introduire une donnée au clavier > sortie
msg=inputbox(msg) msgbox msg '>la valeur que vous avez tapée
La var msg reçoit la saisie clavier et la sort.
- Faire un programme qui calcul toutes les opérations sur 2 [nbr] <
'opération sur 2 < nbr1=inputbox(msg,"introduisez le nbr1") nbr2=inputbox(msg,"introduisez le nbr2") MsgBox "addition:"&nbr1+nbr2&VbCrLf&"multiplication:"&nbr1*nbr2&VbCrLf _ &"division:"&nbr1/nbr2&VbCrLf&"soustraction:"&nbr1-nbr2,vbokonly,"OPERATIONS" '>addition:res '>multiplication:res '>division:res '>soustraction:res
! Dans ce programme, msgbox retourne un string. Ici cette chaîne est constituée par [str]&[expr]&VbCrLf&... VbCrLf passe à une nouvelle ligne et fait un retour chariot. _ permet de couper une [expr] en deux lignes.
- Faire une boucle qui calcule
Une boucle doit TOUJOURS avoir une condition d'arrêt sans quoi elle est infinie.
'BOUCLE qui calcule et > nbr1=1 nbr2=1 For cpt = 1 To 15 Step 1 nbr1=nbr1+1 nbr2=nbr1 mod cpt somme=somme&(nbr2/nbr1)&vbCrlf MsgBox somme Next
! les nbr sont initialisés avant de rentrer dans la boucle qui compte de 1 à 15 en rajoutant 1 à chaque tour de boucle.
- Même boucle avec [cond]
'BOUCLE qui calcule et > cpt=0 '=== toujours initialiser une variable de compteur à zéro Do Until cpt=11 nbr1=nbr1+1 nbr2=nbr1+1 somme=somme&(nbr2/nbr1)&vbCrlf MsgBox somme cpt=cpt+1 Loop
! Ici il a fallu incrémenter de 1 cpt dans cette boucle qui continue jusqu'à ce que cpt=15. Par défaut une var=0=null.
- Test booléen (#res={vrai,faux})
msg=InputBox (msg,"Tapez 1") If msg=1 Then MsgBox "vrai",,"vous avez tapé 1 ?" Else MsgBox "faux",,"vous avez tapé 1 ?"
Si vous tapez 1 dans le prompt c'est >vrai. Pour avoir plusieurs instructions il faut adopter le format suivant :
msg=InputBox (msg,"Tapez 1") If msg=1 Then res="vrai" Else res="faux" End if MsgBox Resultat,,"vous avez tapé 1 ?"
! Ici [res] est la var pour la transmettre > msgbox il ne faut pas la mettre entre "" comme pour les str>[var].
- Test non-booléen (#[res]={[res1],[res2],...})
msg=InputBox (msg,"Tapez 1 ou 2 ou 3") Select Case msg Case 1 MsgBox "un" Case 2 MsgBox "deux" Case 3 MsgBox "trois" Case Else MsgBox "autre" End Select
! Apres le test de msg, il y a plusieurs cas possibles de [res]. Selon que on a entré 1 ou autre chose on est pipé -> vers le Case correspondant au [res] de la [var] msg.
[modifier] Type de variable
- VAR
Une var sous vbs est en mode auto, ainsi lorsque l'on affecte une valeur ou [expr] à [], le [str] est typé en fonction de son contenu ce qui n'est pas toujours vrai en visual basic.
'déclaration Dim var1,var2,var3 var1=10.3 var2="il etait une fois" var3=var1&var2
! On ne peut effectuer d'operation sur var1 et var2 en var3 car elle ne sont pas de même type. Seul la concatenation fonctionne ici.
- CONST
Une constante est une valeur qui ne change pas.
Const1=15 Const2=30 Const3=Const1+Const2
- ARRAY
Un tableau est une var contenant n cellule []. On peut y stocker des [str]. Un array se declare comme une var et recoit des valeurs. Chaque cellule a un indice, ainsi la cellule n°n a l'indice n.
dim MonTableau() 'on definit le nombre de [] de MonTableau Redim MonTableau(10) For cpt=0 to 9 MonTableau(cpt)="Cellule_"&cpt Next MsgBox MonTableau(1) '>Cellule_1
! La premiere cellule a l'indice 0. MonTableau(1) ou la deuxieme cellule de MonTableau aura donc pour [str]="Cellule_1".
[modifier] Fonctions et procédures
A partir d'ici, pour une meilleure ecriture et lisibilité des programmes, il est conseillé de séparer les parties déclaration et instruction :
- [var]
- [ins]
Les procédures et les fonctions constituent des sous programmes permettant de définir une pile d'[ins] qui ont pour point d'entrée le nom. Pour les executer il suffit d'appeler la méthode Call Nom([arg]) ou simplement Nom([]) si elle ne comporte pas d'[arg].Les [arg]/datas sont à passer en parametres selon leur définition.
Les fonctions et procédures sont publiques (Public) par défaut, c'est-à-dire disponible dans l'ensemble d'une application VBScript. Public Default est utilisé pour indiquer que la fonction ou la procédure est utilisée par défaut dans une classe. Private signifie que la fonction ou la procédure ne sera valable que dans l'espace du nom global qui l'encapsule, par exemple une classe ou le script en cours.
Pour déclarer leur nom, attention de ne pas prendre un nom déjà attribué. Voir librairie VBScript.
[modifier] procedure
Sub permet de déclarer nom [args] et [ins] formant la procédure. Son but est d'exécuter des [ins].
- [Public [Default] | Private] Sub Nom_Procédure [(arg1,arg2,...)]
- [ins]
- End Sub
- Sans arguments
'Afficher l'heure système Sub heure() MsgBox Now() End Sub heure()
On déclare ici la procedure heure ([]) - sans [arg] - qui > now() - procedure affichant heure sys. On appelle ensuite l'execution de cette sub/procedure.
- Avec arguments
'calc + et > Sub adi(a,b) Dim somme somme=a+b MsgBox somme End Sub Call adi(15,20) '>35
Vous remarquez ici que Dim déclare [somme] en tête du sous-programme adi qui est appelé avec deux args/paramètres définis par adi(a,b).
[modifier] fonction
Function permet de déclarer nom [args] et [ins] formant la fonction. Son but est de retourner une valeur. Sinon, autant utiliser une procédure.
- [Public [Default] | Private] Function Nom_Fonction [(arg1,arg2,...)]
- [ins]
- Nom_fonction=[expr]
- End Function
La fonction à Nom_Fonction comme point d'entrée () et retourne Nom_Fonction=[expr] en sortie(). Vous comprenez maintenant ? Un programme c'est un pipeline, les [res] ne font que passer d'un bout à l'autre jusqu'au terminus, l'ecran ou un fichier ou autre :)
! Il est impossible de créer Function à l'intérieur de Sub et réciproquement.
- Sans arg
Function Addition1() a=10 b=15 Addition1=a+b End Function MsgBox Addition1()
- Avec arg
Function Addition(val1, val2) Addition = val1 + val2 End Function MsgBox Addition(10,15) '>25
- Autre exemple
'calc (a-b)/c > Function calc(a,b,c) calc=(a-b)/Round(c) End Function MsgBox calc(15,10,2.5)&vbcrlf&Abs(calc(10,20,30))
! Dans calc() Round retourne directement l'arrondi. A la ligne 5, le pipe s'effectue de la plus petite parenthese à l'interieur, ici calc(10,20,30) pour retourner sa valeur a Abs() qui retourne sa valeur en même temps que calc(15,10,2.5) > [str] > MsgBox qui affiche [str]. C'est simple comme 'Hello World'.
[modifier] Classe d'objets
En POO, une classe encapsule des données et [ins] définissant des propriétés [var] et méthodes [ins]. Les classes permettent de construire des objets types à réutiliser. L'instanciation consiste à créer un nouvel objet de classe. Un objet est donc une instance de classe.
- Class NomDeClasse
- [var]
- Private Sub Class_Initialize()
- [ins]
- End Sub
- Private Sub Class_Terminate()
- [ins]
- End Sub
- Public Function NomMethode([arg])
- [ins]
- End Function
- End Class
- Application
'------------------------------------
'- ouvre une class et cree tableau -
'- place des articles dedans -
'- affiche l'article par numero -
'------------------------------------
On Error Resume Next
'déclaration de la classe
class strArticle
Private index, article()
'Initialise la classe
Private Sub Class_Initialize()
'définit 50 champs ds tableau
redim article(50)
index=0
End Sub
'Termine la classe
Private Sub Class_Terminate()
erase article
End Sub
'public car devant etre accessible hors classe
public default Sub ajout(Val)
article(index)=Val
index=index+1
if index>50 then
MsgBox "plus de place dans tableau"
end if
end sub
'public car devant etre accessible hors classe
public Function Affiche(idx)
MsgBox article(idx)
end function
end class
'initialisation d'une nouvelle classe
Set cat= new strArticle
'place les article dans le tableau
For cpt = 1 to 50
cat.ajout("ARTICLE_"&cpt)
Next
msg=0
While (IsNumeric(msg))
msg=InputBox(msg,"Choisissez l'article à sortir / [!0-9] pour sortir")
cat.Affiche(msg-1)
Wend
Set cat=nothing
! On initialise et on termine une classe pour libérer la ressource apres usage. On declare plusieurs fonctions qui sont les methodes à appeler. Les Init et Termin sont en private car utile que dans la classe, en revanche toute autre function ou sub doit être public pour l'E/S hors classe.
Pour utiliser une classe:
- on initialise d'abord l'objet obj= new NomDeClass;
- on appele la methode dans l'objet obj.NomDeFonction([arg]);
- comme dans fonction ordinaire [arg] [var] [expr] < en parametre;
- Voir cet article
[modifier] E/S fichier
VBS seul ne permet pas d'écrire des fichiers. Pour ce faire il faut utiliser WSH (Windows Script Host).
[modifier] LIENS INTERNES
Références VBScript

