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 :

Fonction sous VBA - comment déclarer


Sujet :

Macros et VBA Excel

Vue hybride

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut Fonction sous VBA - comment déclarer
    Bonjour,

    J'ai créé un code de mise en forme, que j'aimerais appliquer à quatre tableaux totalement similaires.
    Problème : le code fait plusieurs centaines de lignes, et je n'ai pas envie de le copier coller 4 fois pour l'appliquer au retraitement des quatres tableaux.

    Je ne maîtrise pas trop les fonctions VBA, et je voulais donc savoir si il était possible de créer une fonction pour ce type de code ?

    Si oui, comment l'implémenter?

    Je vous remercie d'avance

    A bientôt

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,

    tu peux écrire le code en question dans un module plutôt qu'ua niveau de la feuille de tes tableaux.

    Pour l'appliquer à plusieurs reprises sur différents tableaux, il faut utiliser les paramètres dans ta fonction/procédure.

    Tu pourras y passer des plages de cellules ou un nom de tableau, voire une combinaison des deux

    Peut-on avoir une partie de ton code actuel, pour proposer des adaptations ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Une fonction reçoit des paramètres et retourne une valeur (du type défini pour la fonction).
    Elle s'utilise en lui passant les paramètres qu'elle doit traiter.
    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CommandButton1_Click()
      Dim toto As Integer, titi As Integer
      toto = 5
      titi = 3
      MsgBox tafonction(toto, titi)
     
    End Sub
     
    Private Function tafonction(byval n1 As Integer,  byval n2 As Integer) As Integer
      tafonction = n1 + n2
    End Function
    Reste à savoir ce que fait ton code et si c'est vraiment d'une fonction que tu as besoin ...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    Merci de vos réponses !

    Pour être plus précis, on considère que j'ai des tableaux sur "feuil1", "feuil2", "feuil3", "feuil4" ayant tous le même format et des données différentes.

    J'ai voulu créer une fonction de mise en forme.
    Individuellement, mon code fonctionne, mais lorsque j'essaie de le mettre sous forme de fonction, le message d'erreur suivant m'est retourné : "objet requis"

    Par exemple, j'appelle la conction de la manière suivante pour la mise en forme sur feuil1:
    MEF_1er_slide(Feuil1)

    Voici mon code qui concerne la fonction
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
    Static Function MEF_1er_slide(nom_table As Worksheet)
    ThisWorkbook.Sheets("nom_table").Activate
    'Mettre en forme les en-têtes du tableau
    Range(Cells(1, 1), Cells(1, 4)).Select
    Selection.Font.Bold = True ' mettre en gras
    Selection.Font.ColorIndex = 2 ' mettre en blanc
    Selection.Interior.ColorIndex = 30 ' mettre la cellule en bordeau
    Cells(1, 1).Value = "Notations"
    Cells(1, 2).Value = "Circuit"
    Cells(1, 3).Value = "En nombre"
    Cells(1, 4).Value = "En %"
     
    'Centrer les données du tableau
    Cells(1, 1).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    With Selection
    .HorizontalAlignment = xlHAlignCenter
    .VerticalAlignment = xlVAlignCenter
    End With
     
    'On tri la colonne A de façon décroissante en déclarant A1 comme en-tête
    Range("A1").Sort , Key1:=Columns("A"), Header:=xlGuess, Order1:=xlDescending
    i = 0
    Cells(1, 1).Select
     
    'On compte le nombre de OK
    For Each cellule In Range(Selection, Selection.End(xlDown))
    If cellule.Value = "OK" Then i = i + 1
    Next
     
    'Réalise la somme pour les "Total"
    Rows(i + 2).Insert
    Cells(i + 2, 1).Value = "Total"
    Cells(i + 2, 3).Value = Application.WorksheetFunction.Sum(Range(Cells(2, 3), Cells(i + 2, 3)))
    Cells(i + 2, 4).Value = Application.WorksheetFunction.Sum(Range(Cells(2, 4), Cells(i + 2, 4)))
     
    'Calcul somme pour "notations (*)"
    Cells(k + 2, 1).Value = "Notations (*)"
    Cells(k + 2, 3).Value = Cells(i + 2, 3).Value + Cells(k + 1, 3).Value
    Cells(k + 2, 4).Value = Cells(i + 2, 4).Value + Cells(k + 1, 4).Value
     
    etc... plein d'autres retraitements
     
    End Function
    Apparemment, je ne peux pas créer ma fonction dans ma "macro1"... donc je l'ai fait en dehors, et j'ai l'impression qu'à aucun moment ma fonction est lue...
    Quand je fais : "outil => Macros => macros" je en vois que ma macro1 et pas ma fonction...


    Je vous remercie d'avance pour votre aide.

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

Discussions similaires

  1. [AC-2003] comment trouver la procedure Public Fonction sous VBA Access
    Par mohamed9 dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/09/2009, 16h57
  2. Réponses: 11
    Dernier message: 19/06/2006, 13h51
  3. Réponses: 12
    Dernier message: 10/06/2006, 19h07
  4. [VBA]localiser un appel fonction sous excel
    Par random dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/01/2006, 10h09
  5. Réponses: 2
    Dernier message: 04/02/2005, 13h23

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