Partager via


Instruction RaiseEvent

Déclenche un événement déclaré au niveau du module dans une classe, un formulaire ou un document.

Syntaxe

RaiseEventeventname [ ( argumentlist ) ]

L’élément eventname obligatoire est le nom d’un événement déclaré au sein du module ; il respecte les conventions d’affectation des noms de variables Visual Basic.

L’instruction RaiseEvent est composée des éléments suivants :

Élément Description
Eventname Obligatoire. Nom de l’événement à déclencher.
argumentlist Facultatif. Liste délimitée par des virgules de variables, de tableaux ou d’expressions. La liste d’arguments doit être placée entre parenthèses. S’il n’y a pas d’argument, les parenthèses doivent être omises.

Remarques

Si l’événement n’a pas été déclaré au sein du module dans lequel il est déclenché, une erreur se produit. Le fragment suivant montre une déclaration d’événement et une procédure dans lesquelles l’événement est déclenché.

' Declare an event at module level of a class module 
Event LogonCompleted (UserName as String) 
 
Sub 
 ' Raise the event. 
 RaiseEvent LogonCompleted ("AntoineJan") 
End Sub

Si l’événement n’a pas d’arguments, l’inclusion de parenthèses vides dans l’appel RaiseEvent de l’événement provoque une erreur. Vous ne pouvez pas utiliser RaiseEvent pour déclencher des événements qui ne sont pas explicitement déclarés dans le module.

Par exemple, si un formulaire a un événement Click , vous ne pouvez pas déclencher son événement Click à l’aide de RaiseEvent. Si vous déclarez un événement Click dans le module de formulaire, il masque l’événement Click du formulaire. Vous pouvez toujours appeler l’événement Click du formulaire en utilisant la syntaxe normale pour appeler l’événement, mais pas en utilisant l’instruction RaiseEvent .

Le déclenchement des événements s’effectue dans l’ordre dans lequel les connexions ont été établies. Étant donné que les événements peuvent avoir des paramètres ByRef , un processus qui se connecte en retard peut recevoir des paramètres qui ont été modifiés par un gestionnaire d’événements antérieur.

Exemple

L’exemple suivant utilise des événements pour compter les secondes pendant une démonstration de la course de 100 mètres la plus rapide. Le code illustre toutes les méthodes, propriétés et instructions liées aux événements, notamment l’instruction RaiseEvent.

La classe qui déclenche un événement est la source de l’événement et les classes qui implémentent l’événement sont les récepteurs. Une source d’événement peut avoir plusieurs récepteurs pour les événements qu’elle génère. Lorsque la classe déclenche l’événement, ce dernier se déclenche sur chaque classe qui a été élue en tant que récepteur d’événements pour cette instance de l’objet.

L’exemple utilise également un formulaire (Form1) avec un bouton (Command1), une étiquette (Label1) et deux zones de texte (Text1 et Text2). Lorsque vous cliquez sur le bouton, la première zone de texte s’affiche à partir de maintenant et la seconde commence à compter les secondes. Lorsque le temps plein (9,58 secondes) s’est écoulé, la première zone de texte affiche Jusqu’à maintenant et la seconde affiche 9,58.

Le code spécifie les états initial et terminal du formulaire. Il contient également le code exécuté lors du déclenchement des événements.

Option Explicit

Private WithEvents ts As TimerState
Private Const FinalTime As Double = 9.58

Private Sub UserForm_Initialize()
    Command1.Caption = "Click to start timer"
    Text1.Text = vbNullString
    Text2.Text = vbNullString
    Label1.Caption = "The fastest 100 meters ever run took this long:"
    Set ts = New TimerState
End Sub

Private Sub Command1_Click()
    Text1.Text = "From Now"
    Text2.Text = "0"
    ts.TimerTask FinalTime
End Sub

Private Sub ts_UpdateElapsedTime(ByVal elapsedTime As Double)
    Text2.Text = CStr(Format(elapsedTime, "0.00"))
End Sub

Private Sub ts_DisplayFinalTime()
    Text1.Text = "Until now"
    Text2.Text = CStr(FinalTime)
End Sub

Le reste du code est situé dans un module de classe nommé TimerState. Parmi les commandes de ce module figurent les instructions Raise Event.

Option Explicit

Public Event UpdateElapsedTime(ByVal elapsedTime As Double)
Public Event DisplayFinalTime()
Private Const delta As Double = 0.01

Public Sub TimerTask(ByVal duration As Double)
    Dim startTime As Double
    startTime = Timer
    Dim timeElapsedSoFar As Double
    timeElapsedSoFar = startTime
    
    Do While Timer < startTime + duration
        If Timer - timeElapsedSoFar >= delta Then
            timeElapsedSoFar = timeElapsedSoFar + delta
            RaiseEvent UpdateElapsedTime(Timer - startTime)
            DoEvents
        End If
    Loop
    
    RaiseEvent DisplayFinalTime
End Sub

Voir aussi

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.