"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Bonjour à tous,
Un grand merci à Pierre Fauconnier pour son tutoriel très intéressant et qui va me permettre d'améliorer mon code vba actuel
Pour ceux qui,comme moi, bloquent à la partie IV-E-2-b-ii http://fauconnier.developpez.com/art.../#LIV-E-2-b-ii (pas modifiée pour l'insant )
Je me permets de joindre le lien qui donne la réponse http://www.developpez.net/forums/d13...module-classe/
Maintenant que j'ai fini la partie 1 je suis comme les autres, en attente de la suite
Donc encore une fois merci de me (nous) permettre de continuer à m'(nous) améliorer
Bonjour à tous,
les commentaires sont unanimes, je n'échappe pas à la règle, j'ai découvert ce tuto récemment, et je crois qu'il va modifier en profondeur ma façon de programmer.
Du coup, on est tous impatients de voir la suite. Pour ceux (comme moi) qui n'ont pas la patience d'attendre et qui veullent essayer d'aller plus loin par eux mêmes, pourrais-tu nous donner quelques liens ou chapitres de livres pour chacune des parties que tu avais prévues à ta partie 2, à savoir :
- Création d'un objet personnalisé au travers d'une classe d'accès aux données
- Liaison d'un objet personnalisé à une source pour la lecture des données
- Liaison d'un objet personnalisé à une source pour la modification des données du fichier source
- Portabilité du jeu des classes
- Utilisation de données d'une base Access dans un fichier Excel grâce aux classes personnalisées
en effet, c'est assez difficile de voir de la bonne doc sur les objets en VBA.
Merci
Bonjour,
J'ai enfin trouvé le tuto qui me convenait pour appréhender la notion de classe avec VBA, merci pour le travail.
J'ai vu que ça création datait déjà un peu ! Et donc, à tout hasard, auriez-vous travaillé sur les parties 2 et 3 ?
J'ai vu dans le forum que c'était un projet.
Sinon tant pis .
Merci pour votre réponse.
Bonjour à tous
Merci beaucoup pour ce tuto qui m'a permis de comprendre comment on utilise les classes en vb.
Néanmoins je n'ai pas réussi à comprendre comment répondre à mon besoin :
Collection de Niveau1
Classe Niveau1 contient un nom (string) et une collection d'objet de type Niveau2
classe Niveau2 contient un nom (string) et une collection de string (niveau3)
j'arrive à définir les 2 modules de classe
Niveau1
Niveau2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Private pName As String Private pNiveau2() As Niveau2Type
mais quand j'essaie d'appeler les propriété définies dans la classe Niveau1 ca plante sur le let du Niveau2 même s'il ne contient rien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Private pName As String Private pNiveau3() as String
Il y a probablement un point que j'oublie mais même après de nombreuses recherches sur le net je ne m'en sort pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Public Property Let module(NewModule As Niveau2Type) Debug.Print "in let module" End Property
Je ne suis pas sur de poster au bon endroit, ou bien les réponses sont prévus dans les parties 2 et 3 du tutoriel ??
Merci d'avance
Bonjour Pierre,
Je viens enfin de prendre le temps de lire à fond ce tutoriel que j'avais déjà parcouru en vitesse il y a longtemps et malgré le fait que j'avais déjà écrit deux trois modules classe pour la création de multiples contrôles dans des formulaires, sa lecture et la réalisation étape par étape de son exemple m'a permis de découvrir d'autres facettes du module de classe.
Merci pour ce magnifique travail et j'attends avec impatience la sortie de la 2ème partie.
Philippe Tulliez
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
bonjour,
Je viens de découvrir la partie 1 du tuto concernant la création et utilisation des classes personnalisées en VB 6.0 et VBA (Partie 1) et j'aimerais savoir si les parties 2 & 3 ont été écrites ou non ?
La partie 1 étant très intéressante et très claire, j'espère que les 2 autres ont enfin vu le jour pour que je puisse les consulter.
bravo encore pour cet excellent tuto à Pierre Fauconnier
Très bon tuto.
Je n'utilisais pas vraiment les classes en VBA jusqu'à maintenant car je ne savais pas trop comment faire ; je vais pouvoir modifier beaucoup de choses grâce à tout ce que je viens d'apprendre. Merci.
Je ne trouves les parties 2 et 3 sur le site, est-ce que je suis passé à côté ? Est-ce qu'elles sont toujours d'actualité ?
Merci
Merci Pierre Fauconier pour ce travail extraordinaire que vous nous offrez !
je découvre grâce à vous les modules de classe et, comme tout le monde je le vois bien, je suis très demandeur des parties 2 et 3 de ce tutoriel qui pour moi, autodidacte plein de lacunes, m'a permis de faire évoluer considérablement ma façon d'aborder le code VBA.
Je vous remercie encore et espère malgré le temps qui a passé depuis la 1ére partie avoir la chance de pouvoir travailler sur la suite.
Je suis aussi demandeur de modules de classe VBA libres pour pouvoir compléter ma formation en cas de non publication des parties 2 & 3 afin de faire évoluer mon code dans le bon sens.
avec toute ma gratitude
Bien cordialement
Jean-Paul
Vos remerciements m'encouragent à la suite... Juste trouver le temps... (heu, mettre le temps à cela plutôt qu'à autre chose... )
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Ah, le père-noël n'est pas passé ici :-s
Joyeux Noël à tous quand même :-)
eric
Exemple : Un mot de passeUne propriété pourrait être en écriture seule, et donc définissable mais non lisible.
Je ne vois pas d'exemple concret pour ce cas.
Ton tuto sur les classes VBA est très interressant
Salut Francis,
Si tu utilises un objet myLogin issu d'une classe Login ayant deux propriétés (login et mdp) pour tester l'existence de la "paire de données" dans une DB, au niveau de la dal (data access layer, en programmation trois-tiers), je vois mal comment tu vas t'en tirer pour récupérer le mdp s'il est en lecture seule .
Cela dit, merci pour ton appréciation de mon tutoriel.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Bonjour Pierre,
Merci pour votre tutoriel, très accessible, clair et détaillé et qui vient combler un manque de documentation criant.
Une suggestion/demande : J'ai constaté par moi même qu'il était possible de mettre des objets et des collections comme propriété d'une classe personnalisée d'objet. Peut-être pourriez vous développer ce point et indiquer comment faire ?
Bonjour,
Votre tuto est vraiment bien abordé, et je l'ai utilisé plusieurs fois pour me rappeler les bases objet en VBA.
J'ai évidement hâte de lire la partie 2, sur l'utilisation de collection, etc...
Donc, je met un petit message pour vous encourager à le faire et pour être informé dès qu'il sera publié
A+
Voilà un gros éclaircissement, très bon tuto pour un débutant comme moi, vivement la suite. Quoi, voilà déjà 2 ans que personne n'a laissé de commentaire. Il est pourtant toujours d'actualité.
Bonjour,
Votre tutoriel est très bien! Très clair et précis, de plus le fait de prendre un seul exemple qui évolue tout au long du tuto est une bonne idée, cela permet d'expérimenter, de revenir en arrière,... bref de bien comprendre les choses.
Tout ce contenu m'a permis d’appréhender les choses différemment en VBA.
Dans l'introduction vous parlez d'une seconde et troisième partie à ce tutoriel mais je ne les ai malheureusement pas trouvé? Ont elles retirées?
Je serais particulièrement intéressé par la suite de ce cours.
Cordialement.
Jean Christophe
Salut.
14 ans après, et sans avoir encore écrit les deux suites à ce tutoriel, je vous propose un billet permettant de créer simplement un objet lorsqu'il n'existe pas en VBA. J'ai créé un objet Date pour faciliter la manipulation des dates, et j'en parle dans ce billet... J'espère qu'il vous plaira
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Ce n'est pas faux de détruire explicitement les instances crées, mais ca peut devenir lourd.
Je préfère faire confiance au garbage collector de VBA (même s'il est limité), dans la plupart des cas, une instance qui sort de la portée d'utilisation est automatiquement détruite.
@Pierre Fauconnier:
Ton tutoriel est une bonne introduction, tu as cependant oublié d'aborder le constructeur (Class_initialize) et le destructeur (Class_Terminate).
je serais également allé plus loin, en introduisant les notions de classe à sémantique de valeur, sémantique d'entité, la notion de Factory, ainsi que ce qui fait le point fort des classes: L'héritage (si, si, ça existe en VBA).
Concernant les sémantiques:
Une classe, une fois instanciée, doit être directement utilisable.
Dans le cas d'une class à sémantique de valeur (comme dans ton exemple: un contact), cela à du sens de créer une instance vierge, ainsi que modifier chacune de ses propriétés (ou presque).
Par contre, une classe à sémantique d'entité n'obéit pas aux même règles, par exemple pour une classe Voiture, cela n'a pas de sens de modifier son modèle ou son N° de série (ces propriétés doivent être fixées une fois pour toute à la création).
VBA n'offrant malheureusement pas de moyen simple d'enforcer un tel comportement, une solution consiste à déléguer l'instanciation et initialisation de l'objet à une fonction dite "Factory", ainsi qu'a un pseudo-constructeur.
Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 '// fonction "Factory" Public Function CreateVoiture(ByVal Constructeur As String, ByVal Modele As String) As Voiture Dim Voiture As Voiture Set Voiture = New Voiture Voiture.Create Constructeur, Modele Set CreateVoiture = Voiture End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 '// Class Voiture Private mConstructeur As String Private mModele As String '// Pseudo constructeur Friend Sub Create(ByVal Constructeur As String, ByVal Modele As String) mConstructeur = Constructeur mModele = Modele End Sub Public Property Get Constructeur() As String Constructeur = mConstructeur End Property Public Property Get Modele() As String Modele = mModele End PropertyConcernant l'heritage:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 '// Fonction de test Public Sub Test() Dim Voiture As Voiture Set Voiture = CreateVoiture("Peugeot", "205") Debug.Print Voiture.Constructeur '// Ok Voiture.Constructeur = "Renault" '// Ko End Sub
C'est une notion beaucoup plus complexe, et VBA ne permet d'hériter que des interfaces publiques.
Cela permet Cependant d'introduire des variances de comportement car la classe héritante est substituable à la classe de base
Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 '// Interface Animal '// Ne pas oublier de mettre la propriété Instancing à PublicNotCreatable Option Explicit Public Function Cris() As String End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 '// Class Chat Option Explicit Implements Animal Private Function Animal_Cris() As String Animal_Cris = Cris End Function Public Function Cris() As String Cris = "Miaou" End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 '// Class Chien Option Explicit Implements Animal Private Function Animal_Cris() As String Animal_Cris = Cris End Function Public Function Cris() As String Cris = "Wouf wouf" End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 '// Tests Public Sub Test() Dim Animal As Animal Set Animal = New Chat Debug.Print Animal.Cris '// Affiche Miaou Dim Chien As Chien Set Chien = New Chien Debug.Print Chien.Cris '// Affiche Wouf wouf Dim Chat As Chat Set Chat = New Chat Debug.Print Chat.Cris '// Affiche Miaou Affiche Chien '// Affiche Wouf Wouf Affiche Chat '// Affiche Miaou End Sub Public Sub Affiche(ByRef Animal As Animal) Debug.Print Animal.Cris End Sub
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager