<< Retour au sommaire

 

VBA, Les types de données

 

 

 

Table des matières

  1. Présentation du type personnalisé ;
  2. Un exemple avec la saisie automatique d’une facture.

 

Présentation du type personnalisé

 

Vous pouvez vous-mêmes définir un type de données par l’intermédiaire de l’instruction Type.

Dès lors que votre type de données personnalisé sera défini, Vous pourrez, par l’intermédiaire du mot clé « Dim », exploiter votre type personnalisé pour déclarer des variables.

 

Le type de données doit être défini au-dessus des macros et commencera par le mot clef public.

Il sera donc global, c’est-à-dire disponible depuis toutes les macros de votre classeur, par opposition aux variables « locales » qui sont déclarées dans l’en-tête d’une macro, donc, uniquement disponible dans celle-ci.

 

Ci-dessous, un exemple de définition de type.

Le type s’intitule « Personne », il contient la définition de 2 variables, « Nom » et « Prénom »,  tous 2 de type String de 25 caractères.

Plus loin, dans la macro intitulée « Affectation », on déclarera variable Client de type Personne.

On affectera un nom et un prénom dans la variable Client et ensuite, on affichera ces deux données par l’intermédiaire d’une boîte de message.

 

‘ Définition du type

Public Type Personne

Prénom As String * 25

Nom As String * 25

End Type

 

‘ Procédure qui va exploiter le nouveau type

Sub Affectation()

Dim Client As Personne

 

‘ Affectation des deux chaînes de caractères

Client.Nom = « DUPOND »

Client.Prénom = « Bertrand »

 

‘ Affichage des données de la variable Client

MsgBox(« Son nom est « +Client.Prénom+ » « +Client.Nom)

End Sub

 


Un exemple avec la saisie automatique d’une facture

 

Ci-après, je vais vous présenter un exemple qui utilise deux types définis par l’utilisateur, « TypeFacture » et « TypeDétailFacture ».

 

Nous allons travailler depuis un modèle de facture dans lequel j’ai réalisé une définition de noms pour toutes les cellules de la feuille de calculs devant être renseignées.

 

Rappel :

 

Voici le modèle de la facture sans la macro :

Cliquez ici pour débuter le téléchargement du modèle de la facture sans la macro

Voici le modèle de la facture avec la macro :

Cliquez ici pour débuter le téléchargement du classeur avec la macro

 

La macro que je vous propose s’intitule « facture », et vous pouvez assigner son exécution au raccourci clavier CTRL +Y.

Elle permet de réaliser la saisie de la facture par l’intermédiaire d’une succession de InputBox.

Quant à la saisie des 17 lignes réservées pour les différents articles de la facture, les 3 données nécessaires par article, Quantité, description et prix unitaire, seront intégrées dans une boucle dont voici les 2 conditions de sortie :

  1. Les 17 lignes réservées dans le tableau des articles ont été consommées.
  2. L’utilisateur a validé le bouton « Annuler » dans la fenêtre de saisie d’une quantité d’un nouvel article.

 


Voici le code VISUAL BASIC :

 

Public Type TypeFacture

  NuméroCommande As String * 10

  NuméroFacture As String * 10

  DateFacture As String * 10

  Représentant As String * 25

  Fabricant As String * 25

  Commentaire As String * 25

  Garantie As String * 25

  ModePaiement As String * 1

  FraisDePort As String * 10

  TauxTVA As String * 5

  NomClient As String * 25

  AdresseClient As String * 40

  CodePostalClient As String * 5

  VilleClient As String * 25

  TéléphoneClient As String * 14

  PaysClient As String * 25

  NomClientCarteBancaire As String * 25

  DateExpirationCarteBancaire As String * 10

  End Type

 

  Public Type TypeDétailFacture

  Quantité As String * 3

  Description As String * 40

  PrixUnitaire As String * 10

End Type

   

Sub facture()

'

' facture Macro

' Macro enregistrée le 16/03/2008 par BOULANGER

'

' Touche de raccourci du clavier: Ctrl+y

' Déclaration des variables de type personnalisé

Dim facture As TypeFacture

Dim DétailFacture As TypeDétailFacture

' Déclaration des variables utiles pour la boucle de la saisie des détails de la facture

Dim NuméroLigne As Integer

Dim NuméroArticle As Integer

 

' saisie du champ Numéro de la commande

facture.NuméroCommande = InputBox("Veuillez saisir le numéro de la commande ", "Numéro de la commande")

Application.Goto reference:="NuméroDeLaCommande"

ActiveCell.Value = facture.NuméroCommande

 

' saisie du champ numéro de la facture

facture.NuméroFacture = InputBox("Veuillez saisir le numéro de la facture ", "Numéro de la facture")

Application.Goto reference:="NuméroDeLaFacture"

ActiveCell.Value = facture.NuméroFacture

 

' saisie du champ date de la facture

facture.DateFacture = InputBox("Veuillez saisir la date de la facture ", "Date de la facture")

Application.Goto reference:="DateDeLaFacture"

ActiveCell.Value = facture.DateFacture

 

' saisie du champ représentant

facture.Représentant = InputBox("Veuillez saisir le nom du représentant ", "Nom du représentant")

Application.Goto reference:="Représentant"

ActiveCell.Value = facture.Représentant

 

' saisie du champ fabricant

facture.Fabricant = InputBox("Veuillez saisir le fabricant ", "Nom du fabricant")

Application.Goto reference:="Fabricant"

ActiveCell.Value = facture.Représentant

 

' saisie du champ commentaire

facture.Commentaire = InputBox("Veuillez saisir un commentaire ", "Commantaire")

Application.Goto reference:="Commentaires"

ActiveCell.Value = facture.Commentaire

 

' saisie du champ garantie responsabilité

facture.Garantie = InputBox("Veuillez saisir la garantie responsabilité ", "Garantie responsabilité")

Application.Goto reference:="GarantieResponsabilité_optionnellement"

ActiveCell.Value = facture.Garantie

 

' saisie du champ frais de port

facture.FraisDePort = InputBox("Veuillez saisir les frais de port ", "Frais de port")

Application.Goto reference:="FraisDePort"

ActiveCell.Value = facture.FraisDePort

 

' saisie du champ Taux de TVA

facture.TauxTVA = InputBox("Veuillez saisir le taux de la TVA ", "Taux TVA")

Application.Goto reference:="TauxDeTVA"

ActiveCell.Value = facture.TauxTVA

 

' saisie du champ nom du client

facture.NomClient = InputBox("Veuillez saisir le nom du client ", "Nom du client")

Application.Goto reference:="NomDuClient"

ActiveCell.Value = facture.NomClient

 

' saisie du champ adresse du client

facture.AdresseClient = InputBox("Veuillez saisir l'adresse postale du client ", "Adresse postale")

Application.Goto reference:="AdresseDuClient"

ActiveCell.Value = facture.AdresseClient

 

' saisie du champ Code postal du client

facture.CodePostalClient = InputBox("Veuillez saisir le code postal du client ", "Code postal")

Application.Goto reference:="CodePostalDuClient"

ActiveCell.Value = facture.CodePostalClient

 

' saisie du champ ville du client

facture.VilleClient = InputBox("Veuillez saisir la ville du client ", "Ville lclient")

Application.Goto reference:="VilleDuClient"

ActiveCell.Value = facture.VilleClient

 

' saisie du champ pays du client

facture.PaysClient = InputBox("Veuillez saisir le pays du client ", "Pays client")

Application.Goto reference:="PaysDuClient"

ActiveCell.Value = facture.PaysClient

 

' saisie du champ téléphone du client

facture.TéléphoneClient = InputBox("Veuillez saisir le téléphone du client ", "Téléphone client")

Application.Goto reference:="TéléphoneDuClient"

ActiveCell.Value = facture.TéléphoneClient

 

' saisie du mode de paiement

facture.ModePaiement = InputBox("Veuillez préciser le mode de paiement du client, 1 pour espèces, 2 pour chèques, 3 pour carte bancaire et 4 pour autres...", "Mode de paiement")

' vérifie le mode de paiement pour déterminer l'item de la zone d'dition

Application.Goto reference:="ModeDePaiement"

If facture.ModePaiement = "1" Then

  ActiveCell.Value = "Espères"

End If

If facture.ModePaiement = "2" Then

  ActiveCell.Value = "Chèques"

End If

If facture.ModePaiement = "3" Then

  ActiveCell.Value = "Carte Bancaire"

  ' saisie du nom du client figurant sur la carte bancaire

  ' ainsi que la date d'expiration de la carte

  facture.NomClientCarteBancaire = InputBox("Veuillez saisir le nom du client figurant sur la carte bancaire ", "Carte bancaire")

  Application.Goto reference:="NomDuClientTelQuIlApparaîtSurLeModeDePaiment"

  ActiveCell.Value = facture.NomClientCarteBancaire

  facture.DateExpirationCarteBancaire = InputBox("Veuillez saisir la date d'expiration de la carte bancaire ", "Carte bancaire")

  Application.Goto reference:="DateDExpirationDeLaCarteDeCrédit"

  ActiveCell.Value = facture.DateExpirationCarteBancaire

End If

If facture.ModePaiement = "4" Then

  ActiveCell.Value = "Autres"

End If

 

' initialisation des variables utiles pour la boucle

NuméroLigne = 20

NuméroArticle = 1

 

Do

    ' saisie du champ quantité

    DétailFacture.Quantité = InputBox("Veuillez saisir la quantité pour l'article " + CStr(NuméroArticle), "Quantité")

    ' vérifie si l'utilisateur a annulé la saisie des articles

    If DétailFacture.Quantité = "   " Then

      ' fermeture de la saisie

      Exit Do

        End If

    ' saisie du champ description

    DétailFacture.Description = InputBox("Veuillez saisir la description de l'article " + CStr(NuméroArticle), "Description")

    ' saisie du champ Prix unitaire

    DétailFacture.PrixUnitaire = InputBox("Veuillez saisir le prix unitaire de l'article " + CStr(NuméroArticle), "Prix unitaire")

    ' positionnement du curseur sur la cellule quantité de l'article courant

    Référence = "r" + CStr(NuméroLigne) + "c3"

  Application.Goto reference:=Référence

  ActiveCell.Value = DétailFacture.Quantité

  ' passage à la colonne description

  ActiveCell.Offset(0, 1).Select

  ActiveCell.Value = DétailFacture.Description

  ' passage à la colonne prix unitaire

  Référence = "r" + CStr(NuméroLigne) + "c12"

  Application.Goto reference:=Référence

  ActiveCell.Value = DétailFacture.PrixUnitaire

  ' incrémentation des variables

  NuméroLigne = NuméroLigne + 1

  NuméroArticle = NuméroArticle + 1

Loop Until NuméroLigne = 38

 

' affichage du message de fin de saisie de la facture

MsgBox ("Saisie de la facture terminée !")

End Sub

 

Philippe BOULANGER