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 :

Calcul conditionnel avec VBA Excel [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut Calcul conditionnel avec VBA Excel
    Bonjour le Forum,

    Je tente d'écrire une formule conditionnelle Excel avec VBA mais je n'y arrive pas, pourriez-vous m'apporter votre aide s'il vous plait ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =SI(Q34=0;0;SI(Q34<15000;0;SI(OU(Q34=15000;Q34<49999,99);G8;SI(OU(Q34>49999,99;Q34<99999,99);G11;SI(Q34>100000;G14;"")))))
    J'ai essayé avec l'enregistreur de macros et je ne m'y retrouve pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            "=IF(R[-6]C[1]=0,0,IF(R[-6]C[1]<15000,0,IF(OR(R[-6]C[1]=15000,R[-6]C[1]<49999.99),R[-32]C[-9],IF(OR(R[-6]C[1]>49999.99,R[-6]C[1]<99999.99),R[-29]C[-9],IF(R[-6]C[1]>100000,R[-26]C[-9],"""")))))"
    Je vous en remercie par avance
    René

  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,

    si on prend la syntaxe la plus proche de ta formule d'origine
    =SI(Q34=0;0;SI(Q34<15000;0;SI(OU(Q34=15000;Q34<49999,99);G8;SI(OU(Q34>49999,99;Q34<99999,99);G11;SI(Q34>100000;G14;"")))))

    on obtient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("P40").Formula= "=IF(Q34=0,0,IF(Q34<15000,0,IF(OR(Q34=15000,Q34<49999.99),G8,IF(OR(Q34>49999.99,Q34<99999.99),G11,IF(Q34>100000,G14,"""")))))"
    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
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Merci beaucoup pour votre réponse, le calcul se fait correctement après une petite rectification dans l'emplacement des conditions (c'est de ma faute).
    Cependant, la formule s'affiche dans la barre de formule et je ne souhaite pas. Il faudrait que le résultat s'affiche directement dans la cellule comme je l'ai fait pour ces autres formules :

    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
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Range("P24").Value = Range("G6").Value
    Range("P33").Value = Range("G21").Value
    Range("P44").Value = Range("G22").Value
     
    Range("Q23").Value = Application.Sum(Range("K25:K97"))
    Range("Q24").Value = Application.Sum(Range("Q23").Value * (Range("G6").Value))
    Range("Q25").Value = Application.Sum(Range("Q23").Value - (Range("Q24").Value))
    Range("Q28").Value = Application.Sum(Range("K17").Value * (Range("N28").Value)) + Application.Sum(Range("L17").Value * (Range("P28").Value))
    Range("Q29").Value = Application.Sum(Range("K18").Value * (Range("N29").Value)) + Application.Sum(Range("L18").Value * (Range("P29").Value))
    Range("Q30").Value = Application.Sum(Range("K19").Value * (Range("N30").Value)) + Application.Sum(Range("L19").Value * (Range("P30").Value))
    Range("Q32").Value = Application.Sum(Range("Q28:Q30"))
    Range("Q33").Value = Application.Sum(Range("Q32").Value * (Range("G21").Value))
    Range("Q34").Value = Application.Sum(Range("Q32").Value + (Range("Q33").Value))
    Range("Q38").Value = Application.Sum(Range("Q36").Value + (Range("Q34").Value) + (Range("Q25").Value))
     
    'Range("P40").Formula = "=IF(Q38=0,0,IF(Q38<15000,0,IF(Q38>99999.99,G14,IF(OR(Q38=15000,Q38<49999.99),G8,IF(OR(Q38>49999.99,Q38<99999.99),G11,"""")))))"
     
    Range("Q40").Value = Application.Sum(Range("Q38").Value * (Range("P40").Value))
    Range("Q42").Value = Application.Sum(Range("Q38").Value - (Range("Q40").Value))
    Range("Q44").Value = Application.Sum(Range("Q42").Value * (Range("G22").Value))
    Range("Q46").Value = Application.Sum(Range("Q42").Value + (Range("Q44").Value))
    End Sub
    Merci encore pour votre aide

    OUPS! je n'avais pas vu la dernière réponse, toutes mes excuses

  4. #4
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Le code proposé par MolikDLuffy fonctionne très bien, merci beaucoup à tous les deux.

  5. #5
    Membre expérimenté
    Avatar de MolikDLuffy
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2017
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 158
    Billets dans le blog
    1
    Par défaut
    RENE14 : Le code proposé par MolikDLuffy fonctionne très bien, merci beaucoup à tous les deux.
    C'est parfait

    N'oubliez pas cliquer sur "résoudre"

  6. #6
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Juste une dernière question, est-ce qu'il est possible de simplifier toute ma procédure ?
    Merci par avance

  7. #7
    Membre expérimenté
    Avatar de MolikDLuffy
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2017
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 158
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par RENE14 Voir le message
    Juste une dernière question, est-ce qu'il est possible de simplifier toute ma procédure ?
    Merci par avance
    Je suis désolé RENE mais il y a trop de cellule... Il me faudrait le fichier ou des imprimes écrans pour mieux comprendre...

    Pour ma part, j'opte pour le fichier :p

  8. #8
    Membre expérimenté
    Avatar de MolikDLuffy
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2017
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 158
    Billets dans le blog
    1
    Par défaut
    Bonjour René,

    Dans un premier temps, vous n'avez pas besoin de mettre des OU dans votre formule conditionnelle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(Q5=0;0;SI(Q5<15000;0;SI(Q5<50000;G8;SI(Q5<100000;G11;G14;""))))
    Je vais maintenant voir au niveau du VBA

    A suivre

  9. #9
    Membre expérimenté
    Avatar de MolikDLuffy
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2017
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 158
    Billets dans le blog
    1
    Par défaut
    Voilà la formule VBA ci-dessous et l'exemple Excel ci-joint

    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
    Sub conditionnel()
    If Range("Q5") = 0 Then
    Range("C5") = 0
    Else
    If Range("Q5") < 15000 Then
    Range("C5") = 0
    Else
    If Range("Q5") < 50000 Then
    Range("C5") = Range("G8")
    Else
    If Range("Q5") < 100000 Then
    Range("C5") = Range("G11")
    Else
    Range("C5") = Range("G14")
    End If
    End If
    End If
    End If
     
    End Sub
    Juste une Question, je suppose que vous avez plusieurs lignes qui doivent avoir la même formule. Pourriez-vous joindre le fichier afin que je puisse faire un meilleur code car si c'est le cas, nous devons utiliser des boucles.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [XL-2010] Calcul avec vba excel
    Par jean1vba2013 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/04/2013, 14h48
  2. envoi mail outlook avec vba excel
    Par momolamoto dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/09/2010, 10h45
  3. [XL-2003] Formule de calcul avec VBA Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/06/2009, 13h23
  4. lien internet avec VBA EXCEL
    Par casefayere dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/07/2007, 10h40
  5. Images avec VBA Excel
    Par dorschner dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/09/2006, 23h28

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