Tutoriel Classe StringDate de publication : 20/10/2004 , Date de mise a jour : 20/10/2004 Créer et utiliser une classe dérivée du type String et lui ajouter des fonctionnalités 1- Définition d'une classe (cf. MSDN) 2- But de la classe du tutoriel : String Etendue 3- Utilisation de la classe 4- Code de la Classe 5- Fonctions de classe avancées 6- Fonctions auxiliaires spécifiques à Access97 7- Fonctions de Chaînes de Caractères 8- Conclusion 1- Définition d'une classe (cf. MSDN)
Petit rappel Théorique : une classe Une classe est une définition d'objet. Elle contient des informations sur le comportement que devrait adopter l'objet, dont elle indique le nom, les méthodes, les propriétés et les événements. Elle n'est pas un objet en soi, en ce sens qu'elle n'existe pas en mémoire. Quand un code faisant référence à une classe est exécuté, une nouvelle instance de la classe, un objet, est créée en mémoire. Bien qu'il n'existe qu'une seule classe, plusieurs objets du même type peuvent être créés en mémoire à partir de cette classe. Une classe peut être comparée à un objet « sur le papier » autrement dit, elle fournit un schéma de l'objet, mais elle n'a aucune substance dans la mémoire. Il est possible de créer à partir de ce schéma un nombre illimité d'objets. Tous les objets créés à partir d'une classe sont dotés des mêmes membres (propriétés, méthodes et événements). Cependant, chaque objet se comporte comme une entité indépendante des autres. Par exemple, les propriétés d'un objet peuvent avoir des valeurs différentes de celles d'un autre objet du même type. Un projet Microsoft® Visual Basic® pour Applications (VBA) peut contenir deux sortes de modules de classe : les modules de classe élémentaires, qui ne sont associés à aucune sorte d'interface utilisateur, et les modules de classe qui sont associés à un formulaire ou à un autre composant. Les modules de classe associés à un formulaire, par exemple, sont identiques aux modules de classes élémentaires, à cette exception près qu'ils ne sont présents en mémoire que tant que ce formulaire y est présent lui aussi. Les objets UserForms, les formulaires et les états Microsoft® Access, l'objet ThisDocument de Microsoft® Word, ainsi que les objets ThisWorkbook et SheetN de Microsoft® Excel sont tous des exemples d'objets associés à des modules de classe. 2- But de la classe du tutoriel : String Etendue
L'idée est de partir du type String, pour lui adjoindre des fonctions évoluées : . Calcul de la longueur de la chaîne . Mise en majuscules . Mise en minuscules . Calcul du nombre de mots . Récupération du Nième mot . Application d'une casse aléatoire . Susbtitution amusante de caractères . Mise en initiales . Position d'un mot . Remplacement d'une sous-chaîne (fonction existant dans Access2000 Replace()) 3- Utilisation de la classe
Nous avons entièrement codé la classe, nous l'avons enregistrée sous le nom clsString Nous pourrons à tout moment ajouter des fonctions ou des propriétés. Nous pourrions tout à fait imaginer d'ajouter des fonctions supplémentaires comme par exemple du cryptage/décryptage. Nous allons maintenant étudier comment utiliser cette classe.
Nous mettons ce code dans un nouveau module, pour tester l'utilisation de cette classe. Pour utiliser cette classe nous devons déclarer son type. Dim NomDeLaVariable As New NomDeLaClasse au lieu de Dim NomDeLaVariable As String Elle sera instanciée lors de la première attribution d'une propriété, dans notre cas : .Value La sub exemple montre quelques utilisations possibles de cette classe. Nous pouvons visualiser les résultats dans la fenêtre de débogage ou "immédiate".
4- Code de la Classe
Ci-joint le code de la classe clsString Aller dans les modules access, en créer un nouveau et l'enregistrer sous le nom clsString
On définit la variable de type String : classStringValue On définit la variable tableau de type String : classStringArray() Ces variables vont stocker la valeur de la classe et les mots de la chaîne tout au long de l'existence de l'instance de cette classe, elles nous seront utiles pour effectuer des opérations sur la valeur de la classe. Le portée de ces variables est Private, car elles ne seront utilisées qu'à l'intérieur de la classe.
La Sub ClassInitialize() permet d'initialiser la variable : classStringValue
Property Let : indique que la propriété en question va recevoir une valeur, la valeur en question est l'argument de la Propriété (dans notre cas : strData). Ici on attribue la valeur de vData à notre variable Private classStringValue. Public : car cette propriété doit être accessible depuis l'extérieur de la classe.
Property Get : indique que la valeur de la propriété en question va être renvoyée à l'utilisateur. Comme dans une fonction VBA, "NomDeLaFonction = " renvoie la valeur. Cette propriété renverra la valeur de notre variable Private classStringValue.
Abordons maintenant nos premières fonctions simples :
Ces fonctions de classes s'écrivent comme des fonctions VBA classiques. Le type est à nouveau Public pour que ces fonctions soient accessibles depuis l'extérieur du module de classe. Cette fonction a pour but de calculer la longueur de la chaîne, la fonction VBA requise est Len(). La fonction manipule notre variable Private classStringValue et en renvoie la longueur. Les deux fonctions suivantes utilisent LCase() pour la mise en minuscules et UCase() pour la mise en majuscules. 5- Fonctions de classe avancées
Renvoie le nombre de mots de la chaîne en fonction d'un délimiteur choisi par l'utilisateur. Nous utilisons un argument facultatif avec le mot Clé Optional. On attribue une valeur par défaut, le caractère ESPACE en mettant = " ".
Renvoie le mot correspondant au numéro demandé par l'utilisateur.
Renvoie une chaîne avec une casse (majuscule/minuscule) aléatoire.
Renvoie une chaîne avec des caractères substitués et choisis aléatoirement parmi 4 listes.
Renvoie la chaîne d'origine avec les remplacements demandés. Cette fonction est apparue de manière native à partir des versions 2000 d'Access et ultérieures.
Renvoie la chaîne d'origine avec la première lettre de chaque mot en majuscules.
Renvoie le nombre d'occurrences d'un mot dans la chaîne.
Renvoie la position du mot recherché dans la chaîne après la Nième occurrence.
6- Fonctions auxiliaires spécifiques à Access97
Nous avons besoin de découper notre chaîne de manière simple et rapide. Depuis Access2000, nous disposons de Split() et Join(), mais ces fonctions ne sont pas hélas dans Access97. Nous allons pallier à ces lacunes en créant des équivalents. Ces fonctions vont s'intégrer à la classe pour un usage interne et seront donc définies en tant que Private. Ces fonctions utiliseront les deux variables de portée locale classStringValue et classStringArray.
7- Fonctions de Chaînes de Caractères
Dans ce tutoriel nous avons abordé parmi les plus courantes fonctions de chaînes. Nous les étudierons dans ce tutoriel dans leur utilisation la plus simple, sans comparaison de casse.
Len(chaîneDeCaractères) Renvoie la longueur d'une chaîne en type Long
Mid(chaîneDeCaractères, PositionDébut, Longueur) Renvoie une sous-chaîne de caractères
InStr(chaîneDeCaractères, chaîneRecherchée) Renvoie la position d'un chaîne de caractère à l'intérieur d'une autre qui est censée la contenir.
Right(chaîneDeCaractères, NombreDeCaractères)/Left(chaîneDeCaractères, NombreDeCaractères) Renvoie les n caractères d'une chaîne en partant de la droite ou de la gauche.
LCase(chaîneDeCaractères)/UCase(chaîneDeCaractères)
Modifie la casse d'une chaîne de caractères : LCase() (LowerCase) met en minuscules, et UCase() (UpperCase) met en majuscules.
8- Conclusion
Ce tutoriel très simple vous aura, je l'espère, familiarisé avec le concept et l'utilisation de classes, voire vous aura donné des idées pour vos futurs développements. Vous pouvez télécharger ce tutoriel au format zip [3 ko] en cliquant ici. |
Copyright © sept 2004 Charles A. [cafeine]. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.