Ce langage peut être utilisé indépendamment d'ActiveX, de même que la technologie ActiveX peut être exploitée sans VBScript (cf. cours Access VBA chapitre 7).
Inclure le code VBScript dans une page HTML
VBS est un langage de type script, interprété par un navigateur (typiquement MSIE). Il est dérivé de VBA dont il reprend l'essentiel des instructions. Un programmeur connaissant ce langage sera en terrain familier. On débute un script VBS par une balise <SCRIPT> dans une page web. Cette balise admet un attribut LANGUAGE="langage" permettant de spécifier le type de langage utilisé. Pour VBScript, on indique "VBS". On indique le contenu du script dans la zone d'application de la balise <SCRIPT>. Voici comment on peut inclure un script dans une page web :
<HTML> <HEAD><TITLE>Exemple de script VBS</TITLE> <SCRIPT LANGUAGE="VBS"> <!-- Function Siecle(UneDate) If IsDate(UneDate) Then Siecle = ((Year(UneDate) - 1) \ 100 + 1 Else Siecle = Null End If End Function --> </SCRIPT> </HEAD> <BODY>
Remarques:
<HTML><HEAD> <SCRIPT LANGUAGE="VBScript"> Sub Bouton1_OnClick MsgBox "Nous sommes le " & Date &" Jusqu'à l'an 2000 il reste "_ & DateDiff("d",Date,#1/1/2000#) & " jours" ,vbOKOnly + vbExclamation End Sub </SCRIPT> </HEAD> . . . <FORM><INPUT NAME="Bouton1" TYPE="BUTTON" VALUE="Cliquez ici"></FORM> . . .
Haut du document | Trucs et Astuces MS-Access |
Variables et types de données
On déclare une variable en la précédant du mot clé Dim. Cette instruction peut être suivie d'un ou plusieurs noms de variables, séparés par des virgules. Les noms de variables doivent respecter des règles classiques, que nous ne reproduirons pas ici.
En VBS, toutes les variables sont de type variant. On peut y affecter indifféremment n'importe quel type de donnée, que cela soit une chaîne de caractères ou une valeur numérique. On définit cependant des sous-types car une fois qu'une affectation a été effectuée, la variable concernée adopte le (sous-) type de donnée qu'elle reçoit. Les principaux sous-types sont les suivants :
Array |
pour les tableaux, |
Boolean |
Valeur booléenne, contient Vrai ou Faux |
Byte |
Octet (8 bits), |
Date Time |
Contient une date entre le 1.1.100 et le 31.12.9999 Contient l'heure |
Double |
Valeur numérique double précision, |
Empty |
Variant, valeur nulle (0 pour les types numériques et "" pour les chaînes), |
Integer |
Entier sur 16 bits, |
Long |
Entier sur 32 bits, |
Null |
Variant ne contient pas de données valides |
Object |
Objet de type ActiveX ou non, |
String |
Chaîne de caractères. |
Bien que les variables n'aient pas de type spécifié dans leur déclaration, il n'est pas toujours possible de les utiliser dans une même expression (comme par exemple l'addition d'un entier à une chaîne). C'est pourquoi VBS possède des fonctions permettant de convertir un type de donnée à un autre. En voici quelques unes:
CBool(expression) |
convertit en booléen une expression numérique, |
CByte(expression) |
convertit en octet une expression, |
CDbl(expression) |
Expression en double précision, |
Cint(expression) |
expression en entier, |
CLng(expression) |
expression en entier long, |
Cstr(expression) |
Expression en chaîne, |
Str(valeur_numérique) |
Valeur numérique en chaîne, |
Val(chaîne) : chaîne |
valeur numérique. |
Il en existe d'autres que nous n'avons pas citées.
Autre type important: les tableaux. On définit un tableau en VBS, toujours à l'aide de la commande Dim, mais en indiquant un entier entre parenthèses après le nom de celui-ci.
Exemple : Dim Tableau(10)
définit un tableau de..11 éléments. En effet, bien que le 1er indice soit 0, on n'indique pas en argument la taille du tableau mais le numéro du dernier élément (soit la taille du tableau - 1).
A noter que VBS propose une extension intéressante des tableaux : les tableaux dynamiques; ils sont définis en n'indiquant pas de taille en argument (parenthèses vides). Pour utiliser de tels tableaux, on doit cependant indiquer leur nombre d'éléments, comme pour un tableau statique, mais en utilisant cette fois le mot clé ReDim. On peut ainsi spécifier plusieurs fois le mot clé ReDim en augmentant la taille du tableau à chaque fois.
Constantes
Comme en VBA les constantes numériques, chaînes de caractères et dates sont définies en utilisant l'instruction Const.
Exemples:
Const conDistance = 300
Const conTxtStock = "cet article est indisponible pour le moment "
Const conDateLimite = #31-12-1999#
En mettant les noms des constantes en majuscules, on évite la confusion avec des variables.
Opérateurs
Les opérateurs disponibles en VBS sont ceux rencontrés dans les langages de programmation classiques, avec cependant quelques différences par rapport aux langages comme le C ou Java, mais qui restent absolument conformes à ce que l'on rencontre dans le VBA et le Visual Basic.
Par exemple, l'opérateur d'affectation et celui d'égalité sont les mêmes : "=". De plus, l'opérateur de différence est "<>". D'autre part, les opérateurs logiques s'expriment en toutes lettres, comme par exemple : And, Or, etc. Enfin, on concatène deux chaînes de caractères en utilisant l'opérateur &.
L'ordre de priorité de l'exécution des opérations est identique à celui des autres langages.
Haut du document | Trucs et Astuces MS-Access |
Boucles et structures conditionnelles
Listons rapidement les différentes structures conditionnelles et les boucles utilisables en VBS.
If condition Then ' instructions Else ' instructions End If
Comme dans tous les langages, le Else est facultatif. Si on a plusieurs conditions différentes à tester on utilise la clause ElseIf.
Quand la condition doit être testée de plusieurs manières on utilisera avantageusement:
Exemple:
Dim Couleur, MaVar Sub ChangeCouleurFond (Color) MaVar = lcase (Couleur) Select Case MaVar Case "rouge" document.bgColor = "rouge" Case "vert" document.bgColor = "vert" Case "bleu" document.bgColor = "bleu" Case Else MsgBox "choisissez rouge ou vert ou bleu" End Select End Sub
Concernant les répétitives, il en existe plusieurs comme en VBA :
Do While condition ' instructions Loop
Do ' instructions Loop While condition
Do Until condition ' instructions Loop
Suivant le cas, la condition est exécutée au début ou à la fin de la boucle. D'autre part, on peut sortir d'une boucle en utilisant l'instruction Exit Do.
Quand on connaît le nombre d'itérations, on utilise la boucle "For" :
For compteur = valeur_début To valeur_fin ' instructions pouvant utiliser la valeur de la variable "compteur" Next
Notez qu'il existe également une instruction Exit For permettant de sortir d'une boucle For.
Si on doit traiter chaque élément d'une collection d'objets, on utilise de préférence For Each . . . Next
Par exemple on va placer le contenu d'un objet Dictionary (tableau de stockage) dans plusieurs zones de texte:
<HEAD><TITLE>Elements d'une collection</TITLE></HEAD> <SCRIPT LANGUAGE="VBScript"> <!-- Sub cmdChanger_OnClick Dim d Set d = CreateObject("Scripting.Dictionary") ' On ajoute des clés et du texte d.Add "0", "Paris" d.Add "1", "Bordeaux" d.Add "2", "Lyon" For Each I in d Document.frmGeo.Elements(I).Value = d.Item(I) Next End Sub --> </SCRIPT> <BODY> <CENTER> <FORM NAME="frmGeo" <Input Type = "Text"><p> <Input Type = "Text"><p> <Input Type = "Text"><p> <Input Type = "Text"><p> <Input Type = "Button" NAME="cmdChanger" VALUE="Cliquez ici"><p> </FORM> </CENTER> </BODY>
Haut du document | Trucs et Astuces MS-Access |
Procédures et Fonctions
Contrairement aux langages comme le C ou Java, on distingue en VBS deux types de modules: les procédures et les fonctions.
Une procédure est un petit programme qui ne renvoie aucune valeur. Elle peut recevoir des arguments séparés par des virgules (variables, expressions, constantes) passées par une procédure appelante. Si elle n'a pas d'arguments à traiter on doit faire suivre son nom d'une paire de parenthèses.
Exemple:
Sub ConvertTemp() ' La valeur est calculée par la fonction Celsius. temp = InputBox("Entrez la température en degrés F.", 1) MsgBox "La température est " & Celsius(temp) & " degrés C." End Sub
Une fonction est définie par les mots clés Function et End. Elle retourne toujours une valeur de type Variant en assigant celle-ci à son nom.
Exemple:
Function Celsius(DegrésF) Celsius = (DegrésF - 32) * 5 / 9 End Function
Dans cet exemple, une variable nommée DegrésF contenant la valeur de l'argument, est passée à la fonction qui le traite. On constate qu'il n'existe pas d'instruction du type return. En effet, pour renvoyer une valeur au programme appelant, on affecte tout simplement cette valeur à une variable portant le nom de la fonction. Le résultat est donc retourné à la procédure appelante et affiché dans une boîte de message.
Rappelons qu'il est vivement conseillé de mettre les procédures et fonctions d'un programme dans l'en-tête du document HTML qui le contient.
Haut du document | Trucs et Astuces MS-Access |
Applications
VBS a deux applications principales :
Nous verrons comment utiliser VBS avec ActiveX dans un autre cours. Voici un petit exemple de vérification d'une rubrique d'un formulaire intégré dans une page HTML:
<HTML> <HEAD> <BODY BGCOLOR="#fffff0"> <SCRIPT LANGUAGE="VBScript"> <!-- Sub Verif_OnClick Dim f Set f = Document.frmSaisie If f.Nombre.Value < 1 Or f.Nombre.Value > 99 Then MsgBox "Entrez un nombre entre 1 et 99 !" Else MsgBox "Saisie Ok !" End If End Sub --> </SCRIPT> </HEAD> <BODY> <H1>Formulaire</H1> <BR> <FORM NAME="frmSaisie"> Entrez un nombre entre 1 et 99 : <INPUT NAME="Nombre" TYPE="TEXT" SIZE="2"> <INPUT NAME="Verif" TYPE="BUTTON" VALUE="Valider"> </FORM> </BODY> </HTML>
Cet exemple crée un formulaire HTML comprenant une zone de saisie et un bouton de commande. On vérifie les données saisies dans la zone prévue à cet effet lorsque l'usager clique sur le bouton, en appelant une procédure portant le nom Verif_OnClick. Notons que le nom de cette procédure est le nom du bouton (Verif) suivi de "_OnClick" indiquant que la procédure est appelée quand l'utilisateur clique sur le bouton en question. Dans ce cas l'appel de la procédure Verif_OnClick est implicite. Plus avant nous verrons qu'il y a trois méthodes pour appeler une procédure associée à une page Web.
Pour visualiser ce formulaire et tester cliquez ici.
Analysons le contenu de cette procédure. D'abord, on définit une variable f à laquelle on attribue une référence vers le formulaire contenu dans la page HTML, via l'instruction Set. Le nom de celui-ci est Document.frmSaisie, "Document" désignant le document courant, tandis que "frmSaisie" est le nom que nous avons donné au formulaire dans la balise <FORM>. Notez l'importance de l'opérateur ".". Il sépare les noms de différents objets apparaissant dans une page HTML. On l'utilise également pour faire référence à une propriété d'un contrôle ActiveX, comme nous le verrons plus loin.
L'instruction Set référence la variable f pour simplifier la vérification de la zone de saisie du formulaire. Autrement il faudrait écrire: Document.frmSaisie.Nombre.Value chaque fois que l'on veut traiter le contenu de la zone de saisie.
Ensuite on teste la valeur de la rubrique Nombre du formulaire précité, en accédant à sa propriété Value. Si cette valeur est incorrecte, on affiche un message d'erreur. Si elle est correcte, on l'indique aussi à l'utilisateur pour le sécuriser.
Les trois méthodes d'appel d'une procédure de page Web
On peut appeler une procédure de manière explicite, implicite depuis la balise <FORM> du langage HTML, ou encore avec la commande FOR ... EVENT du langage VBScript.
Exemples:
<HTML><BODY BGCOLOR="#fffff0"> <H1> Exemples d'appels de procédures VBScript</H1> <SCRIPT LANGUAGE = "VBScript"> Sub Explicite alert "Ce script a été appelé de manière explicite." End Sub Sub boutonImplicite_onClick msgbox "Ce script a été appelé de manière implicite." End Sub </SCRIPT> <FORM METHOD="POST"> <INPUT TYPE="Button" NAME="boutonExplicite" VALUE="Methode 1: Appel explicite de la procédure VBScript" onClick="Explicite"> <P> <INPUT TYPE="Button" NAME="boutonImplicite" VALUE="Methode 2: Appel implicite de la procédure VBScrip"> <P> <INPUT TYPE="Button" NAME="boutonScriptFor" VALUE="Methode 3: Scripting avec la syntaxe FOR...EVENT"> <SCRIPT FOR="boutonScriptFor" EVENT="onClick" LANGUAGE="VBScript"> Alert "Ce script est incorporé au contrôle." </SCRIPT> </FORM> </BODY> </HTML>
Pour visualiser ce formulaire et tester cliquez ici.
Cette page comporte trois boutons de commande, chacun utilisant une technique d'appel de procédure VBScript différente.
Le premier bloc SCRIPT inclut deux procédures. La seconde a le mot réservé onClick à la fin du nom comme dans l'exemple précédent. Nous avons ici un appel implicite de la procédure boutonImplicite_onClick, car il n'y a pas d'appel explicite de cette procédure dans la définition du "boutonImplicite" de la balise <FORM>..La première partie du nom de la procédure l'associe au contrôle et la seconde à un événement.
Le premier bouton de commande "boutonExplicite" appelle une procédure de manière explicite en associant le nom de la procédure à un événement dans sa définition.
Le dernier bouton "boutonScriptFor" utilise une syntaxe spéciale qui nous permet de dédier un bloc SCRIPT à un événement de contrôle.
Quelle est la meilleure méthode ?
La méthode de l'appel implicite facilite la lecture du code et par suite son entretien.
La méthode Script For - Event est utile si le bloc ne fait qu'appeler un programme externe ou permet de naviguer vers un autre document HTML.
Nous allons maintenant étudier un exemple de génération automatique de valeur et de vérification de la saisie de données obligatoires.
<HTML><HEAD> <TITLE>Validation dans formulaire avec VBScript</TITLE> <SCRIPT LANGUAGE="VBScript"> Dim vbCrLf vbCrLf = Chr(10) & Chr(13) Function isNull (str) If (str.Value="") Then isNull = True Else isNull = False End If End Function 'Fonction pour vérifier la saisie de la rubrique obligatoire: Function checkCodeUsager(str) If (isNull(str)) Then alert "Vous devez entrer le Code Usager" checkCodeUsager = False Exit Function Else checkCodeUsager = True End If End Function 'Section des procédures événementielles: Sub Page_Initialize Document.frmCommandes.txtQuantity.Value = 1000 Document.frmCommandes.txtCodeUsager.SetFocus End Sub Sub btnCommandez_Click msgbox "Pour confirmer votre commande: " & vbCrLf & "Nom: " &_ Document.frmCommandes.txtNom.Value & vbCrLf & "Quantité commandée: " &_ Document.frmCommandes.txtQuantity.Value End Sub </SCRIPT> </HEAD> <BODY LANGUAGE="VBScript" BGCOLOR="#fffff0" OnLoad = Page_Initialize> <CENTER><H1> Network Computing International </H1> <H2>Exemple de Validation avec VBScript</H2></CENTER> Bienvenue à notre système de commandes par Internet. Notez que les rubriques "Code Usager" et "Quantité" sont requises pour un traitement correct de votre commande. <FORM NAME = "frmCommandes" METHOD = "Post"> <PRE> CodeUsager: <INPUT TYPE="TEXT" NAME="txtCodeUsager" VALUE="" onBlur="checkCodeUsager(txtCodeUsager)"> Votre Nom: <INPUT TYPE="TEXT" NAME="txtNom"> Votre Adresse: <INPUT TYPE="TEXT" NAME="txtAdresse"> Quantité: <INPUT TYPE="TEXT" NAME="txtQuantity" Value="" > </PRE> <INPUT TYPE="Button" VALUE="Commandez" Name ="btnCommandez" Onclick="btnCommandez_Click"> <INPUT TYPE="reset" VALUE="Initialisez Formulaire"> </FORM> </P></BODY></HTML>
Dans la balise BODY on appelle une procédure pour agir sur un document ouvert et initialiser une rubrique à une valeur par défaut. Ici on utilise l'événement onBlur (analogue à LostFocus) pour valider au niveau de la machine Client. La fonction isNull est utilisée pour s'assurer que l'usager entre une valeur non nulle.
Pour visualiser ce formulaire et tester cliquez ici.
Haut du document | Trucs et Astuces MS-Access |
Création de formulaires
interactifs
Pour compléter les exemples précédents on va expliquer plus en détail comment créer des formulaires interactifs dans vos pages Internet via VBS. De tels formulaires permettent aux visiteurs de recevoir et de fournir des informations.
On va d'abord étudier la balise <FORM>, qui constitue
la pierre angulaire des formulaires interactifs. Ensuite nous étudierons 8
différents types de rubriques que vous pouvez incorporer dans vos formulaires,
soit les zones de texte, cases à cocher, boutons radio, zones de liste,
étiquettes, zones invisibles, mots de passe et zones de chargement de
fichiers.
Puis nous examinerons comment utiliser les boutons
Envoyer, Image et Actualiser. Ensuite nous verrons comment créer des boutons de
formulaire génériques.
Finalement, nous verrons comment traiter les
informations obtenues via vos formulaires.
La balise FORM
Tous les formulaires HTML sont créés avec la balise
<FORM>
<form method="xxxx"
action="xxxx">
(ici on placera les contrôles de formulaire)
</form>
L'attribut method définit
comment l'information saisie par l'usager au moyen du formulaire est envoyée au
serveur. On a deux options:
GET |
Envoie les données du formulaire en qualité d'élément de l'adresse URL (par exemple script.cgi?name=Laurent&email=Laurent@Laurent.com). C'est l'option par défaut. Elle est efficace pour de petites quantités de données (moins de 1024 octets), par exemple lancer une requête de recherche. |
POST |
Envoie les données du formulaire dans le flux HTTP. Ceci est recommendé pour la plupart des types de formulaires(questionnaires,catalogues). Contrairement à la méthode GET, l'usager ne peut pas actualiser la page de résultats - habituellement, l'usager obtient une boîte de dialogue lui demandant s'il veut envoyer les données une nouvelle fois |
Adresse Email:
Haut du document | Trucs et Astuces MS-Access |