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 :

traduire une formule en vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut traduire une formule en vba
    bonjour a tous

    tout d'abords je sais tres bien que l'on trouve ici et la des codes donnant la date de paques

    mais je voudrais convertir en vba une formule qui fonctionne tres bien et je n'y arrive pas

    la formule
    = ARRONDI(DATE(B1;4;MOD(234-11*MOD(B1;19);30))/7;0)*7-6
    un essai sans succes j'ai 5 ou 4 jours de trop a chaque fois selon les années
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub testy()
    Dim x
    x = 234 - (11 * (2018 Mod 19))
    x = (x Mod 30) / 7
    x = Round((x * 7) - 6)
    x = Round(CLng(CDate(Round(x) & "/4/2018")))
    MsgBox CDate(DateSerial(1900, 1, 1)) + x
    End Sub
    si quelqu'un sait faire je prends
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Membre confirmé Avatar de Rémy.A
    Homme Profil pro
    Expert SEE ELECTRICAL EXPERT
    Inscrit en
    Juin 2017
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert SEE ELECTRICAL EXPERT
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 118
    Par défaut traduire une formule en vba
    Bonjour,

    Je te propose d'aller sur la cellule où il y a ta formule, de lancer l’enregistreur de macros, d'aller sur la cellule, modifier ta formule en ajoutant et supprimant une parenthèses à la fin et de faire entrée.

    L'enregistreur te donneras la formule en VBA

    Voici la formule que je trouve en VBA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = "= ROUND(DATE(R[-2]C[1],4,MOD(234-11*MOD(R[-2]C[1],19),30))/7,0)*7-6"

  3. #3
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    A tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub testy()
        Dim x
        x = (234 - 11 * ([B1] Mod 19)) Mod 30
        d = DateSerial([B1], 4, x) / 7
        d = ((Round(d, 0) * 7) - 6)
        MsgBox CDate(d)
    End Sub
    Cdlt

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    bonjour Remy.A
    merci pour le retour mais tu a mal compris ma question
    je ne veux pas le formula en vba , je veux le calcul en pur vba comme j'ai tenté de la faire dans la demo

    des idées??? de ce qui ne va pas dans mon code

    bonjour ARTURO83
    non ca ne vas pas pour 2019 ,2020 etc.....
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    autant pour moi ARTURO83 ca match
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    RE
    je reproduit donc la formule en dur vba et j'en fait une petite fonction toute simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    MsgBox paques(2033)
    End Sub
    '
    Public Function paques(Y)
    paques= CDate(((Round(DateSerial(Y, 4, (234 - 11 * (Y Mod 19)) Mod 30) / 7, 0) * 7) - 6))
    End Function
    testé jusqu en 2033

    a noter que l'on peut l'utiliser en formule
    =paques(B1)
    si ca peut servir

    merci ARTURO

    edit:
    formater la cellule en format de date !!!! (merci pierre pour le retour ) sinon on a le numero de serie de la date
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut Patrick,

    Si la cellule n'est pas en format date, ça renvoie la valeur numérique. La ligne avec DateSerial est inutile, car ça n'a pas de sens de recomposer une date à partir d'une date. Dès lors, tu peux raccourcir avec le code suivant, mais l'affichage dans la cellule dépend bien du format de la cellule, et si tu es en standard, la fonction ne convertit pas le format en format date, même en typant la fonction ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function paques(Y) As Date
    paques = CDate(((Round(DateSerial(Y, 4, (234 - 11 * (Y Mod 19)) Mod 30) / 7, 0) * 7) - 6))
    End Function

    Tu constateras au passage que l'on n'est vraiment pas loin de la solution proposée par Rémy , et du coup, je m'interroge sur le réel intérêt de la chose, qui oblige à convertir en xlsm un fichier uniquement pour calculer une date que l'on peut calculer facilement par formule (mais bon, si le but est de s'amuser ^^)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour pierre
    oui je m'en suit rendu compte je sais
    mince,mince et remince

    c'est quand meme penible cette histoire
    quand les cellules sont en format standard et que j'injecte dateserial le resultat visuel est une date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test2()
    [A2] = DateSerial(2018, 4, 1)
    paque = DateSerial(2018, 4, 1)
    [A3] = paque
    End Sub


    le but et surtout d'avoir cette fonction en pur vba pour autre chose qu'une cellule et accessoirement !!! pour une cellule bien que comme tu dis injecter la formule est amplement suffisant
    la fonction de remy ne sert donc que pour les cellules pas VBA ou alors se servir de la cellule comme intermediaire (pas top) c'est ce que j'avais

    le post a été corrigé
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. [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, 10h39
  2. [VBA-E] ecrire une formule en vba
    Par Huubb dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/01/2007, 15h15
  3. Réponses: 1
    Dernier message: 23/08/2006, 22h26
  4. Paramétrer une formule en vba
    Par arnogef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/08/2006, 12h48
  5. Copier une formule avec vba
    Par NAMORJOSE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/05/2006, 01h12

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