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 :

Demande d'astuce: Quelles sont les regles pour generaliser un code? [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Femme Profil pro
    controleur de gestion
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : controleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Par défaut Demande d'astuce: Quelles sont les regles pour generaliser un code?
    Bonjour,

    J'ai farmouille sur le site mais a part des corrections de macro, je ne trouve pas de generalite a cette question:

    Quelles sont les regles pour generaliser une macro?
    Globalement, j'arrive a faire une macro correct mais je m'amuse a le copier a chaque fois pour modifier les parametres avec les risques d'instabilite et d'erreur que cela comporte.( Je passe plus de temps a corriger des erreurs de macro importe que d'en creer)

    Je constate (et surtout j'utilise >> tout le monde) des procedures ou il suffit de mettre dans un module puis de l'appeler dans un autre avec les parametres voulues.

    Comment on fait ca?

  2. #2
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Bonjour !

    Citation Envoyé par Scoulibri
    Je constate (et surtout j'utilise >> tout le monde) des procedures ou il suffit de mettre dans un module puis de l'appeler dans un autre avec les parametres voulues.

    Comment on fait ca?
    Qu'entends tu par là ? Tes macros sont dans des modules ? Peut être veux tu porter les macros d'un classeur sur d'autre ?

    Si c'est bien le cas, il faut se tourner vers les AddIn .xlam. Ce sont des fichiers complémentaire, que l'on peut activer depuis n'importe quelle classeur. La méthode est plutôt simple : Tu créée un AddIn contenant les macros "générique", et tu peux l'appeler depuis d'autre classeur, pour réutiliser tes macros "générique". Attention à la construction de tes programme en ce cas, il faut être le plus générique possible !

  3. #3
    Membre confirmé
    Femme Profil pro
    controleur de gestion
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : controleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Par défaut
    Bonjour,


    Attention à la construction de tes programme en ce cas, il faut être le plus générique possible !
    C'est exactement ma question. Quelles sont les regles pour rendre une macro le plus generique possible?

    Intuitivement, je comprend que le choix du nom de la variable est determinant

    par exemple je suis passée de cela
    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
    37
    38
    Sub test()
    Dim lastrow_month As Long
    Dim lastrow_annual As Long
    Dim month_sheet As Worksheet
    Dim annual_sheet As Worksheet
    Dim NoCol As Integer
    Dim criteria_Cell As Range
    Dim cell_destination As Range
    Dim Nolign As Integer
     
     
    Set annual_sheet = Sheets("citroen_sales")
    lastrow_annual = annual_sheet.Range("A" & Rows.Count).End(xlUp).Row
    'imaginons qu'on a le bon ordre :
     
    Set month_sheet = Sheets("month")
    lastrow_month = month_sheet.Range("A" & Rows.Count).End(xlUp).Row
     
    'Pour chaque cellule de Q2 à QX
    For Each criteria_Cell In month_sheet.Range("Q2:Q" & lastrow_month)
     
    lastrow_annual = 0 'bonne position?    
     
      'Si on a "0" dans QY (Y varie de 2 à X)
            If criteria_Cell.Value = 0 Then
     
               'Je place dans annual_sheet à la dernière ligne non-vide de la colonne A avec un décalage d'une ligne l'ensemble des valeurs de la lignes criteria_Cell.
               annual_sheet.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).EntireRow.Value = criteria_Cell.EntireRow.Value
     
     
     
     
            End If
     
            lastrow_annual = lastrow_annual + 1
        Next
     
    End Sub
    Par exemple, je souhaite generaliser le code precedent. Meme si j'ai une erreur 438 (objet ne supporte pas la method) au niveau de "For each criteria_cell In sheetstart, j'obtiens cela en redefinissant les noms et definition de mes variables:

    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
    Public Sub Dealer_List(SheetStart, SheetDestination, Criteria_Cell, filter1, filter2)
     
    For Each Criteria_Cell In SheetStart
     
     
            If Criteria_Cell.Offset(0, 1) = filter1 Or Criteria_Cell.Offset(0, 1) = filter2 Then
     
               SheetDestination.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).value = Criteria_Cell.value
               SheetDestination.Range("A" & Rows.Count).End(xlUp).Offset(0, 1).value = Criteria_Cell.Offset(0, -1).value
            End If
     
     
        Next
     
    End Sub
    donc existe-il d'autre regles que la definition des variables et proprietes?

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par scoulibri Voir le message
    Quelles sont les regles pour generaliser une macro?
    De l'analyse, de la pure logique, du bon sens …

    Donner la priorité aux fonctionnalités d'Excel avant le VBA,
    par exemple la procédure ci-dessus serait bien plus rapide sans boucle via un filtre avancé !


    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  5. #5
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut


    Re-bonjour,

    Nul besoin de déclarer tes subs en "Public", le fait de les mettre dans un module permet à toutes les macros du classeur d'y accéder. Si tu as besoin d'y accéder depuis un autre classeur, régulièrement, tourne toi vers les AddIn.xlam !

    Afin d'être plus précis dans tes macros, type les arguments de tes subs / fonctions !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub macroAddition(nombre1 as single, nombre2 as single)
    N'hésite pas à utiliser les arguments optionnels, pour rendre tes macros plus spécifique dans certain cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub macroAddiction(nombre1 as single, nombre2 as single, optional nombre3 as single, optional nombre4 as single)
    J'utilise les "Sub" pour des procédures Excel, et des "Function" pour traiter des données. La principal différence entre ces deux instructions est que la Function retourne une valeur, ce que ne fait pas le Sub.

    De manière général, essaie de découper ta macro en plusieurs petites instructions. Chacune des instructions peut être placées dans une fonction, et ainsi être réutilisées.

    Voilà, ce sont quelques remarques en vrac, mais comme le dit Marc-L, il faut coder un peu pour avoir les habitudes ... C'est en forgeant qu'on devient forgeron, on ne se réinvente pas

    Bon courage à toi !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    comme l'a dit Marc, de l'analyse, de l'analyse et encore de l'analyse.
    ça nous occupe 80% de notre temps!
    nous sommes des documentalistes, des rats de bibliothèques!

    il faut découper ta problématique en plusieurs. comme le disait Descartes un problème compliqué se résume à une somme de petits problème!

    c'est comme si je voulais me fabriquer un vélo!

    il y a la partie cycle; il y a la partie cadre et la partie propulsion les pédales, la chaîne et le pignons!

    en suite je découpe chaque module (Cadre,Cycle,etc...)
    jante,pneu,moyeux, etc... pour obtenir les méthode de chaque modules!

    et j'arrive tout naturellement sens vraiment me poser de question à des if then else

    si tu travail comme ça les chose vont couler de source et tu de demandera pourquoi tu as posé la question!!!!

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 09/09/2010, 11h12
  2. Réponses: 1
    Dernier message: 27/02/2009, 09h32
  3. Quelles sont les étapes pour préparer la création d'un jeu ?
    Par Nicolas A. dans le forum Développement 2D, 3D et Jeux
    Réponses: 13
    Dernier message: 17/09/2008, 18h09
  4. Réponses: 2
    Dernier message: 08/07/2008, 10h50
  5. Quelles sont les études pour devenir développeur ?
    Par soft0613 dans le forum Etudes
    Réponses: 9
    Dernier message: 15/11/2007, 14h04

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