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 :

De la bonne façon de débuter un projet - Déclaration et portée de variable [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Par défaut De la bonne façon de débuter un projet - Déclaration et portée de variable
    Bonjour à tous et toutes,

    Pour une question de montée en compétences au sein du poste que j'occupe dans mon entreprise d'une part,
    et l'affection que j'ai depuis toujours pour le traitement des données d'autre part,
    j'ai mis sur pied un projet VBA Excel qui me permet d'extraire les informations pertinentes que je me dois de connaître (répartitions de volumes, ...)
    pour avoir une bonne "photo" de ce qui ce passe dans notre magasin de pièces.

    La première version de ce projet fait ce que j'attends d'elle MAIS le code qui en résulte est ( j'en suis sûr...) immonde....
    J’obtiens les informations voulues à grands coups de UsedRange.AutoFilter et de WorksheetsFunction.Subtotal(109,..)


    J'ai donc décidé la refonte intégrale du "machin" qu'est le projet actuellement, pour le recréer de la façon la plus efficace/propre possible.

    J'ai acheté un bouquin 2 en 1 édité aux éditions ENI pour progresser proprement (en arrêtant de Googleliser la moindre instruction) mais, en tant qu'Autodidacte,
    j'ai du mal à avoir une vision de comment on construit proprement un projet de bonne envergure.


    Ma première question portera donc sur la déclaration des variables.
    Le projet final est divisé en 6-8 modules dans lesquels j'utilise encore et encore les mêmes variables et objets(fichier source, feuille de destination des données,....).

    Est-ce que , selon vous, le code qui suit est acceptable ou c'est déjà une horreur sans nom ?

    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
     
    Option Explicit
     
    Public site(2) As String, natureClient(5) As String, codeCombi(3) As String
    Public iSite As Integer, iNature As Integer, iCombi As Integer
    Public colQ As Range
     
    Sub initialisationProjet()
     
        Set colQ = wsDatas.Range("P:P")
     
        site(0) = "A"
        site(1) = "B"
     
        codeCombi(0) = "I"
        codeCombi(1) = "G"
        codeCombi(2) = "K"
     
     
        ' NETTOYAGE DE LA FEUILLE "DATAS" DE DESTINATION
        wsDatas.AutoFilterMode = False
        wsDatas.UsedRange.Clear
     
        ' OUVERTURE DU FICHIER SOURCE ET COPIE DES DONNEES VERS LA FEUILLE "DATAS"
        Workbooks.Open Filename:="D:\PARTAGE_AVS\RawDatas.xlsx"
        Workbooks("RawDatas.xlsx").Worksheets("2021").UsedRange.Copy wsDatas.Range("A1")
     
        ' FERMETURE DU FICHIER SOURCE
        Workbooks("RawDatas.xlsx").Close
     
    End Sub

    Merci par avance pour vos avis !
    N.B : SI quelqu'un est arrivé jusqu'ici, existerait-il un bon livre qui traite de la bonne façon de structurer un projet (une fois la syntaxe de base du VBA acquise) ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut
    Bonjour,

    Vu l'enthousiasme suscité par ta question, moi qui ne suis pas du tout un professionnel mais un autodidacte comme toi, je vais me permettre de lancer le débat... Ça me permet de le faire en toute humilité, y compris avec un zeste d'humour ou de vitriol selon comme on le prend...
    De toute façon je ne pense pas qu'il y ait de schéma général.
    Tout projet suggère ou impose ses propres contraintes en fonctions des moyens utilisés qui dépendent essentiellement de tes connaissances pratiques.
    Vu que notre niveau est à des années lumières de celui du programmeur polyvalent multi-langage, la meilleure codification est nécessairement celle que tu comprends le mieux et ou tu t'y retrouves le plus facilement...
    De toute façon aucun programmeur expérimenté n'acceptera jamais de reprendre ton programme en l'état... Probablement parce que cela lui prendrait moins de temps de tout repenser à sa manière et de tout réécrire plutôt que de déchiffrer tes démêlés avec VBA.
    En ce concerne les déclarations je n'aime pas du tout les déclarations publiques. Je trouve que tu en fais un usage trop systématique : Cela impose des recherches parfois complexes au débogage. Il me semble préférable d'utiliser des déclarations de niveaux modules, quitte à passer des paramètres aux procédures appelées...
    Mébon une fois qu'on a dit ça, il faut y regarder de plus près ! Si tu ne vois pas d'autres solution alors vas-y.

    Déclaration des Array et Integer
    Moi j'écrirai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ArrS(2), ArrN(5), ArrC(3)
    Public iSite%, iNature%, iCombi% 'sans enthousiasme !
    Quant à "ColQ" ça me semble un peu "bof"
    Mébon encore une fois c'est toi qui voit le mieux en fonction de tes connaissances !

    En résumé, je suppose que si je voyais la totalité du projet je n'écrirais jamais ça, il n'empêche que si ça fait le taf...7

    A part ça je n'ai jamais trouvé d'ouvrage qui traite de ce genre de question sauf peut-être un des tout premier tome de Microsoft 3 qui si ma mémoire est bonne avait une bonne approche théorique de la POO.
    Je suppose que ça dépend grandement de nombreux paramètres : Utilises tu des compléments perso ?
    Personnellement je structure peu ou prou mes projets moyennement complexes de la manière suivante :

    Les CodeName 3 ou 4 lettres Maxi !
    WsA Accueil
    WsBC BDClients
    WsBF BDFournisseurs
    WSBP BDProduits
    WsC Clients (Compta ?)
    WsD Datas (ou Param)
    WsF Fournisseurs
    WSBP Produits (Planning / Param ?)
    WsM Modèle
    WsR Reporting
    WsS Synthèse

    Mes modules par destination...
    mMain
    mPrg
    mFunc (fonctions)
    mImp (impress)
    mGraph
    mFrm (MiseEnForme, MFC)
    mUsual

    A+

  3. #3
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Bonjour,
    Voici quelques choses que j'utilisais dans les années 90 quand je programmai des cartes électroniques dans l'aéronautique !

    C'est une méthode très rigide mai ça permet d'apprendre.

    https://gaz.wiki/wiki/fr/Nassi%E2%80...derman_diagram

    https://www.edrawsoft.com/fr/nassi-schneiderman.html

    Je t'invite également à t'intéresser à la représentation cartésienne.
    http://www2.ift.ulaval.ca/~lamontagn...land-flory.pdf

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Personnellement, je ne suis pas un grand fan des variables publiques.
    En programmation, je préfère la phrase 'Diviser pour régner". Découper le problème en plusieurs morceaux traités par des fonctions.
    Une très bonne connaissance d'excel et des autres applications offices s'il faut les utiliser est un plus pour éviter de refaire par programme ce qui existe nativement

    UsedRange.AutoFilter et de WorksheetsFunction.Subtotal(109,..)
    L'usage des tableaux (ListObject) est incontournable pour bien commencer, Cela vous évitera l'utilisation de UsedRange et WorksheetsFunction.Subtotal(109,..)

    Ce site regorge de tutoriels
    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

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    L'usage des tableaux (ListObject) est incontournable pour bien commencer, Cela vous évitera l'utilisation de UsedRange et WorksheetsFunction.Subtotal(109,..)
    Ce site regorge de tutoriels
    Bonjour Philippe, le forum.
    Je n'osais le dire tant ce sujet est resservi, mis à toute les sauces bien souvent hors de propos mais dans le cas de notre ami, cela me semble également un axe de développement personnel à prioriser !
    A+

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Par défaut
    Merci beaucoup pour vos réponses à tous les trois !

    @Philippe Tulliez :
    J'ai déjà parcouru quelques tutoriels de ce (formidable) site, je vais continuer et me pencher en priorité sur les tableaux (ListObject) !
    (ça ne doit pas être rigolo de répondre encore et toujours aux mêmes questions, désolé pour ça)

    @Thumb down : je vais parcourir ces ressources également, merci !

    @galopin01 :
    Merci pour ces éléments de réponse qui, mine de rien, m'éclairent bien sur la façon d'appréhender le projet plus proprement.
    En effet, je me suis rendu compte à l'usage que Quant à "ColQ" ça me semble un peu "bof" était plus que bof....
    Ca m'a bien embêté et, au final, il a fallu que je passe par un set colQ = wsDatas.Range("P : P") à chaque module qui utilisait cet objet ......


    Je me permets de passer le sujet en Résolu, je potasse, j'essaie d'assimiler ce qui s'est dit sur le fil et reviens vers le forum le plus vite possible.
    (je regarde chaque jour les problèmes rencontrés et les solutions données, c'est très instructif également)

    Encore merci !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Bonne façon de faire ou non ?
    Par gregetso dans le forum Langage
    Réponses: 10
    Dernier message: 14/10/2008, 14h41
  2. Question sur la bonne façon de faire un JMenuBar
    Par bit_o dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/06/2007, 10h26
  3. [Installation] PHP et CVS : la bonne façon de travailler ?
    Par deuspi dans le forum CVS
    Réponses: 11
    Dernier message: 22/03/2007, 09h30
  4. [Checkbox] La bonne façon et comment faire
    Par Meewix dans le forum Langage
    Réponses: 9
    Dernier message: 19/10/2006, 09h23
  5. Comment bien débuter un projet?
    Par Sylvester dans le forum Langage
    Réponses: 3
    Dernier message: 02/03/2006, 20h45

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