IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

[Tutoriel] Les classes personnalisées en VB(A)


Sujet :

VBA

  1. #1
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut [Tutoriel] Les classes personnalisées en VB(A)
    Bonjour

    Vos commentaires sur le tutoriel Classses personnalisées, modules de classe en VBA et VB nous intéressent.

    Critiques (constructives), remarques, proposisitions d'ajout ou d'amélioration, coquilles ()... Tout est bienvenu dans l'esprit d'entraide de DVP.

    A vos plumes...
    "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...
    ---------------

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    J'ai trouvé ce tuto excellent, c'est une bonne approche sur les classes que je commence à comprendre

    Philippe

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    EXCELLENT, a été mon livre de chevet.

    Trois petites remarques que tu jugeras constructives, j'espère... :

    1. Tu n'utilises pas ByVal/ByRef pour les arguments, personnellement j'aime bien les utiliser, c'est comme l'intégrité référentiel ça évite des erreurs et surtout on profite avec byval du cast implicite.
    2. Je fais parfois des entorses à la règle qu'une classe ne doit pas gérer les erreurs en interne... Sur le principe je suis ok mais il existe des exceptions en particuliers des erreurs sans conséquences pour l'appelant ou des erreurs plus facilement gérables par la classe sans interventions extérieure ou dans le cas d'un partage des responsablités entre la classe et le code.
    3. Sur une ou deux copie d'écran, j'ai remarqué que tu ne libérais par ta classe explicitement en fin de fonction. J'ai pris l'habitude de le faire systématiquement mais c'est peut-être du superflu ?

    Il manque seulement les parties 2 et 3 pour que ton oeuvre deviennent une référence .

    Encore bravo,

    Philippe

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Excellent !
    Bonjour,
    j'ai trouvé votre tutoriel remarquable. C'est bien simple : votre travail a révolutionné ma manière de penser le mien !
    Par ailleurs, je tiens à souligner que les guides sur les modules de classe VB et VBA sont plutôt rares. J'ai cherché quelques informations complémentaires sur la toile, il n'y a pas (plus ?) grand chose. Même en anglais.
    J'attends avec impatience les deux parties suivantes.
    Encore Bravo et Merci.

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut Philippe

    Désolé de répondre tardivement, mais certaines priorités sont plus prioritaires que d'autres...

    Citation Envoyé par philben Voir le message
    ...
    Trois petites remarques que tu jugeras constructives, j'espère... :...

    1. Tu as raison. Le code est plus propre en notant explicitement le type du passage. Je vais corriger cela. Heu... C'est quoi, l'intégrité référentielle?

    2. L'exception confirme la règle... Je pense que le principe est sage. Cela étant, il vaut surtout pour des classes utilisées par d'autres (cas d'une DLL COM en VB6, par exemple), mais s'applique évidemment moins pour des codes VBA dans lesquels les classes et le code qui les utilise se trouvent dans le même projet.

    3. Tu as (encore ) raison. Dans le cadre du tuto, je n'ai pas été assez rigoureux avec mon code, mais il faut libérer les ressources en repassant les variables objet à nothing.

    Merci pour ta participation. Je vais me mettre aux parties 2 et 3, histoire de t'assurer encore quelques nuits blanches à me lire

    Bonne fin de semaine,
    "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...
    ---------------

  6. #6
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Sur une ou deux copie d'écran, j'ai remarqué que tu ne libérais par ta classe explicitement en fin de fonction. J'ai pris l'habitude de le faire systématiquement mais c'est peut-être du superflu ?
    A priori c'est superflu puisque les objets sont détruits en fin de procédure. Toutefois, c'est bien plus sage de les affecter à nothing surtout pour un tutoriel POO. Pour un tutoriel DAO, ça passe

  7. #7
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Citation Envoyé par Tofalu Voir le message
    A priori c'est superflu puisque les objets sont détruits en fin de procédure. Toutefois, c'est bien plus sage de les affecter à nothing surtout pour un tutoriel POO. Pour un tutoriel DAO, ça passe
    Bonjour,
    L'objet occupe en fait un espace mémoire unique quelque soit le nombre d'instances -
    seul un offset de cet espace est modifié quand une nouvelle instance est crée (le compteur d'instance).
    Nothing n'agit que sur le compteur de références, mais ne détruit pas directement l'objet :
    son utilisation permet d'anticiper ce qui se fera automatiquement en fonction de la portée de l'instance concernée -
    l'objet ne sera détruit que quand le compteur sera à 0.


    exemple:
    procédure A : déclaration locale d'un objet : compteur=1
    appel dans la procédure d'une procédureB à laquelle est passée l'objet cloné : compteur =2
    dès que Objet cloné = Nothing => compteur =1
    sinon attente que l'objet cloné atteigne la fin de sa portée (fin de procédure) => compteur=1

    dans procédureA : objet original = Nothing entraine compteur =0 et destruction de l'objet
    sinon en fonction de la portée de l'objet original

    Quid en cas de plantage du code ?
    Le compteur n'est pas obligatoirement décrémenté et l'espace mémoire n'est pas libéré.
    De fait, outre le gain de lisibilité du code, il semble donc plus sage de pratiquer la décrémentation via nothing
    dès que l'objet n'est plus utile sans attendre la fin de procédure
    (les placer systématiquement en fin de portée étant sans intérêt),
    voir de l'inclure dans la procédure de gestion d'erreur.

    PS: Il existe des Apis non documentées de msvbvm permettant d'agir directement sur le compteur de référence
    (Ce qui rend possible un pseudo Garbage Collector sous VB6).



    C'est un bon début. Je suis curieux de la suite.

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [Tutoriel] Les classes personnalisées en VB(A)
    Bonjour

    Étant nouveau dans la programmation, j'ai trouvé ce tuto vraiment bien expliquer, il me convient vraiment pour débuter.

    Je vous remercie Pierre pour ce travail ainsi http://www.developpez.net

    Par contre j'attends avec impatience les 2 autre parties

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 150
    Points : 100
    Points
    100
    Par défaut
    Bonjour Pierre,
    Je voulais te féliciter pour ce travail. Je pense que t'y a passé pas mal d'heures et grâce à toi j'espère que de plus en plus de monde commence un peu à "coder object" en VBA.

    Perso, j'aurais rajouté une partie sur qui permet un héritage entre classe mere et fille ou avec la méthode ci dessous que j'ai apprise sur ce forum
    http://www.developpez.net/forums/d53...ion-objet-vba/

    En tout cas chapeau!!
    C'est grâce à des gens comme toi que developpez.com a une tel renommée.

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Bonjour -={-_-}=-

    Merci de ton appréciation. Ecrire un tutoriel prend du temps, c'est vrai, mais c'est un excellent moyen d'approfondir une technique => je suis le premier bénéficiaire de ce travail

    Sur l'implémentation en VB(A), il y a eu cet échange très intéressant, qui m'a permis de développer une manière de travailler avec le ruban dans Access... J'ai l'idée de développer un tuto sur ce sujet (la nuit, ...enfin, une nuit...), mais je note l'idée d'aborder ce sujet, après les parties 2 et 3... Merci pour l'idée.

    Bonne continuation sur nos forums
    "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...
    ---------------

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 150
    Points : 100
    Points
    100
    Par défaut
    Mes commentaires sont tout faits justifiés lorsque la qualité est là.
    (J'aime bien quand ca mousse un peu).

    Je profite de ce post pour dire que pour moi il y a un manque sur ce forum (VBA) et le net général.

    Ya plein de références dans VBA que je ne sais pas exploiter...
    Ok ya ADODB, ADOX, DAO, Scripting....

    Mais les autres....

    Je suis sur que si quelques personnes nous en faisait un topo dessus, on pourrait faire plus de choses en VBA.

    En tout cas bravo les gars pour ce qui a dja été fait

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Citation Envoyé par -={-_-}=- Voir le message
    Je suis sur que si quelques personnes nous en faisait un topo dessus, on pourrait faire plus de choses en VBA.
    Pourquoi ne pas te lancer ?

  13. #13
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Et bravo pour ce tuto remarquablement clair.
    Une coquille peut-être au IV-E-2-b-ii. Création de l'évènement au sein de la classe, il y a 2 fois la mise à jours de la propriété Let, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Raise Event AnniversaireDans10Jours(Arg)
    et Une fois Arg = mDateNaissance, la deuxième arg = DateAnniversaire, ce qui devrait être mieux.

    Mais encore bravo.

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  14. #14
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    J'ai l'habitude des tutoriels VBA EXCEL de ce site, qui sont très bien fait pour un non informaticien, celui ci n'échappe pas à la règle. Merci.

    Quid de la partie 2?
    La conclusion de cette première partie m'a alléchée...

  15. #15
    Candidat au Club
    Homme Profil pro
    Consultant en Comptabilité
    Inscrit en
    Septembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Consultant en Comptabilité
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Un tutoriel franchement excellent
    Pierrre,

    Je me suis lancé dans le développement d'applications financières avec Excel, et tant de fois j'ai dû réécrire un code (quasiment le même à chaque fois) pour le formattage des cellules, la création d'objets graphiques, la conversion de données en d'autres types spécifiques, etc..

    Eh bien, grâce à votre tutoriel, j'ai appris que les classes étaient ce qu'il me fallait afin de fiabiliser/diminuer/améliorer (en définitive) mon travail.

    Mais, je me dis que peut-être devriez-vous en faire une autre version (une suite reprenant des thèmes plus avancés tels que la manipulation des API, par exemple, ou le formattage répétitif de plages de cellules). Ainsi, les 2 tutoriels constitueraient un apprentissage complet des classes personnalisées!

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 86
    Points : 74
    Points
    74
    Par défaut merci pour ce tuto.
    Je viens de découvrir ce tuto. Il est limpide. Je me suis mis aux modules de classe très récemment et ça a été une revolution pour moi.
    Je viens d'apprendre et de comprendre énormément de choses que j'avais zappées.
    Un grand merci et de façon général un grand merci à tous les contributeurs qui mettent leur savoir aux services des autres sur ce site.
    A la base je ne suis pas programmeur professionnel. Je suis juste enseignant. Et si maintenant j'arrive à faire des bases access uniquement codées en vba, c'est grâce à vous et la lecture de 4 livres qui datent de mathusalem!

  17. #17
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Merci pour cette appréciation. Content que ce tuto serve toujours, cinq ans après sa création.
    "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...
    ---------------

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Je vais encore passer pour un noob/casu mais c'est pas grave. J'ai commencé à m'attaquer à ce tuto, et après maintes recherches, je n'arrive toujours pas à 'compiler' le code pour le tester.

    Désolé pour ma naiveté mais j'aimerai bien réussir à tester ce que vous proposez pour en apprendre davantage.

    Merci d'avance.

  19. #19
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    en un mot : bravo !
    Vraiment merci pour ce tuto clair et détaillé.
    Tout ce qu'il faut pour démarrer, étape par étape.

    eric

  20. #20
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Bonjour,

    Citation Envoyé par klissou69 Voir le message
    Bonjour,

    Je vais encore passer pour un noob/casu mais c'est pas grave. J'ai commencé à m'attaquer à ce tuto, et après maintes recherches, je n'arrive toujours pas à 'compiler' le code pour le tester.

    Désolé pour ma naiveté mais j'aimerai bien réussir à tester ce que vous proposez pour en apprendre davantage.

    Merci d'avance.
    Qu'entends-tu pas "compiler"? Tu travailles en VB6 ou avec VBA? Avec le peu que tu donnes comme infos sur le problème que tu rencontres, je ne vois pas bien comment t'aider...
    "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...
    ---------------

Discussions similaires

  1. Tutoriel vidéo Unity 3D : Les classes
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 21/09/2014, 09h44
  2. Réponses: 0
    Dernier message: 13/08/2014, 22h31
  3. Questions sur les classes immuables (par rapport au tutoriel)
    Par Gugelhupf dans le forum Général Java
    Réponses: 7
    Dernier message: 04/08/2013, 15h35
  4. [Tutoriel] Les classes personnalisées en VB(A)
    Par Pierre Fauconnier dans le forum Vos contributions VB6
    Réponses: 0
    Dernier message: 20/05/2009, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo