Il est de bon ton de se souhaiter la bonne année. Mais vous, et vous seul, pourrez faire en sorte que cette année soit bonne, meilleure que celle qui vient de s'écouler. Apprenez à ne compter que sur vous, car personne n'est plus qualifié que vous-même pour bâtir, réparer ou améliorer votre propre vie. Personne ne fera les choses à votre place. D'ailleurs, tout ce que les autres peuvent faire, c'est souhaiter que vous le fassiez. Et ne croyez pas que tout ceux qui vous entourent vous apporteront des solutions : certains font juste partie de vos problèmes. Transformez vos résolutions en actes, et dans douze mois, retournez-vous et souriez-vous fièrement : C'était long. C'était difficile. Mais ça y est : 2017 était une bonne année, merci Moi.

Les types personnalisés

Il est possible de définir ses propres types. Voyons comment ça marche : Les types permettent de créer des variables structurées, comme ceci :

Créez un nouveau module, et, en dehos de toute procédure, écrivez ceci :

Type Client
  Nom As String
  Prenom As String
  Age As Integer
End Type

C'est la définition d'une variable Client, qui n'est en fait que l'ensemble de 3 variables : Nom, Prenom et Age. Nom et prénom sont du texte, Age est du chiffre.

Il est interdit de définir des types à l'intérieur même des procédures ou fonctions.

Sous cette définition de Type, créer une procédure TestType, comme ceci :

Sub TestType()
  Dim MonPremierClient As Client
End Sub

Vous constatez que nous créons une variable Client d'un type un peu particulier : Le nôtre !

La suite n'est pas vien compliquée : On peut assigner des valeurs aux variables de cette variable structurée, comme suit :

Sub TestType()
  Dim MonPremierClient As Client
  MonPremierClient.Nom = "Dupont"
  MonPremierClient.Prenom = "Marcel"
  MonPremierClient.Age = 36
  MsgBox "Le client s'appelle " & MonPremierClient.Prenom & MonPremierClient.Nom
End Sub

Voilà, ce n'est pas plus compliqué que ça.

Maintenant, il est possible d'inétégrer au sein même du Type Client, une variable de Type Adresse : Ce type Adresse, nous allons le définir, comme ceci :

Type Adresse
  Rue As String
  CodePostal As Integer
  Ville As String
End Type

Type Client
  Nom As String
  Prenom As String
  SonAdresse As Adresse
End Type

Maintenant, nous allons pouvoir y accéder de cette manière :

Sub TestType()
  Dim MonPremierClient As Client
  MonPremierClient.Nom = "Dupont"
  MonPremierClient.Prenom = "Marcel"
  MonPremierClient.SonAdresse.Rue = "Route des Cerises 32"
  MonPremierClient.SonAdresse.Ville = "Lyon"
  MsgBox "Le client habite " & MonPremierClient.SonAdresse.Rue
End Sub

Maintenant, nous allons voir qu'il est possible de placer des tableaux directement dans les types : Voici l'exemple ou le client peut avoir 2 noms :

Type Client
  Nom(2) As String
  Prenom As String
End Type

Sub TestType()
  Dim MonPremierClient As Client
  MonPremierClient.Nom(1) = "Dupont"
  MonPremierClient.Nom(2) = "Lajoie"
  MsgBox "Le client s'appelle : " & MonPremierClient.Nom(1) & MonPremierClient.Nom(2)
End Sub

Bien entendu, nous pouvons déclarer plisuers variables de type Client :

Sub TestType()
  Dim Premier As Client
  Dim Deuxieme As Client
  Premier.Nom(1) = "Dupont"
  Premier.Nom(2) = "Lajoie"
  Deuxieme.Nom(1) = "Martin"
  Deuxieme.Nom(2) = "Durand"
End Sub

Et, bien entendu, on peut très bien déclarer un tableau de variables de type Client :

Type Adresse
  Rue As String
  CodePostal As Integer
  Ville As String
End Type

Type Client
  Nom(2) As String
  Prenom As String
  SonAdresse As Adresse
End Type

Sub TestType()
  Dim ListeClients(10) As Client
  ListeClients(1).Prenom = "Gaspard"
  ListeClients(7).Nom(2) = "Durand"
  ListeClients(5).Adresse.Ville = "Genève"
End Sub

Il est également possible de placer une collection au sein des types :

Type Client
  Prenom As String
  Remarque As New Collection
End Type

Sub TestTypeCollection()
  Dim ListeClients As Client
  ListeClients.Remarque.Add "Vive les vacances"
  ListeClients.Remarque.Add "J'aime le soleil"
  MsgBox ListeClients.Remarque(1)
  MsgBox ListeClients.Remarque(2)
End Sub