Les
types
Le sommaire :
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 de l’instruction « Dim », utiliser 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…
Ci-dessous, un exemple de définition de type.
Le type s’intitulera « Personne ».Il contiendra la définition de 2 variables, Nom et Prénom, de type String et 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 valeurs 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 utiliser 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 valeurs de la variable Client
MsgBox(« Son nom est « +Client.Prénom+ » « +Client.Nom)
End Sub
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 zones devant être renseignées.
Par conséquent, avec F5, vous accéderez à la liste des noms…
Télécharger le modèle de la
facture sans la macro >>
Télécharger le modèle
de la facture avec la macro >>
La macro a créer s’intitule facture, vous devez l’assigner à 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 :
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