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 :

traduction formule excel sous vba (office64) [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 15
    Par défaut traduction formule excel sous vba (office64)
    Bonjour,
    j'ai adapté une formule de recherche sous excel (source: Jacques Boisgontier, Merci !) qui fonctionne bien dans ma feuille excel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =INDEX(Tarifs_et_CO2!D1:D9;EQUIV(1;(Tarifs_et_CO2!A1:A9=Tarifs_et_CO2!A13)*(Tarifs_et_CO2!B1:B9=Tarifs_et_CO2!B13)*(Tarifs_et_CO2!C1:C9=Tarifs_et_CO2!C13);0))
    maintenant je cherche à la faire fonctionner sous vba

    je l'ai donc traduite par (j'ai changé le equiv en match et changé les ; en , )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("Tarifs_et_CO2!G18").FormulaArray = "=INDEX(Tarifs_et_CO2!D1:D9,MATCH(1,(Tarifs_et_CO2!A1:A9=Tarifs_et_CO2!A13)*(Tarifs_et_CO2!B1:B9=Tarifs_et_CO2!B13)*(Tarifs_et_CO2!C1:C9=Tarifs_et_CO2!C13),0))"
    mais j'obtiens un message d'erreur d'exécution 1004 : impossible de définir la propriété formulaarray de la classe range...
    hum là je bloque un peu...
    Fichiers attachés Fichiers attachés

  2. #2
    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
    Bonsoir,

    Attention, votre formule d'origine est en G16, et là vous la voulez en G18, il faut donc penser à figer les cellules avec les $( utilisation de F4)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Tarifs_et_CO2!G18").FormulaArray = "=INDEX(Tarifs_et_CO2!R1C4:R9C4,MATCH(1,(Tarifs_et_CO2!R1C1:R9C1=Tarifs_et_CO2!R13C1)*(Tarifs_et_CO2!R1C2:R9C2=Tarifs_et_CO2!R13C2)*(Tarifs_et_CO2!R1C3:R9C3=Tarifs_et_CO2!R13C3),0))"
    Cdlt

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 15
    Par défaut
    Bonsoir ARTURO83,

    Merci pour ta remarque qui m'a permis d'avancer.
    En fait j'avais dans un premier temps mis en place la formule en G15 dans ma feuille Excel.
    je l'avais complété en G16 en y ajoutant le nom des feuilles en prévision de la traduction pour le vba.
    par contre je voulais que mon code fasse bien apparaitre en G18 toujours la même formule mais en utilisant le vba.
    donc je ne pense pas qu'il y ait eu de glissement de cellules empêchant la formule de fonctionner...
    Cependant j'ai ajouté des $ sur les références de toutes mes cases (comme tu me le suggères) et ça marche !!
    mais je comprends pas pourquoi car dans mon code Vba toutes les cases sont bonnes (elles sont identiques à celles indiquées des cases G15 et G16), pourquoi y a t il besoin de les "bloquer" avec le $?

    j'ai donc pu sur mon fichier d'origine (non allégé comme le fichier traduction vba.xlsm) obtenir la formule qui fonctionne avec Vba.
    le code qui fonctionne est donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Base_de_données!BS" & L).FormulaArray = "=INDEX(Tarifs_et_CO2!$D$2:$D$40,match(1,(Tarifs_et_CO2!$A$2:$A$40=Tarifs_et_CO2!$A45)*(Tarifs_et_CO2!$C$2:$C$40=Tarifs_et_CO2!$C$45)*(Tarifs_et_CO2!$E$2:$E$40=Tarifs_et_CO2!$D$45),0))"

    maintenant je souhaiterai utiliser une case variable pour déterminer l'année de la recherche: auparavant il s'agissait de la case fixe: Tarifs_et_CO2!$A45
    la case variable (le L correspond à la première ligne non remplie de la case de données) : "Base_de_données!F" & L
    or je ne sais pas trop comment l'écrire:
    j'ai essayé (sans succès):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Base_de_données!BS" & L).FormulaArray = "=INDEX(Tarifs_et_CO2!$D$2:$D$40,match(1,(Tarifs_et_CO2!$A$2:$A$40="Base_de_données!F" & L)*(Tarifs_et_CO2!$C$2:$C$40=Tarifs_et_CO2!$C$45)*(Tarifs_et_CO2!$E$2:$E$40=Tarifs_et_CO2!$D$45),0))"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Base_de_données!BS" & L).FormulaArray = "=INDEX(Tarifs_et_CO2!$D$2:$D$40,match(1,(Tarifs_et_CO2!$A$2:$A$40='Base_de_données!F' & L)*(Tarifs_et_CO2!$C$2:$C$40=Tarifs_et_CO2!$C$45)*(Tarifs_et_CO2!$E$2:$E$40=Tarifs_et_CO2!$D$45),0))"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Base_de_données!BS" & L).FormulaArray = "=INDEX(Tarifs_et_CO2!$D$2:$D$40,match(1,(Tarifs_et_CO2!$A$2:$A$40=Base_de_données!F&L)*(Tarifs_et_CO2!$C$2:$C$40=Tarifs_et_CO2!$C$45)*(Tarifs_et_CO2!$E$2:$E$40=Tarifs_et_CO2!$D$45),0))"

    il doit s'agir d'un problème de syntaxe mais je trouve pas...

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonsoir,

    2 solutions:

    annee =Tarifs_et_CO2!$A$2:$A$9
    modele =Tarifs_et_CO2!$C$2:$C$9
    prix =Tarifs_et_CO2!$D$2:$D$9
    taille =Tarifs_et_CO2!$B$2:$B$9


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Macro1()
       Range("G18").FormulaArray = "=INDEX(prix,MATCH(1,(annee=A13)*(taille=B13)*(modele=C13),0))"
    End Sub
     
    Sub Macro2()
       Range("G18") = Evaluate("INDEX(prix,MATCH(1,(annee=A13)*(taille=B13)*(modele=C13),0))")
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 15
    Par défaut
    Bonsoir Jacques,
    Merci pour ton aide (j'utilise régulièrement ton site web, que j'ai même en favori...) qui m'a permis d'utiliser l'imbrication des fonctions index et equiv pour ma recherche multicritère
    En adoptant la première des deux solutions que tu indiques, j'ai réussi à faire fonctionner la recherche et à le "traduire" en vba
    cependant ce qui me bloque maintenant, c'est de pouvoir utiliser des cellules variables pour obtenir les cibles de la recherche.

    en effet auparavant j'utilisais la cellule fixe Tarifs_et_CO2!$A45 que je remplissais à la mais pour tester et valider la formule
    maintenant qu'elle fonctionne bien, je souhaiterai utiliser des cellules variables "Base_de_données!F" & L , où L correspond à la première ligne disponible dans le fichier de base de donnée (et F la colonne où est indiqué l'année de la voiture), ainsi en utilisant la recherche, je pourrais obtenir le prix du véhicule (correspondant à l'année saisie et stockée en F & L)
    or je n'arrive pas à trouver la bonne syntaxe: j'ai essayé trois syntaxes différentes indiquées dans le post #3 mais sans trouver la bonne

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

Discussions similaires

  1. Traduction formule Excel en VBA
    Par Mandragore99 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/06/2018, 12h02
  2. Traduction Formule Excel R1C1 --> $R1$C1 en VBA
    Par rampage92 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2016, 20h57
  3. [XL-2007] Problème traduction formule excel en VBA
    Par laduche31 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/12/2011, 10h16
  4. [E-02] formules excel sous vba
    Par ladygtk dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/02/2009, 13h19
  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