FAQ ASPConsultez toutes les FAQ

Nombre d'auteurs : 6, nombre de questions : 44, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireQuestions diverses

Il existe deux types de fonctions : Dans le 1er cas, on utilise le mot-clé Function. Dans le 2ème cas, on peut utiliser indifférement le mot-clé Function ou le mot-clé Sub, même si par convention on utilise plutôt Sub. On parle alors de procédure. Et comme vous le signifie le message d'erreur, l'appel d'une procédure (i.e. d'une fonction sans valeur de retour) s'écrit sans parenthèses. Une alternative est d'utiliser l'instruction Call et dans ce cas alors il faut mettre des parenthèses.

  • les fonctions avec valeur de retour.
  • les fonctions sans valeur de retour.
 
Sélectionnez
<%
Sub Ecrire_Texte_Nfois(texte, Nfois)
  Dim i
  For i=1 To Nfois
    Response.Write "Le texte est " & texte & "<br>"
  Next
End Sub
 
' 1ère méthode
Ecrire_Texte_Nfois "toto", 3
 
' 2ème méthode
Call Ecrire_Texte_Nfois("toto", 3)
%>
Créé le 22 février 2013  par Florian

L'un des grands manques de VBScript est la possibilité de commenter de façon simple plusieurs lignes de code. En effet, dans la majorité des langages, il existe des délimiteurs qui permettent de commenter un bloc de code, comme /* ... */ par exemple. En VBScript, il est nécéssaire de commenter chaque ligne avec le caractère ' ou l'instruction REM. Voici une astuce pour commenter malgré tout un bloc de code sans commenter chaque ligne, opération qui peut s'avérer fastidieuse. Il suffit d'encapsuler le code en question dans une procédure... et de ne pas appeler cette procédure.

 
Sélectionnez
<%
...
Sub bloc_de_code_a_commenter
  ...
  ...
  ...
End Sub
...
%>

Et lorsque l'on veut à nouveau tester le bloc de code, il suffit de commenter Sub et End Sub

 
Sélectionnez
<%
...
' Sub bloc_de_code_a_commenter
  ...
  ...
  ...
' End Sub
...
%>
Créé le 22 février 2013  par Florian

Nota : Les explications suivantes concernent le langage vbscript.
Il y a deux cas de figure à considérer : Les tableaux statiques :
On utilise l'instruction Dim en précisant le nombre de dimensions (jusqu'à 60 !) et l'indice maximum de chaque dimension. Comme l'indice du premier élément est 0, le nombre d'éléments d'une dimension est donc indice max + 1.

  • les tableaux statiques : tableaux dont le nombre d'éléments n'évolue pas au cours du script.
  • les tableaux dynamiques : tableaux redimensionnables.
 
Sélectionnez
<%
Dim montableau_1(3) ' déclaration d'un tableau statique à une dimension contenant 4 éléments
montableau_1(0) = "élément 0" ' définition de la valeur du 1er élément du tableau
montableau_1(1) = "élément 1"
montableau_1(2) = "élément 2"
montableau_1(3) = "élément 3"
 
Dim montableau_2(3,2) ' déclaration d'un tableau statique à 2 dimensions : 4 lignes, 3 colonnes
montableau_2(0,0) = "ligne0 - col0" : montableau_2(0,1) = "ligne0 - col1" : montableau_2(0,2) = "ligne0 - col2"
montableau_2(1,0) = "ligne1 - col0" : montableau_2(1,1) = "ligne1 - col1" : montableau_2(1,2) = "ligne1 - col2"
montableau_2(2,0) = "ligne2 - col0" : montableau_2(2,1) = "ligne2 - col1" : montableau_2(2,2) = "ligne2 - col2"
montableau_2(3,0) = "ligne3 - col0" : montableau_2(3,1) = "ligne3 - col1" : montableau_2(3,2) = "ligne3 - col2"
%>

Les tableaux dynamiques :
Il est possible de déclarer un tableau dynamique de 2 façons : en le déclarant à l'aide de l'instruction Dim mais sans préciser le nombre d'éléments ni de dimensions, puis en lui donnant ses dimensions avec l'instruction Redim, ou bien en le déclarant directement avec l'instruction Redim.

 
Sélectionnez
<% Dim montableau_1() ' déclaration d'un tableau dynamique
Redim montableau_1(3) ' redimensionnement du tableau
montableau_1(0) = "élément 0" : montableau_1(1) = "élément 1" : montableau_1(2) = "élément 2" : montableau_1(3) = "élément 3"
 
Redim montableau_2(3,2) ' déclaration d'un tableau dynamique à 2 dimensions : 4 lignes, 3 colonnes
For l=0 to Ubound(montableau_2, 1) ' Ubound(montableau_2, 1) =>Limite supérieure de la dimension 1 du tableau
  For c=0 to Ubound(montableau_2, 2) ' Ubound(montableau_2, 2) =>Limite supérieure de la dimension 2 du tableau
    montableau_2(l,c) = "ligne" & l & " - col" & c
  Next
Next
 
' redimensionnement du tableau montableau_1 sans conserver ses valeurs actuelles
Redim montableau_1(9) ' montableau_1 est maintenant un tableau à une dimension de 10 éléments
 
' redimensionnement du tableau montableau_2 en conservant ses valeurs actuelles
Redim Preserve montableau_2(3,3) ' montableau_2 est maintenant un tableau à 2 dimensions : 4 lignes, 4 colonnes
%>

Plusieurs remarques concernant le redimensionnement : Une autre possibilité de déclarer un tableau dynamique est l'utilisation de la fonction Array() qui va retourner un Variant contenant un tableau, au lieu d'avoir un tableau de Variant. Pour bien appréhender cette nuance, comparez le code pour l'affichage avec celui que vous écririez pour le tableau montableau_2.

  • Pour calculer la limite supérieure d'une dimension, on utilise la fonction Ubound(nomtableau, dimension) (ceci est vrai également pour les tableaux statiques).
  • Le mot-clé Preserve permet lors du redimensionnement de conserver les valeurs actuelles du tableau.
  • Si vous donnez un indice maximum inférieur à celui utilisé avant le redimensionnement, les valeurs contenues dans les éléments éliminés sont perdues.
  • Lors de l'utilisation du mot-clé Preserve sur un tableau à plusieurs dimensions, seule la dernière dimension peut être redimensionnée.
  • Si vous n'utilisez pas le mot-clé Preserve lors du redimensionnement, il est possible d'ajouter ou d'enlever des dimensions au tableau (passer par exemple d'un tableau à une dimension à un tableau à 2 dimensions).
  • Il est possible d'utiliser l'instruction Redim dans une structure itérative, toutefois ce n'est pas conseillé.
 
Sélectionnez
<%
Dim montableau
montableau = array(array("l1un", "l1deux", "l1trois"), array("l2un", "l2deux", "l2trois"), array("l3un", "l3deux", "l3trois"))
 
' affichage du contenu de montableau
For i=0 to Ubound(montableau,1)
  For j=0 to Ubound(montableau(i),1)
    Response.Write "montableau(" & i & ")("& j & ") : " & montableau(i)(j) & "<br>"
  Next
Next
%>
Créé le 22 février 2013  par Florian

En ASP, il n'est pas possible de choisir la cible (cadre/frame) dans laquelle effectuer une redirection avec la méthode Redirect de l'objet Response. La redirection va forcément s'effectuer dans celle dans laquelle se trouve le fichier qui contient cette instruction. Donc si l'on veut rediriger dans une autre frame, il faut soit charger la page qui contient l'instruction de redirection déjà dans la bonne frame, soit faire cela en javascript.
Une solution alternative apparue avec ASP 3.0 est d'utiliser la méthode Transfer de l'objet Server. Cette instruction va, comme son nom l'indique, suspendre l'exécution de la page en cours et transférer le contrôle à la page spécifiée.

 
Sélectionnez
<%
' du code de la page en cours
Server.Transfer("url_autre_page.asp")
' du code non exécuté
%>

Alternative : la méthode Execute de l'objet Server qui, contrairement à Transfer, va redonner la main à la page de départ. Voir un exemple de cette méthode ici .

Créé le 22 février 2013  par Florian

Il faut pour cela utiliser les méthodes du composant WSH(Windows Scripting Host).
Voici un aperçu des différentes versions installées par défaut suivant le système d'exploitation utilisé

Système d'exploitation 1.0 2.0 5.6
Microsoft Windows 98 X    
Microsoft Windows NT 4 Option Pack X    
Microsoft Windows 2000   X  
Microsoft Windows XP     X

Vous pouvez toutefois installer la dernière version disponible dans les liens du post-it correspondant dans le forum ASP. Voici un exemple qui va lancer une instance de notepad sur le serveur

 
Sélectionnez
<%
Dim WshShell
' déclaration d'un objet WshShell
Set WshShell = Server.CreateObject("Wscript.Shell")
 
' lancement de notepad sur le serveur
WshShell.Run "%windir%\notepad "
 
' destruction de l'objet WshShell
Set WshShell = nothing
%>

Voici un autre exemple qui va lancer une instance de l'interpréteur de commande, changer le chemin pour qu'il pointe sur C, exécuter la commande DIR et envoyer le résultat dans le fichier ArboC.txt sur C

 
Sélectionnez
<%
Dim WshShell
Set WshShell = Server.CreateObject("Wscript.Shell")
 
WshShell.Run "cmd /C CD C:\ & DIR>ArboC.txt"
 
Set WshShell=nothing
%>

Attention, dans l'exemple avec notepad, vous ne verrez pas le bloc-note s'ouvrir. Il ne faut en effet pas oublier ici que tout se passe sur le serveur. Il faut donc bien savoir ce que vous faites avant d'utiliser ces instructions.
Il est toutefois possible d'exécuter ces instructions sur le client.

 
Sélectionnez
<script language="vbscript">
Dim WshShell
 
' déclaration d'un objet WshShell
Set WshShell = CreateObject("Wscript.Shell")
 
' lancement de notepad sur le client
WshShell.Run "%windir%\notepad "
 
' destruction de l'objet WshShell
Set WshShell = nothing
</script>

Cependant vous devez savoir que ce code ne s'effectuera pas sur le client sans un message d'alerte de la part du navigateur, comme montré sur l'image suivante.

Image non disponible

En effet, l'exécution de ce genre de code représente une agression qui peut engendrer de gros trous de sécurité. C'est pour cela que vous ne pouvez (devez) pas vous appuyer sur ce genre de code client, beaucoup d'utilisateurs étant susceptibles de désactiver purement et simplement l'exécution de code activeX dans leur navigateur. De plus, seul Internet Explorer sera capable d'interpréter ce code.
Une dernière remarque : les codes présentés sont écrits en vbscript, mais il est tout à fait possible d'utiliser le JScript pour obtenir les mêmes résultats.

Créé le 22 février 2013  par Florian

Pour créer un fichier word :

 
Sélectionnez
<% ' CREATE WORD DOCUMENT
 
    Set WordApp = CreateObject("word.application")
    Set WordDoc = WordApp.Documents.Add()
 
    WordApp.Application.Visible = False
 
    Set MyRange1 = WordDoc.Paragraphs.Add.Range
    MyRange1.InsertBefore("Appraisal Form")    
    MyRange1.Style = "Heading 1"    
 
    Set MyRange1 = WordDoc.Paragraphs.Add.Range
    MyRange1.InsertBefore("Manager: " & Manager & vbcrlf & "Appraisee: " & Appraisee)
    MyRange1.Font.Bold = true
 
    Set MyRange1 = WordDoc.Paragraphs.Add.Range
    MyRange1.InsertBefore(vbcrlf & "Please fill in all the required sections and return to HR via the internal mail system.")
 
' Set the directory location to store the generated documents
    WordDocPath = Server.MapPath("\alastair\appraisals\forms")
            ' Use the unique session ID as the filename.
    WordDoc.SaveAs WordDocPath & "\" & session.sessionID & ".doc"
WordDoc.Close
WordApp.Quit
 
Set WordDoc = Nothing
Set WordApp = Nothing %>

Note : MS Word doit être installé sur le serveur.

Créé le 22 février 2013  par Gynsu

Pour supprimer (ou ne pas garder) la page dans le cache du navigateur, on peut utiliser ceci :

 
Sélectionnez
Response.Expires = -1
Response.AddHeader "Pragma", "no-cache"
Response.AddHeader "cache-control", "no-store"
Créé le 22 février 2013  par Jérôme

Pour affecter une variable avec un objet, on utilise le mot-clé SET.
On applique donc ce principe à notre fonction :

 
Sélectionnez
function retourneObjet()
  ...
  set retourneObjet = objet
end function

Pour utiliser cet objet retourné par la fonction, on va utiliser une fois de plus le même principe

 
Sélectionnez
set objetretourne = retourneObjet()
Créé le 3 octobre 2004  par Jérôme

Pour les créer :

 
Sélectionnez
<%response.cookies("identite")("nom") = "toto"
response.cookies("identite")("prenom") = "bonptitgars"
response.cookies("identite").expires = DateAdd("h", 1, time)%>

Pour les récupérer :

 
Sélectionnez
<%nomcook =  request.cookies("identite")("nom")%>
<input type="text" name="nom" value="<%=nomcook%>">
Créé le 3 octobre 2004  par Jérôme

Pour arrondir un nombre, il existe la fonction Round :

 
Sélectionnez
Round(expression[, numdecimalplaces])


Pour formatter un nombre, il existe la fonction FormatNumber :

 
Sélectionnez
FormatNumber(Expression [,NumDigitsAfterDecimal])
Créé le 3 octobre 2004  par Jérôme
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2004-2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.