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 :

formule en code vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut formule en code vba
    bonjour,
    Pour mon boulot, je dois transformer une formule en ligne de code vba
    Pouvez vous m'aider?

    voici la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(Janvier!F15<>"";(INDEX(Divers!$A$3:$C$23;EQUIV(Janvier!$F15;Divers!$B$3:$B$23;0);3))+(SI(Janvier!$E15<>"";SI(Janvier!$E15<=Divers!$B$28;Divers!$B$31;)));)
    Merci

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    démarre ton enregistreur automatique , mettre le curseur ou se trouve la formule, clic sur entrée et tu aura ton code

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour rosemma,

    2 solutions
    1 - L'enregistreur de macro, et tu obtiendras sans doute une formule de type R1C1
    2 - Utiliser la formule dans ton langage utilisateur par la propriété FormulaLocal

    Pour être complet, tu peux consulter le tutoriel de l'ami Philippe à ce sujet

  4. #4
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    merci
    mais je voudrais pouvoir intégrer ma boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim i As Integer
     
    For i = 6 To 37
        Range("a" & i) = Feuil2.Range("D" & i + 9) - Feuil2.Range("c" & i + 9)
        If Range("a" & i) <= Feuil14.Range("B32") Then
            Range("b" & i).Value = Feuil14.Range("B31")
            Else: Range("b" & i).Value = Range("a" & i) - Feuil14.Range("B31")
        End If
        ActiveCell.FormulaR1C1 = _
            "=IF(Janvier!R[9]C[3]<>"""",(INDEX(Divers!R3C1:R23C3,MATCH(Janvier!R[9]C6,Divers!R3C2:R23C2,0),3))+(IF(Janvier!R[9]C5<>"""",IF(Janvier!R[9]C5<=Divers!R28C2,Divers!R31C2,))),)"
     
    Next i

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Si je comprends bien la demande mais pour moi je fais de la façon suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Range("D3").Select
        ActiveCell.FormulaR1C1 = "=IF(COUNTIF(R3C3:RC3,RC[-1])>COUNTIF(R3C12:R" & DL & "C12,RC[-1]),RC[-1],"""")"
     
        Range("D3").Select
        Selection.AutoFill Destination:=Range("D3:D" & DL), Type:=xlFillDefault

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    mais je voudrais pouvoir intégrer ma boucle
    Pourquoi ?
    Il te suffit d'affecter la formule, en une fois, à toutes les cellules. Non?

  7. #7
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Comme cela
    Personnellement, je préfère, depuis peu il est vrai, travailler avec FormulalLocal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Public Sub formulation()
     
    Const laformule As String = "=B3*3"
     
    With Worksheets(1).Range("A3:A58")
            .FormulaLocal = laformule
            'Si lon souhaite une copie de valeurs afin de ne pas conserver la formulation
            .Value = .Value
    End With
     
    End Sub

  8. #8
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    je cale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim i As Integer
     
    For i = 6 To 37
        Range("a" & i) = Feuil2.Range("D" & i + 9) - Feuil2.Range("c" & i + 9)
        If Range("a" & i) <= Feuil14.Range("B32") Then
            Range("b" & i).Value = Feuil14.Range("B31")
            Else: Range("b" & i).Value = Range("a" & i) - Feuil14.Range("B31")
        End If
        If Feuil2.Range("f" & i + 9) <> "" Then
     
        (INDEX(Divers!R3C1:R23C3,MATCH(Janvier!R[9]C6,Divers!R3C2:R23C2,0),3))+(IF(Janvier!R[9]C5<>"""",IF(Janvier!R[9]C5<=Divers!R28C2,Divers!R31C2,))),)
     
    Next i
    End Sub

  9. #9
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Tu cales en quoi?

    Les 2 dernières lignes avant boucle ne signifient rien.

    As-tu essayé d'adapter le code que je t'ai proposé?
    Voilà comment:
    - Il te suffit d'affecter la formulation à une cellule (exemple A8)
    - Dans la fenêtre Exécution de l'éditeur VBE (CTRL + G), tu codes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ?Activesheet.Range("A8").Formulalocal
    - Ensuite, il ne te reste plus qu'à adapter mon code (adresse de cellules et formule).

    Reviens ensuite.

  10. #10
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    If Feuil2.Range("f" & i + 9) <> "" Then



    la première ligne concerne une nouvelle condition et si c'est vrai
    alors le résultat de la formule (INDEX(Divers!R3C1:R23C3,MATCH(Janvier!R[9]C6,Divers!R3C2:R23C2,0),3))+(IF(Janvier!R[9]C5<>"""",IF(Janvier!R[9]C5<=Divers!R28C2,Divers!R31C2,))),)

    doit être mis en Range("c" & i).Value

    ce qui est en gras, c'est ce que je veux mettre dans ma boucle du genre ""xxxxx" & i"

  11. #11
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    doit être mis en Range("c" & i).Value
    Même si l'on en perçoit le sens, cette locution ne veut absolument rien dire.
    Pourquoi mettre cette condition dans le code?
    Tu peux l'intégrer dans la formule.
    Exemple en C2
    =Si(F11 = "";""; index....)
    Ecris cette formule complète à la 1ère cellule (sauf erreur C6)
    Ensuite, tu peux
    - soit revenir en reportant l'objet de ma demande formulée dans mon dernier post
    - soit adapter mon code avec Range("C6:C37") et la formule, hors boucle

Discussions similaires

  1. [XL-2010] Transformation formule en code vba
    Par r.morel dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 04/09/2014, 17h06
  2. [XL-2010] formule vers code vba
    Par grisan29 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/12/2013, 21h13
  3. [XL-2010] Traduire une formule en code VBA
    Par thomasdu40 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/07/2012, 09h39
  4. Ajout d'une formule par code vba
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/05/2011, 09h50
  5. Parseur formule Excel <-> Code VBA
    Par gretch dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/08/2007, 18h08

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