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 :

Insérer une formule de calcul avec une boucle


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Septembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2014
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Insérer une formule de calcul avec une boucle
    Pièce jointe 156381Bonjour à tous !!

    Je reviens avec un nouveau problème et mes compétences de débutante en VBA.

    Vous trouverez un exemple de mon fichier en pièce jointe. Ce fichier, suivant les services, contient entre 3000 et 5000 lignes. De plus, pour certain service, il y a une autre donnée "NETWORK" qui est intégrée entre les lignes de MARGE et les lignes de TAUX.

    Le but de ma macro est d'intégrer une formule de taux de marge sur toutes les lignes "2015 B" pour tous les mois
    Plusieurs éléments à prendre en compte:
    - Cette formule doit apparaitre car les données de CA et MARGE seront saisies par la suite et le calcul doit se faire automatiquement.
    - Suivant la présence ou non de NETWORK, la formule est différente: MARGE / CA ou (MARGE + NETWORK) / CA
    - Les variables sont parfois déclarées en public car cette procédure est juste un extrait de l'ensemble de ma macro
    - pour NETWORK et ANNEE_Bud, il s'agit d'InputBox déifnies en début de macros


    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
     
    Sub MAJ_BUDGET_DETAIL()
    ' Mettre à jour l'onglet détail pour le budget
     
    Public NETWORK As Integer
    Public ANNEE_Bud As Integer
    Dim DernLigneTAB_DETAIL as Long
    Dim y As Integer
     
    ANNEE_Bud = 2015
    NETWORK = 6
     
    ' Sélectionner la feuille DETAIL et déterminer la colonne des Phase
    Sheets("DETAIL").Select
    DernLigneTAB_DETAIL = Range("A" & Rows.Count).End(xlUp).Row
    MsgBox (DernLigneTAB_DETAIL)
    Set ColPhase = Range("D5:D" & DernLigneTAB_DETAIL)
     
     
    For Each phase In ColPhase
            Select Case phase
                'Case Is = ANNEE_Bud - 1 & " R"
                    'phase.Interior.Color = Coul_Phase3
                    'phase.Offset(0, 1).Interior.Color = Coul_Phase3
                Case Is = ANNEE_Bud & " B"
                        If phase.Offset(0, 1).Value = " TAUX" Then
                            For y = 2 To 14
                                ' Si NETWORK = NO
                                    If NETWORK = 6 Then
                                        ValMarge = phase.Offset(-1, y).Value
                                        ValCA = phase.Offset(-2, y).Value
                                        phase.Offset(0, y).FormulaR1C1 = Taux_ss_network(ValMarge, ValCA)
                                        phase.Offset(0, y).Font.Color = RGB(0, 0, 0)
                                    End If
                               ' Si NETWORK = YES
                                    If NETWORK = 7 Then phase.Offset(0, y).FormulaR1C1 = (phase.Offset(-2, y) + phase.Offset(-2, y)) / phase.Offset(-3, y)
                            Next y
                        End If
     
            End Select
        Next
    End Sub
     
    Function Taux_ss_network(ValMarge, ValCA)
    Taux_ss_network = ValMarge / ValCA
    End Function
    Les problèmes rencontrés sont les suivants:
    - la formule n'apparait pas dans les cellules, uniquement le résultat
    - un message d'erreur apparait: Erreur d'exécution 6 "dépassement de capacité"

    Pouvez-vous s'il vous plait m'aider à corriger ce code??

    Je vous remercie par avance.

    Jessica
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Je n'ai pas rencontré de message d'erreur, mais tu pourrais essayer en changeant cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If NETWORK = 6 Then
    '    ValMarge = phase.Offset(-1, y).Value
    '    ValCA = phase.Offset(-2, y).Value
        phase.Offset(0, y).Formula = "=" & phase.Offset(-1, y).Address & "/" & phase.Offset(-2, y).Address & ""
        phase.Offset(0, y).Font.Color = RGB(0, 0, 0)
    End If
    PS: habitue-toi a déclarer tes variables et n'utilise pas trop Public lorsque pas vraiment nécessaire.
    Dans ton exemple, les variables Public devraient se situer en entête de module et non pas dans la Sub.
    MPi²

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/06/2015, 20h59
  2. Réponses: 4
    Dernier message: 14/09/2014, 12h23
  3. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  4. Activer une formule lien hypertexte avec une macro
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/03/2010, 09h58
  5. Réponses: 2
    Dernier message: 12/04/2006, 10h33

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