Newsletter Developpez.com

Inscrivez-vous gratuitement au Club pour recevoir
la newsletter hebdomadaire des développeurs et IT pro

FAQ MS-AccessConsultez toutes les FAQ

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

 
OuvrirSommaireVBALe langage

Un module standard contient un ensemble de fonctions et de procédures, plus toutes les déclarations qui leur sont nécessaires. Parmi ces déclarations, fonctions et procédures, certaines peuvent être de portée privée, c'est-à-dire que l'on ne peut pas y accéder à partir d'un autre module. Tout ce qui n'est utilisé que dans le module standard lui-même sera donc de portée privée.
Un module de classe vous permettra de créer une classe. Une classe décrit un objet particulier : quelles sont ses caractéristiques (appelées propriétés) et ce qu'il peut faire (quelles sont ses méthodes). Par exemple, chaque formulaire de votre projet correspond à une classe. Ses propriétés sont Caption, BorderStyle, etc. et ses méthodes Show, Hide, etc. Dans une classe, une méthode s'écrit sous la forme d'une fonction de portée publique. Voyons comment s'écrit une propriété, par exemple la propriété Marque de la classe Voiture :

 
Sélectionnez
'Variable privée représentant la marque, on ne peut pas y accéder depuis l'extérieur
Private m_Marque As String

'Property Get est la fonction appelée lorsque l'on veut obtenir la valeur de la propriété
Property Get Marque() As String
Marque = m_Marque
End Property

' Property Let est la procédure appelée lorsque l'on veut modifier la valeur de la propriété.
' Si elle n'existe pas, la propriété sera en lecture seule.
' Elle doit avoir un argument qui a le type de la propriété,
' soit le même que celui de la valeur renvoyée par Property Get.
Property Let Marque(value As String)
m_Marque = value
End Property

Et pour finir, un exemple d'utilisation de la classe Voiture :

 
Sélectionnez
Dim UneVoiture As Voiture

Set UneVoiture = New Voiture
UneVoiture.Marque = "Renault"
MsgBox UneVoiture.Marque
Set UneVoiture = Nothing
Créé le 1er janvier 2005  par nightfall

Lien : FAQ VB

Les arguments d'une fonction ou d'une procédure peuvent être passés de deux façons différentes : par valeur ou par référence.
Si un argument est précédé de ByVal, il est passé par valeur, et s'il est précédé de ByRef, ou de ni l'un ni l'autre, il est passé par référence.

Passage par valeur (ByVal)
Consiste à passer la valeur de l'argument à la procédure, et non son adresse.
La procédure utilise alors une copie de la variable. La valeur de la variable ne peut pas être modifiée par la procédure.

Passage par référence (ByRef)
Ici c'est l'adresse de la variable qui est passée à la procédure. La variable peut donc être modifiée par la procédure.

 
Sélectionnez
Private Sub Echange(ByVal a As Integer, ByVal b As Integer)

Dim temp As Integer
temp = a
a = b
b = temp

End Sub

Private Sub Echange2(a As Integer, b As Integer)

Dim temp As Integer
temp = a
a = b
b = temp
End Sub

Private Sub Test()

x = 5
y = 3
Echange x, y
MsgBox x & " " & y   ' Affiche "5 3", les valeurs n'ont pas été modifiées par la procédure

Echange2 x, y
MsgBox x & " " & y   ' Affiche "3 5", parce que les valeurs ont été modifiées

End Sub
Créé le 1er janvier 2005  par Team Access

Lien : FAQ VB

Un paramètre est optionnel s'il est précédé du mot-clé Optional. Les paramètres placés après doivent être également optionnels. Vous pouvez également spécifier une valeur par défaut :

 
Sélectionnez
Private Sub Affiche(Optional x As Long=10)

End Sub

Pour les paramètres de type Variant et sans valeur par défaut, vous avez le moyen de savoir si une valeur a été spécifiée lors de l'appel en utilisant IsMissing :

 
Sélectionnez
Private Sub Affiche(Optional x As Variant)

If IsMissing(x) Then
    ' Pas de valeur spécifiée
Else
    ' Une valeur a été spécifiée pour x
End If

End Sub
Créé le 1er janvier 2005  par nightfall

Lien : FAQ VB

L'exemple suivant affiche les éléments d'un tableau :

 
Sélectionnez
Private Sub AfficheElements(t() As Long)

Dim i As Long
For i = LBound(t) To UBound(t)
    MsgBox t(i)
Next

End Sub

Private Sub Form_Load()

Dim t(1 To 3) As Long
t(1) = 1
t(2) = 4
t(3) = 5
AfficheElements t()

End Sub
Créé le 1er janvier 2005  par nightfall

Lien : FAQ VB

La fonction UBound() renvoie l'indice maximum autorisé pour un tableau donné. Si le tableau est vide, elle crée une erreur. La fonction suivante utilise ce principe. Elle renvoie vrai si le tableau passé en paramètre contient au moins un élément.

 
Sélectionnez
Public Function ContientElements(ByVal tableau As Variant) As Boolean

Dim indice As Long

On Error goto vide
indice = UBound(tableau)
ContientElements = True
Exit Function

vide:

End Function
Créé le 1er janvier 2005  par nightfall

Lien : FAQ VB

La fonction suivante renvoie un booléen : True si le nombre reçu en paramètre est pair, et False sinon.

 
Sélectionnez
Private Function EstPaire(x As Long) As Boolean
    EstPaire = (x Mod 2 = 0)
End Function
Créé le 1er janvier 2005  par nightfall

Lien : FAQ VB

Dans l'exemple ci-dessous, la fonction RGBparTableau() renvoie les composantes rouge, vert, bleu du code couleur passé en paramètre. Les composantes sont renvoyées sous la forme d'un tableau.

 
Sélectionnez
Public Function RGBparTableau(ByVal couleur As Long) As Long() 
    
Dim MonTab(0 To 2) As Long 
MonTab(2) = Int(couleur / 65536) 
MonTab(1) = Int((couleur - (65536 * MonTab(2))) / 256) 
MonTab(0) = couleur - ((MonTab(2) * 65536) + (MonTab(1) * 256)) 
RGBparTableau = MonTab 
    
End Function 

Private Sub Command1_Click() 

Dim TabCouleur() As Long, couleur As Long 

couleur = 9550940 
TabCouleur() = RGBparTableau(couleur) 
MsgBox "Le code " & couleur & " correspond en RGB à " & _ 
        TabCouleur(0) & " " & TabCouleur(1) & " " & TabCouleur(2) 
    
End Sub
Créé le 1er janvier 2005  par Jean-Marc Rabilloud

Lien : FAQ VB

Une fonction peut renvoyer une variable de type utilisateur comme n'importe quel autre type simple.
Cependant vous ne pouvez pas déclarer dans un module de classe, y compris dans le module d'un formulaire, une fonction de portée publique renvoyant un type utilisateur. Dans un module standard, si vous déclarez un type utilisateur et une fonction de portée publique qui renvoie ce type, le type doit être aussi déclaré avec une portée publique.

Dans l'exemple ci-dessous, la fonction RGBparType() renvoie les composantes rouge, vert, bleu du code couleur passé en paramètre. Les composantes sont les champs du type CompCouleur.

 
Sélectionnez
Private Type CompCouleur
    Red As Long
    Green As Long
    Blue As Long
End Type

Private Function RGBparType(ByVal Couleur As Long) As CompCouleur
    
RGBparType.Blue = Int(Couleur / 65536)
RGBparType.Green = Int((Couleur - (65536 * RGBparType.Blue)) / 256)
RGBparType.Red = Couleur - ((RGBparType.Blue * 65536) + (RGBparType.Green * 256))
    
End Function

Private Sub Command1_Click()

Dim TypColor As CompCouleur

TypColor = RGBparType(9550940)
lblred.Caption = "Red = " & TypColor.Red
lblgreen.Caption = "Green = " & TypColor.Green
lblblue.Caption = "Blue = " & TypColor.Blue

End Sub
Créé le 1er janvier 2005  par Jean-Marc Rabilloud, nightfall

Lien : FAQ VB

Contrairement à d'autres langages, la constante Pi n'existe pas en VB. La meilleure façon de l'obtenir rapidement est d'utiliser le code suivant :

 
Sélectionnez
Dim Pi as Double
Pi=4*Atn(1)
Créé le 1er janvier 2005  par grafikm_fr

Lien : FAQ VB

Avec la fonction CallByName.

 
Sélectionnez
Private Sub Form_Load()

' Ici CallByName renvoie la valeur de la propriété Caption du formulaire
Msgbox CallByName(Me, "Caption", VbGet)

' Modifie la propriété Caption du formulaire
CallByName Me, "Caption", VbLet, "Test de callbyname"

End Sub
Créé le 1er janvier 2005  par nightfall

Lien : FAQ VB

Avec la fonction CallByName.

 
Sélectionnez
Private Sub Form_Load()

    ' Déplace le formulaire à la position 5000,150
    CallByName Me, "Move", VbMethod, "5000,150"

End Sub

FRED.G : attention, l'exemple utilise la méthode Move qui n'est valable qu'à partir d'Access 2002.

Créé le 1er janvier 2005  par nightfall

Lien : FAQ VB

La bibliothèque Microsoft VBScript Regular Expressions permet d'utiliser des expressions régulières dans Visual Basic. Il faut l'ajouter dans les références du projet.

Le principe consiste à créer un objet RegExp, à le paramétrer en modifiant ses propriétés, puis à lancer la recherche en appelant la méthode Execute(). Vous devez passer en paramètre la chaîne de caractères dans laquelle vous souhaitez faire une recherche. La méthode Execute vous renvoie alors les occurrences dans une collection. Si vous avez donné la valeur True à la propriété Global de l'objet RegExp, cette collection contiendra toutes les occurrences, sinon seulement la première.

Voici comment vérifier la validité d'une adresse email. Ce code a été écrit avec la version 5.5 de la bibliothèque.

 
Sélectionnez
Public Function EmailValide(ByVal email As String) As Boolean

    Dim regEx As RegExp, occurrences As MatchCollection
   
    Set regEx = New RegExp
    regEx.Pattern = "^[a-z0-9_.-]+@[a-z0-9.-]{2,}\.[a-z]{2,3}$"
    regEx.IgnoreCase = True ' Ne pas distinguer les minuscules des majuscules
    regEx.Global = False 'Renvoyer seulement la première occurrence
    Set occurrences = regEx.Execute(email)
    EmailValide = (occurrences.Count = 1)
   
End Function

Vous pouvez également jeter un œil à la première partie du tutoriel de Louis-Guillaume MORAND.

Créé le 1er janvier 2005  par nightfall

Lien : FAQ VB

Il est impossible de déclencher des événements par le code (sauf les événements définis par l'utilisateur). Cependant il est possible d'exécuter les procédures événementielles correspondantes en les appelant comme n'importe quelle méthode de formulaire.
Remarque : les procédures doivent être déclarées en Public Sub.

Créé le 25 octobre 2004  par FRED.G

Lien : Comment exécuter une procédure (sub) d'un autre formulaire ?

L'opérateur "!" (point d'exclamation) indique que l'élément qui suit est défini par l'utilisateur (un élément d'une collection). Par exemple, vous pouvez utiliser l'opérateur "!" pour faire référence à un formulaire ouvert, à un état ouvert, ou à un contrôle figurant sur un formulaire ou sur un état.

L'opérateur "." (point) indique généralement que l'élément qui suit est défini par MS Access. Par exemple, vous pouvez utiliser l'opérateur "." pour faire référence à une propriété d'un formulaire, d'un état, ou d'un contrôle.

Créé le 19 août 2003  par Lucifer

Deux solutions s'ouvrent à vous :

--> fermer la base en laissant Access ouvert :

 
Sélectionnez
Application.CloseCurrentDatabase

--> fermer la base et Access :

 
Sélectionnez
Application.Quit
Créé le 1er janvier 2005  par FRED.G

Utiliser la méthode FollowHyperlink de l'objet Application :

 
Sélectionnez
Application.FollowHyperlink "http:www.developpez.net/forums/viewtopic.php?t=228003"

ou
exécuter la méthode Follow de l'objet Hyperlink (bibliothèque Access).

Mis à jour le 14 octobre 2007  par FRED.G

1re solution : Menu Outils/Démarrage rubrique titre de l'application.
2e possibilité en VBA, regarder la propriété AppTitle.

Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.

 
Sélectionnez
' Pour une première utilisation, cette propriété n'est pas définie et son utilisation 
' provoque l'erreur rattrapable  3270 : "Propriété non trouvée". 
'Il convient alors de créer la propriété dans le code de gestion d'erreur. 

Public Sub DefinirTitreApplication() 

On Error GoTo err_gestion 

    Dim prp As DAO.Property 
    Dim str As String 

    str = "nouveau titre" 

    CurrentDb.Properties("AppTitle") = str 
    RefreshTitleBar 

sortie: 
    Exit Sub 

err_gestion: 
    If Err.Number = 3270 Then 
        Set prp = CurrentDb.CreateProperty("AppTitle", dbText, str) 
        CurrentDb.Properties.Append prp 
        Resume 
    End If 

End Sub 
Créé le 3 septembre 2004  par Drosera

Lien : Comment ajouter/modifier une propriété sur une base de données ?
Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?

Il faut utiliser la fonction Nz(). Par exemple si vous voulez afficher le contenu d'une variable, ou bien "Vide" si sa valeur est nulle il suffit de faire :

 
Sélectionnez
 Nz(LaVariable, "vide") 

Cela peut également servir dans une requête pour donner une valeur à un champ s'il est nul.

Créé le 29 décembre 2003  par Lucifer

Un ensemble de constantes liées par leur sens peut être défini par une énumération à l'aide du mot-clé Enum. La déclaration de l'énumération est à placer dans le haut du module (partie déclaration).

Chaque ligne de l'énumération est déclarée ainsi : <Nom de la valeur> = <Valeur : Type entier>

 
Sélectionnez
Private Enum Couleurs
Bleu=1
Vert=3
Jaune=5
End Enum

Ainsi, si on déclare une variable de type Couleurs, on aura par exemple :

 
Sélectionnez
Dim MaCouleur as Couleurs
MaCouleur=Couleurs.Vert
Msgbox MaCouleur

Ceci affichera 3.

Créé le 10 mai 2005  par Tofalu

Il faut utiliser la fonction IsNull().

Intéressez-vous aussi à la fonction Nz().

Créé le 3 septembre 2004  par Demco

Utilisez des variables globales, créez un module et insérez :

 
Sélectionnez
Public MaVar As String

La variable MaVar sera utilisable depuis n'importe quel formulaire.
Cependant attention à l'utilisation des variables globales, ce peut être un ennemi si elles sont mal utilisées. Attention à ne pas donner à des variables locales le même nom que les variables globales.
Attention, ceci peut être particulièrement dangereux lors d'un travail en équipe, si certains ignorent la présence de variables globales.

Pour utiliser cette valeur dans une requête il suffit de créer une fonction qui en renvoie la valeur.
Dans le même module écrivez :

 
Sélectionnez
Public Function ValeurVar() As String

 ValeurVar = MaVar

End Function

Ce qui donnera :

 
Sélectionnez
Select * FROM MaTable WHERE ID = ValeurVal() ;
Créé le 12 mai 2004  par Demco

Le Me désigne en fait l'instance du formulaire sur lequel on se trouve.
Ainsi la ligne suivante fait référence à une zone de texte se trouvant dans le formulaire actuel :

 
Sélectionnez

Me.txtNom = "Dupond"
Créé le 20 novembre 2005  par Demco

Deux syntaxes sont possibles :

 
Sélectionnez

Dim obj as new clToto
obj.mamethode

Ou

 
Sélectionnez

Dim obj as clToto
Set obj= New clToto
obj.mamethode

Pourtant, il existe une différence fondamentale entre les deux syntaxes. En Visual Basic, dès qu'une méthode est appelée, une vérification interne est réalisée. Celle-ci consiste à vérifier que l'objet n'est pas vide avant l'appel. Le mot-clé SET permet d'outrepasser cette vérification et de dire explicitement au système que l'objet a été instancié. Ainsi, on gagne de nombreuses opérations qui auraient dû être effectuées à chaque fois que l'objet aurait été référencé. La syntaxe 2 consomme donc une ligne de code de plus mais est beaucoup plus performante.

Créé le 29 novembre 2006  par Tofalu

Pour tester si deux variables correspondent au même objet, il faut utiliser l'opérateur IS :

 
Sélectionnez

Dim a As Object
Dim b As Object
Set a = CurrentDb
Set b = a
If b Is a Then
 MsgBox "Le même objet"
Else
 MsgBox "Objet différent"
End If
Set b = CurrentProject

If b Is a Then
 MsgBox "Le même objet"
Else
 MsgBox "Objet différent"
End If

Ceci affiche respectivement :

  1. Le même objet
  2. Un objet différent
Créé le 29 novembre 2006  par Tofalu
  

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 © 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.