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 :

Problème traduction formule excel en VBA [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Points : 19
    Points
    19
    Par défaut Problème traduction formule excel en VBA
    Bonjour,

    J'ai absolument besoin de traduire en VBA une formule excel, cependant je ne sais pas faire cela..

    Je vous explique pourquoi j'ai besoin de cette traduction :

    J'ai une macro (comme vous pourrez le voir dans mon code) qui lance un inputbox, l'utilisateur choisit une valeur comprise entre 1 et 20, puis un 2ème inputbox lui demande de renseigner une date.
    Selon la valeur du 1er inputbox, la date se stock à un endroit différent.

    Ce que je cherche à faire, c'est, en plus de cela, que par rapport à l'endroit où va se renseigner la date, la cellule qui se trouve 2 colonnes plus loin (sur la même ligne) soit remplacée par la formule suivante (celle que je veux tradurie en VBA):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(IV5="";"";SI(C5<>"Aerostructure Service";"";SI(OU(ET(G5="Flex";KK5<=MOIS.DECALER(IV5;'parameters'!$B$2));ET(G5="OSW-Capacity";KK5<=MOIS.DECALER(IV5;parameters'!$B$3)));"";SI(G5="Flex";MOIS.DECALER(IV5;parameters'!$B$2);SI(G5="OSW-Capacity";MOIS.DECALER(IV5;'parameters'!$B$3))))))
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Option Base 1
    Option Explicit
    Private Sub Bouton4_Clic()
    Dim liste(), DerLig As Long, l As Long, rev As Variant, mdir As Variant
    With Worksheets("Workpackages Database & PP")
        DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
        liste = .Range("A2:A200" & DerLig).Value
    End With
    rev = InputBox("Enter 1 for REV1, 2 for REV2, etc.", "REV Date Modification")
    If rev = "" Or Not IsNumeric(rev) Then
        MsgBox "Canceled, Please Enter a number"
        Exit Sub
    End If
    If rev < 1 Or rev > 20 Then
        MsgBox "wrong rev number"
        Exit Sub
    End If
    rev = CInt(rev)
    mdir = InputBox("SELECT THE DATE: (dd/mm/yy)", "REV x")
    If Not IsDate(mdir) Then
        MsgBox "Canceled"
        Exit Sub
    End If
    For l = LBound(liste) To UBound(liste)
        Select Case rev
        Case 1
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("IV" & l + 1).Value = CDate(mdir)
        Case 2
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("IX" & l + 1).Value = CDate(mdir)
        Case 3
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("IZ" & l + 1).Value = CDate(mdir)
        Case 4
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("JB" & l + 1).Value = CDate(mdir)
        Case 5
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("JD" & l + 1).Value = CDate(mdir)
        Case 6
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("JF" & l + 1).Value = CDate(mdir)
        Case 7
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("JH" & l + 1).Value = CDate(mdir)
        Case 8
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("JJ" & l + 1).Value = CDate(mdir)
        Case 9
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("JL" & l + 1).Value = CDate(mdir)
        Case 10
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("JN" & l + 1).Value = CDate(mdir)
        Case 11
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("JP" & l + 1).Value = CDate(mdir)
        Case 12
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("JR" & l + 1).Value = CDate(mdir)
        Case 13
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("JT" & l + 1).Value = CDate(mdir)
        Case 14
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("JV" & l + 1).Value = CDate(mdir)
        Case 15
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("JX" & l + 1).Value = CDate(mdir)
        Case 16
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("JZ" & l + 1).Value = CDate(mdir)
        Case 17
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("KB" & l + 1).Value = CDate(mdir)
        Case 18
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("KD" & l + 1).Value = CDate(mdir)
        Case 19
            If Range("A2") = liste(l, 1) Then Sheets("Workpackages Database & PP").Range("KH" & l + 1).Value = CDate(mdir)
    End Select
    Next
     
    End Sub
    Merci!

    Cordialement,

    Adrien

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Essai déjà une simplification de ton code

    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
    Private Sub Bouton4_Clic()
    Dim liste(), DerLig As Long, l As Long, rev As Variant, mdir As Variant
     
    With Worksheets("Workpackages Database & PP")
        DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
        'Attention la ligne suivnate est faausse je pense
        'liste = .Range("A2:A200" & DerLig).Value
        liste = .Range("A2:A" & DerLig).Value
    End With
     
    rev = InputBox("Enter 1 for REV1, 2 for REV2, etc.", "REV Date Modification")
    If rev = "" Or Not IsNumeric(rev) Then
        MsgBox "Canceled, Please Enter a number"
        Exit Sub
    End If
     
    If rev < 1 Or rev > 20 Then
        MsgBox "wrong rev number"
        Exit Sub
    End If
     
    rev = CInt(rev)
     
    mdir = InputBox("SELECT THE DATE: (dd/mm/yy)", "REV x")
     
    If Not IsDate(mdir) Then
        MsgBox "Canceled"
        Exit Sub
    End If
     
     
    For l = LBound(liste) To UBound(liste)
        If Range("A2") = liste(l, 1) Then
            With Sheets("Workpackages Database & PP").Cells(l + 1, "IT").Offset(0, 2 * rev)
                'On pointe la colonne IT et on se décale en fonction de la valeur de rev
                .Value = CDate(mdir)
                'On place la formule 2 colonne plus loin
                '.offset(0,2).formula =
            End With
        End If
    Next
     
    End Sub
    Pour ta formule essai déjà en utilisant l'enregistreur de macro, il te donnera la formule comme elle doit être utilisé, ensuite il faudra nous dire au cas ou tu n'arriverais pas à la modifier toi même, quelles parties doivent être variable en fonction de la ligne ou la formule est inscrite.

    ++
    Qwaz

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Bonjour!

    MErci pour la simplification de code c'est en effet beaucoup plus pratique

    En ce qui concerne l'enregistreur de macro, oui je vais essayer ça et je reviendrais vers vous!

    Merci!

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Bonjour!

    Le hic est que la fonction MOIS.DECALER est une fonction de l'utilitaire d'analyse, VBA ne la reconnaît pas et renvoie une erreur... Voici la formule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF(RC[-2]="""","""",IF(OR(AND(RC7=""Flex"",RC[39]<=MOIS.DECALER(RC[-2],parameters!R2C2)),AND(RC7=""OSW-Capacity"",RC[39]<=MOIS.DECALER(RC[-2],parameters!R3C2))),"""",SI(RC7=""Flex"",MOIS.DECALER(RC[-2],parameters!R2C2),SI(RC7=""OSW-Capacity"",MOIS.DECALER(RC[-2],parameters!R3C2)))))
    Comment faire pour utiliser une autre fonction qui fasse la même chose ou..?

    Merci !

    Adrien

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Bonjour!

    La solution a été trouvé, voici le code qui résoud mon problème, pour aider d'autres personnes qui rencontreraient le même problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    With Intersect(filtre, zone.Areas(i))
      .FormulaR1C1 = F
      .Replace "MOIS.DECALER", "µµ", LookAt:=xlPart 'pour revalider les cellules
      .Replace "µµ", "MOIS.DECALER"
    End With
    Merci pour votre aide et à bientôt

    Adrien

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

Discussions similaires

  1. Problème de formule excel dans vba
    Par Oreo_ dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/02/2013, 16h49
  2. [XL-2003] Problème de conversion formule excel -> Macro VBA
    Par bedrohung dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/04/2010, 18h53
  3. Problème de modification de formules Excel avec VBA.
    Par jayjay78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/03/2010, 18h09
  4. Correspondance formules excel et VBA
    Par abu143 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/10/2006, 17h54
  5. [EXCEL][VBA] Utilisation des formules Excel en VBA
    Par Amanck dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/12/2005, 15h08

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