Sub, instruction (Visual Basic)Sub Statement (Visual Basic)

Déclare le nom, paramètres et le code qui définissent une Sub procédure.Declares the name, parameters, and code that define a Sub procedure.

SyntaxeSyntax

[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async ]  
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]  
    [ statements ]  
    [ Exit Sub ]  
    [ statements ]  
End Sub  

ComposantsParts

  • attributelist

    Facultatif.Optional. Consultez liste d’attributs.See Attribute List.

  • Partial

    Facultatif.Optional. Indique la définition d’une méthode partielle.Indicates definition of a partial method. Consultez méthodes partielles.See Partial Methods.

  • accessmodifier

    Facultatif.Optional. Il peut s'agir d'une des valeurs suivantes :Can be one of the following:

    Consultez niveaux en Visual Basic d’accès.See Access levels in Visual Basic.

  • proceduremodifiers

    Facultatif.Optional. Il peut s'agir d'une des valeurs suivantes :Can be one of the following:

  • Shared

    Facultatif.Optional. Consultez partagé.See Shared.

  • Shadows

    Facultatif.Optional. Consultez ombres.See Shadows.

  • Async

    Facultatif.Optional. Consultez Async.See Async.

  • name

    Obligatoire.Required. Nom de la procédure.Name of the procedure. Consultez noms d’éléments déclarés.See Declared Element Names. Pour créer une procédure de constructeur pour une classe, définissez le nom d’un Sub procédure pour le New (mot clé).To create a constructor procedure for a class, set the name of a Sub procedure to the New keyword. Pour plus d’informations, consultez durée de vie : comment les objets sont création et destruction.For more information, see Object Lifetime: How Objects Are Created and Destroyed.

  • typeparamlist

    Facultatif.Optional. Liste de paramètres de type pour une procédure générique.List of type parameters for a generic procedure. Consultez tapez liste.See Type List.

  • parameterlist

    Facultatif.Optional. Liste des noms de variables locales représentant les paramètres de cette procédure.List of local variable names representing the parameters of this procedure. Consultez liste de paramètres.See Parameter List.

  • Implements

    Facultatif.Optional. Indique que cette procédure implémente une ou plusieurs Sub procédures, chacune étant définie dans une interface implémentée par la classe ou la structure conteneur de cette procédure.Indicates that this procedure implements one or more Sub procedures, each one defined in an interface implemented by this procedure's containing class or structure. Consultez implémente l’instruction.See Implements Statement.

  • implementslist

    Obligatoire si Implements est utilisé.Required if Implements is supplied. Liste des procédures Sub en cours d'implémentation.List of Sub procedures being implemented.

    implementedprocedure [ , implementedprocedure ... ]

    Chaque implementedprocedure emploie la syntaxe et les éléments suivants :Each implementedprocedure has the following syntax and parts:

    interface.definedname

    ÉlémentPart DescriptionDescription
    interface Obligatoire.Required. Nom d’une interface implémentée par cette procédure conteneur de classe ou structure.Name of an interface implemented by this procedure's containing class or structure.
    definedname Obligatoire.Required. Nom par lequel la procédure est définie dans interface.Name by which the procedure is defined in interface.
  • Handles

    Facultatif.Optional. Indique que cette procédure peut gérer un ou plusieurs événements spécifiques.Indicates that this procedure can handle one or more specific events. Consultez gère.See Handles.

  • eventlist

    Obligatoire si Handles est utilisé.Required if Handles is supplied. Liste des événements gérés par cette procédure.List of events this procedure handles.

    eventspecifier [ , eventspecifier ... ]

    Chaque eventspecifier emploie la syntaxe et les éléments suivants :Each eventspecifier has the following syntax and parts:

    eventvariable.event

    ÉlémentPart DescriptionDescription
    eventvariable Obligatoire.Required. Variable objet déclarée avec le type de données de la classe ou structure qui déclenche l’événement.Object variable declared with the data type of the class or structure that raises the event.
    event Obligatoire.Required. Nom de l’événement que gère de cette procédure.Name of the event this procedure handles.
  • statements

    Facultatif.Optional. Bloc d’instructions à exécuter dans cette procédure.Block of statements to run within this procedure.

  • End Sub

    Termine la définition de cette procédure.Terminates the definition of this procedure.

RemarquesRemarks

Tout le code exécutable doit être à l’intérieur d’une procédure.All executable code must be inside a procedure. Utilisez un Sub procédure lorsque vous ne souhaitez pas retourner une valeur au code appelant.Use a Sub procedure when you don't want to return a value to the calling code. Utilisez un Function procédure lorsque vous souhaitez retourner une valeur.Use a Function procedure when you want to return a value.

Définition d’une procédure SubDefining a Sub Procedure

Vous pouvez définir un Sub procédure uniquement au niveau du module.You can define a Sub procedure only at the module level. Le contexte de déclaration pour une procédure sub doit, par conséquent, être une classe, une structure, un module ou une interface et ne peut pas être un fichier source, un espace de noms, une procédure ou un bloc.The declaration context for a sub procedure must, therefore, be a class, a structure, a module, or an interface and can't be a source file, a namespace, a procedure, or a block. Pour plus d’informations, consultez Contextes de déclaration et niveaux d’accès par défaut.For more information, see Declaration Contexts and Default Access Levels.

Subles procédures par défaut d’un accès public.Sub procedures default to public access. Vous pouvez ajuster leurs niveaux d’accès à l’aide des modificateurs d’accès.You can adjust their access levels by using the access modifiers.

Si la procédure utilise le Implements (mot clé), la classe ou la structure conteneur doit avoir un Implements instruction qui suit immédiatement sa Class ou Structure instruction.If the procedure uses the Implements keyword, the containing class or structure must have an Implements statement that immediately follows its Class or Structure statement. Le Implements instruction doit inclure chaque interface spécifiée dans implementslist.The Implements statement must include each interface that's specified in implementslist. Toutefois, le nom par lequel une interface définit les Sub (dans definedname) ne doit pas nécessairement correspondre au nom de cette procédure (dans name).However, the name by which an interface defines the Sub (in definedname) doesn't have to match the name of this procedure (in name).

Retour à partir d’une procédure SubReturning from a Sub Procedure

Lorsqu’un Sub procédure retourne au code appelant, l’exécution se poursuit avec l’instruction après l’instruction qui l’a appelée.When a Sub procedure returns to the calling code, execution continues with the statement after the statement that called it.

L’exemple suivant montre un retour d’un Sub procédure.The following example shows a return from a Sub procedure.

Sub mySub(ByVal q As String)  
    Return  
End Sub   

Le Exit Sub et Return instructions provoquent la sortie immédiate d’un Sub procédure.The Exit Sub and Return statements cause an immediate exit from a Sub procedure. Un nombre quelconque de Exit Sub et Return instructions peuvent apparaître n’importe où dans la procédure, et vous pouvez mélanger Exit Sub et Return instructions.Any number of Exit Sub and Return statements can appear anywhere in the procedure, and you can mix Exit Sub and Return statements.

Appel d’une procédure SubCalling a Sub Procedure

Vous appelez un Sub procédure en utilisant le nom de la procédure dans une instruction et en suivant ce nom à sa liste d’arguments entre parenthèses.You call a Sub procedure by using the procedure name in a statement and then following that name with its argument list in parentheses. Vous pouvez omettre les parenthèses uniquement si vous ne fournissez pas d’arguments.You can omit the parentheses only if you don't supply any arguments. Toutefois, votre code est plus lisible si vous incluez toujours les parenthèses.However, your code is more readable if you always include the parentheses.

A Sub procédure et un Function procédure peut avoir des paramètres et exécuter une série d’instructions.A Sub procedure and a Function procedure can have parameters and perform a series of statements. Toutefois, un Function procédure retourne une valeur et qu’une Sub ne de procédure.However, a Function procedure returns a value, and a Sub procedure doesn't. Par conséquent, vous ne pouvez pas utiliser un Sub procédure dans une expression.Therefore, you can't use a Sub procedure in an expression.

Vous pouvez utiliser la Call mot clé lorsque vous appelez un Sub procédure, mais ce mot clé n’est pas recommandé pour la plupart des utilisations.You can use the Call keyword when you call a Sub procedure, but that keyword isn't recommended for most uses. Pour plus d’informations, consultez instruction Call.For more information, see Call Statement.

Visual Basic réorganise quelquefois les expressions arithmétiques pour améliorer les performances internes.Visual Basic sometimes rearranges arithmetic expressions to increase internal efficiency. Pour cette raison, si votre liste d’arguments inclut des expressions qui appellent d’autres procédures, vous ne devez pas supposer que que ces expressions seront appelées dans un ordre particulier.For that reason, if your argument list includes expressions that call other procedures, you shouldn't assume that those expressions will be called in a particular order.

Procédures Sub AsyncAsync Sub Procedures

À l’aide de la fonctionnalité Async, vous pouvez appeler des fonctions asynchrones sans utiliser de rappels explicites ni fractionner manuellement votre code entre plusieurs fonctions ou expressions lambda.By using the Async feature, you can invoke asynchronous functions without using explicit callbacks or manually splitting your code across multiple functions or lambda expressions.

Si vous marquez une procédure avec le Async modificateur, vous pouvez utiliser la Await opérateur dans la procédure.If you mark a procedure with the Async modifier, you can use the Await operator in the procedure. Quand le contrôle atteint une Await expression dans le Async procédure, contrôle retourne à l’appelant, et la progression de la procédure est interrompue jusqu'à ce que la tâche attendue se termine.When control reaches an Await expression in the Async procedure, control returns to the caller, and progress in the procedure is suspended until the awaited task completes. Lorsque la tâche est terminée, l’exécution peut reprendre dans la procédure.When the task is complete, execution can resume in the procedure.

Note

Un Async procédure retourne à l’appelant quand soit le premier objet await qui n’est pas encore terminé est rencontrée ou à la fin de la Async procédure est atteint, selon ce qui se produit en premier.An Async procedure returns to the caller when either the first awaited object that’s not yet complete is encountered or the end of the Async procedure is reached, whichever occurs first.

Vous pouvez également marquer un Function, instruction avec la Async modificateur.You can also mark a Function Statement with the Async modifier. Un Async fonction peut avoir un type de retour de Task<TResult> ou Task.An Async function can have a return type of Task<TResult> or Task. Un exemple plus loin dans cette rubrique montre un Async fonction qui a un type de retour de Task<TResult>.An example later in this topic shows an Async function that has a return type of Task<TResult>.

Async``Sub procédures sont principalement utilisés pour les gestionnaires d’événements, où une valeur ne peut pas être retournée.Async Sub procedures are primarily used for event handlers, where a value can't be returned. Un Async``Sub procédure ne peut pas être attendue et que l’appelant d’une Async``Sub procédure ne peut pas intercepter des exceptions qui le Sub lève une exception de la procédure.An Async``Sub procedure can't be awaited, and the caller of an Async``Sub procedure can't catch exceptions that the Sub procedure throws.

Un Async procédure ne peut pas déclarer de ByRef paramètres.An Async procedure can't declare any ByRef parameters.

Pour plus d’informations sur Async les procédures, consultez programmation asynchrone avec Async et Await, flux de contrôle dans les programmes Async, et Types de retour Async.For more information about Async procedures, see Asynchronous Programming with Async and Await, Control Flow in Async Programs, and Async Return Types.

ExempleExample

L’exemple suivant utilise le Sub instruction afin de définir le nom, des paramètres et que le code qui forment le corps d’un Sub procédure.The following example uses the Sub statement to define the name, parameters, and code that form the body of a Sub procedure.

Sub computeArea(ByVal length As Double, ByVal width As Double)
    ' Declare local variable.
    Dim area As Double
    If length = 0 Or width = 0 Then
        ' If either argument = 0 then exit Sub immediately.
        Exit Sub
    End If
    ' Calculate area of rectangle.
    area = length * width
    ' Print area to Immediate window.
    Debug.WriteLine(area)
End Sub

ExempleExample

Dans l’exemple suivant, DelayAsync est un Async``Function qui a un type de retour de Task<TResult>.In the following example, DelayAsync is an Async``Function that has a return type of Task<TResult>. DelayAsync a une instruction Return qui retourne un entier.DelayAsync has a Return statement that returns an integer. Par conséquent, la déclaration de fonction de DelayAsync doit avoir un type de retour de Task(Of Integer).Therefore, the function declaration of DelayAsync must have a return type of Task(Of Integer). Étant donné que le type de retour est Task(Of Integer), l’évaluation de la Await expression dans DoSomethingAsync produit un entier, comme le montre l’instruction suivante : Dim result As Integer = Await delayTask.Because the return type is Task(Of Integer), the evaluation of the Await expression in DoSomethingAsync produces an integer, as the following statement shows: Dim result As Integer = Await delayTask.

Le startButton_Click procédure est un exemple d’un Async Sub procédure.The startButton_Click procedure is an example of an Async Sub procedure. Étant donné que DoSomethingAsync est un Async la tâche pour l’appel à une fonction, DoSomethingAsync doit être attendue, comme le montre l’instruction suivante : Await DoSomethingAsync().Because DoSomethingAsync is an Async function, the task for the call to DoSomethingAsync must be awaited, as the following statement shows: Await DoSomethingAsync(). Le startButton_Click``Sub procédure doit être définie avec la Async modificateur, car il possède un Await expression.The startButton_Click``Sub procedure must be defined with the Async modifier because it has an Await expression.

' Imports System.Diagnostics
' Imports System.Threading.Tasks

' This Click event is marked with the Async modifier.
Private Async Sub startButton_Click(sender As Object, e As RoutedEventArgs) Handles startButton.Click
    Await DoSomethingAsync()
End Sub

Private Async Function DoSomethingAsync() As Task
    Dim delayTask As Task(Of Integer) = DelayAsync()
    Dim result As Integer = Await delayTask

    ' The previous two statements may be combined into
    ' the following statement.
    ' Dim result As Integer = Await DelayAsync()

    Debug.WriteLine("Result: " & result)
End Function

Private Async Function DelayAsync() As Task(Of Integer)
    Await Task.Delay(100)
    Return 5
End Function

'  Output:
'   Result: 5

Voir aussiSee Also

Implements (instruction)Implements Statement
Function (instruction)Function Statement
Liste de paramètresParameter List
Dim (instruction)Dim Statement
Call (instruction)Call Statement
OfOf
tableaux de paramètresParameter Arrays
Guide pratique : utiliser une classe génériqueHow to: Use a Generic Class
Procédures de dépannageTroubleshooting Procedures
Méthodes partiellesPartial Methods