Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo
Sommaire > VBA > Le langage
        Comment choisir entre un module standard et un module de classe ?
        Qu'est-ce que ByVal et ByRef ?
        Comment faire une procédure ou une fonction qui a un ou plusieurs paramètres optionnels ?
        Comment passer un tableau en paramètres ?
        Comment tester si un tableau dynamique est vide ?
        Comment faire une fonction qui renvoie un résultat ?
        Comment faire une fonction qui renvoie un tableau ?
        Comment faire une fonction qui renvoie une variable de type utilisateur ?
        Comment obtenir la constante Pi ?
        Comment lire ou modifier une propriété d'un objet par son nom ?
        Comment exécuter une méthode en passant son nom en argument ?
        Comment utiliser les expressions régulières ?
        Comment déclencher un événement par le code ?
        Quel est la différence entre '.' et '!' ?
        Comment fermer ma base Access par le code ?
        Suivre un lien hypertext par le code
        Comment modifier le titre de l'application ?
        Comment donner une certaine valeur à une variable (ou un champ) si elle est vide ?
        Comment utiliser les énumérations. Comment créer une liste de constantes (ex : une liste de couleurs)
        If MaVar = NULL ne marche pas ?
        Comment créer des variables utilisables partout dans l'application ?
        A quoi correspond le Me. que je vois devant le nom de certains objets dans des lignes de code ?
        Comment instancier un nouvel objet ?
        Comment tester si deux variables représentent le même objet ?

precedent    sommaire    suivant   


Comment choisir entre un module standard et un module de classe ?
auteur : Romain Puyfoulhoux
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. Sera donc de portée privée tout ce qui n'est utilisé que dans le module standard lui-même.
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 form 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 :
'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 :
Dim UneVoiture As Voiture

Set UneVoiture = New Voiture
UneVoiture.Marque = "Renault"
MsgBox UneVoiture.Marque
Set UneVoiture = Nothing
lien : fr FAQ VB

Qu'est-ce que ByVal et ByRef ?
auteur : Team Access
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.
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
lien : FAQ VB

Comment faire une procédure ou une fonction qui a un ou plusieurs paramètres optionnels ?
auteur : Romain Puyfoulhoux
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 :
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 :
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
lien : FAQ VB

Comment passer un tableau en paramètres ?
auteur : Romain Puyfoulhoux
L'exemple suivant affiche les éléments d'un tableau :
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
lien : FAQ VB

Comment tester si un tableau dynamique est vide ?
auteur : Romain Puyfoulhoux
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.
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
lien : FAQ VB

Comment faire une fonction qui renvoie un résultat ?
auteur : Romain Puyfoulhoux
La fonction suivante renvoie un booléen : Vrai si le nombre reçu en paramètre est pair, et faux sinon.
Private Function EstPaire(x As Long) As Boolean
    EstPaire = (x Mod 2 = 0)
End Function
lien : FAQ VB

Comment faire une fonction qui renvoie un tableau ?
auteur : Jean-Marc Rabilloud
Dans l'exemple ci-dessous, la fonction RGBparTableau() renvoie les composantes rouge, verte, bleue du code couleur passé en paramètre. Les composantes sont renvoyées sous la forme d'un tableau.
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
lien : FAQ VB

Comment faire une fonction qui renvoie une variable de type utilisateur ?
auteurs : Jean-Marc Rabilloud, Romain Puyfoulhoux
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'une form, 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, verte, bleue du code couleur passé en paramètre. Les composantes sont les champs du type CompCouleur.
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
lien : FAQ VB

Comment obtenir la constante Pi ?
auteur : Alexandre Lokchine
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 :
Dim Pi as Double
Pi=4*Atn(1)
lien : FAQ VB

Comment lire ou modifier une propriété d'un objet par son nom ?
auteur : Romain Puyfoulhoux
Avec la fonction CallByName.
Private Sub Form_Load()

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

'modifie la propriété Caption de la form
CallByName Me, "Caption", VbLet, "Test de callbyname"

End Sub
lien : FAQ VB

Comment exécuter une méthode en passant son nom en argument ?
auteur : Romain Puyfoulhoux
Avec la fonction CallByName.
Private Sub Form_Load()

    'Déplace la form à 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.

lien : FAQ VB

Comment utiliser les expressions régulières ?
auteur : Romain Puyfoulhoux
La librairie 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 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 librairie.
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 oeil à la première partie du tutoriel de Louis-Guillaume MORAND.

lien : FAQ VB

Comment déclencher un événement par le code ?
auteur : FRED.G
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.

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

Quel est la différence entre "." et "!" ?
auteur : Lucifer
L'opérateur ! 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 . (point) pour faire référence à une propriété d'un formulaire, d'un état, ou d'un contrôle.


Comment fermer ma base Access par le code ?
auteur : FRED.G
Deux solutions s'ouvrent à vous :

--> fermer la base en laissant Access ouvert :
Application.CloseCurrentDatabase
--> fermer la base et Access
Application.Quit

Suivre un lien hypertext par le code
auteur : FRED.G
Utiliser la méthode FollowHyperlink de l'objet Application :
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)


Comment modifier le titre de l'application ?
auteur : Drosera
1ère solution : Menu Outils/Démarrage rubrique titre de l'application.
2nde 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
  'Pour une première utilisation, cette propriété n'est pas définie et son utilisation 
 'provoque l'erreur rattrapable n°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 
lien : faq Comment ajouter/modifier une propriété sur une base de données ?
lien : fr Définition et manipulation de données avec DAO par Tofalu
lien : faq Comment déclarer une référence dans MS-Access ?

Comment donner une certaine valeur à une variable (ou un champ) si elle est vide ?
auteur : Lucifer
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 :
 Nz(LaVariable, "vide") 
Cela peut également servir dans une requête pour donner une valeur à un champ s'il est nul.


Comment utiliser les énumérations. Comment créer une liste de constantes (ex : une liste de couleurs)
auteur : Tofalu
Un ensemble de constantes liées par leur sens peut être définit 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>
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 :
Dim MaCouleur as Couleurs
MaCouleur=Couleurs.Vert
Msgbox MaCouleur
Ceci affichera 3.


If MaVar = NULL ne marche pas ?
auteur : Demco
Il faut utiliser la fonction IsNull().

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


Comment créer des variables utilisables partout dans l'application ?
auteur : Demco
Utilisez des variables globales, créez un module et insérez :
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 :
Public Function ValeurVar() As String

 ValeurVar = MaVar

End Function
Ce qui donnera :
Select * FROM MaTable WHERE ID = ValeurVal() ;

A quoi correspond le Me. que je vois devant le nom de certains objets dans des lignes de code ?
auteur : 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 :

Me.txtNom = "Dupond"

Comment instancier un nouvel objet ?
auteur : Tofalu
Deux syntaxes sont possibles :

Dim obj as new clToto
obj.mamethode
Ou

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ûes ê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.


Comment tester si deux variables représentent le même objet ?
auteur : Tofalu
Pour tester si deux variables correspondent au même objet, il faut utiliser l'opérateur IS :

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. Objet différent

precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2004  Developpez LLC. Tout 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'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com