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

Macros et VBA Excel Discussion :

Module de classe


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé Avatar de Neutthsch
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 105
    Par défaut Module de classe
    Bonjour le Forum,

    Ca fait plusieurs fois que je m'attaque au pavé des modules de classe, mais en vain je n'y arrive pas.

    Pour faire simple j'ai développé un petit prog qui recherche le terme renseigné par l'opérateur et en fonction de l'endroit où il l'a trouvé :

    Ouvre un userform qui compile dans une listbox toutes les lignes qu'il a trouvé dans un tableau ("Catalogue") contenant ce terme.

    Compile des données (dans X colonnes de la listbox) provenant de différents tableaux.

    Mon premier problème c'est que je dois définir plusieurs tableaux annexes en démultipliant les déclarations

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    Public Catalogue As Workbook, Wprint As Workbook, Marche As Workbook, Procedure As Workbook, Attendus As Workbook …
     
    Public CatSheet As Worksheet, Sprint As Worksheet, MarSheet As Worksheet, Prosheet As Worksheet, Attsheet As Worksheet …
     
    Public LastCatRow As Integer, LastMarRow As Integer, LastProRow As Integer, LastAttRow As Integer ...
     
    Public Sub init_var()
     
    Set Catalogue = GetObject("O:\03 DF\35 BR\353 SSP\02.section SSP\30K\archives\MARINE archives 2009-2012\catalogue habillement allégé avec substitution V0.xlsm")
     
    Set CatSheet = Catalogue.Sheets("Catalogue articles SH")
     
    LastCatRow = CatSheet.Cells(8, 1).End(xlDown).Row
     
    Set Marche = GetObject("O:\03 DF\35 BR\354 SEP\OUTIL EXECUTION\LISTE MARCHES A BDC HAB.xlsm")
     
    Set MarSheet = Marche.Sheets("Mini Maxi Global")
     
    LastMarRow = MarSheet.Cells(11, 1).End(xlDown).Row
     
    Set Procedure = GetObject("O:\08 DOCUMENTS DE TRAVAIL\COMMUN\DAF_planif\_Archives\3- Portefeuille\PORTEFEUILLE DES PROCEDURES.xlsx")
     
    Set Prosheet = Procedure.Sheets("PORTEFEUILLE")
     
    LastProRow = Prosheet.Cells(4, 2).End(xlDown).Row
     
    Set Attendus = GetObject("O:\08 DOCUMENTS DE TRAVAIL\COMMUN\SECTION_RESSOURCES_PRESTATIONS\ATT HAB\Suivi Attendus HAB (en ligne).xlsb")
     
    Set Attsheet = Attendus.Sheets(" Attendus ARES")
     
    LastAttRow = Attsheet.Cells(5, 1).End(xlDown).Row
    …
     
    End Sub
    Et j'aimerais pouvoir (à l'aide d'un module de classe?) simplifier l'ensemble :

    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
     
     
    'Dans le module de classe cFile
     
    Public Classeur As Workbook
    Public NomWB as String
    Public Chemin as String
    Public NomFeuil as String
    Public Feuille As Worksheet
    Public DerLigne As Integer
     
    Public Sub init_var()
     
    Set Fichier = GetObject(Chemin & NomWB)
    Set Feuille = Fichier.Sheets(NomFeuil)
    DerLigne = Feuille.Cells(8, 1).End(xlDown).Row
     
    End Sub


    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
    22
    23
     
    ' dans module
     
    Dim Catalogue As cFile, Procedure As cFile
    Set Catalogue = New cFile
    With Catalogue
                    .Nom="…"
                    .Chemin="\..."End With
     
    Set Procedure = New cFile
    With Procedure
                    .Nom="…"
                    .Chemin="\..."End With
     
    For Each Object in cFile
    Init_var.Object
    Next
     
    End Sub
    Mais je n'arrive pas à construire ce code correctement. J'ai lu pleins de tuto sur les modules de classe mais en vain.

    Quelqu'un pourrait me donner une piste ?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Un module de classe est un variable intelligente! Elle contient intrinsèquement toutes les propriétés et méthode utile.

    Il faut apprendre a raisonner autrement! Il faut considérer que ton module de classe travail sur un onglet et sauvegarde les informations collecté dns c'est propres variable!

    Nous utiliseront dans le programme principal d'une collection qui aiguillera vers la bonne instance du module de classe.

    La puissance d'un module de classe qu'il fasse beaucoup de choses c'est que l'on peut diviser le problème en milliers d'instance qui ne traiteront qu'une partie du problème!

    Tu peux hiérarchiser tes module de classe!

    Workbooks->workheets->famille->mot

    Un module de classe c'est de la programmation orienté objet, là tu fais du procédural! C'est toute ta méthode de penser qu'il faut revoir!

    Disons je suis un module de classe et je dois définir la couleur de ce qu'on me présent!

    Je vais répondre (rouge,bleu...) ; et ce quelque soit l'objet! C'est soit un autre module de classe ou le programme principal qui définira de ne me montrer que des petites voitures!

    Avec les modules de classe on empile des briques com un lego ,on s'assurer que chaque brique face exactement ce quelle est sensé faire et on l'oubli! Car en débug ça devient incompréhensible!
    Dernière modification par Invité ; 09/03/2017 à 08h05.

  3. #3
    Membre éprouvé Avatar de Neutthsch
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 105
    Par défaut Principe ok
    Dans les grandes lignes, je pense avoir compris le principe, mais je n'arrive pas à le mettre en application. Ton explication me parle mais je n'arrive à créer ça correctement. C'est tout à fait ce que tu dis je fini tjs par retaper ce que je sais faire...

  4. #4
    Invité
    Invité(e)
    Par défaut
    voici un petit exemple qui montre bien le raisonnement!

    ici le module de classe ne ce souci pas de qui est le destinataire des données extraient il les traitent comme ci c'était toujours le même! c'est le le programme principal qui s'en préoccupe et qui via une collection (Dictionary) aiguille vers la bonne instance de la classe!

    https://www.developpez.net/forums/d1...s/#post9054844

    tu définis un arborescente de classe qui contient une collection de la classe assugeti!

    classe Catalogue
    classe Wprint
    classe Marche
    classe Procedure
    classe Attendus
    classe CatSheet
    classe Sprint
    classe MarSheet
    classe Prosheet
    classe Attsheet

    tu donne l'information à la classe la plus haute qui regarde si elle est concerné, si oui elle traite le problème si non elle passe à la classe assujetti qui applique le même raisonnement!
    -> Catalogues -> Wprints -> Marches -> Procedures -> Attenduss -> CatSheets -> Sprints -> MarSheets -> Prosheets -> Attsheets
    Dernière modification par Invité ; 09/03/2017 à 09h06.

Discussions similaires

  1. [VBA] Module de classe et évènement
    Par Caroline1 dans le forum Access
    Réponses: 9
    Dernier message: 20/03/2013, 23h23
  2. [Module de classe] Fonction non liée à l'instance?
    Par Caroline1 dans le forum Access
    Réponses: 6
    Dernier message: 07/04/2006, 20h13
  3. Réponses: 4
    Dernier message: 31/03/2006, 15h16
  4. Réponses: 8
    Dernier message: 22/02/2006, 15h09
  5. variables publiques ou module de classe ?
    Par niclalex dans le forum Access
    Réponses: 3
    Dernier message: 04/10/2005, 18h49

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