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 :

Evaluation de la fonction match


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Juillet 2018
    Messages : 2
    Par défaut Evaluation de la fonction match
    Bonjour à tous,
    Dans le bout de code suivant j'utilise la fonction match pour trouver une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.FormulaArray = "=MATCH(1,(C[3]=""" & der2 & """)*(C[" & aholou - 1 & "]=" & Top & "),0)"
    ça marche parfaitement mais je souhaiterais utiliser la fonction evaluate (ou toute autre fonction) pour ne pas avoir à écrire de formule sur ma feuille de calcul. Pouvez m'aider ?

    merci d'avance.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Solution simple : Mettre ces deux lignes juste après le code ci-dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Selection.Copy
    Selection.PasteSpecial(xlPasteValues)

  3. #3
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonsoir,

    Il me semble que Evaluate ne marche pas directement avec R1C1 (Vaut mieux utiliser la formule en Anglais qd cela est possible - Il me semble que R1C1 à ces avantages aussi mais je n'ai pas eu à le faire jusqu'à présent).
    je vais répondre par un exemple :

    A B
    1 2 5
    2
    3 =A1+B1

    La formule en R1C1 donnerai ceci (je fais tout dans la fenêtre d'exécution pour l'exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print Selection.FormulaR1C1 ' Résultat => =R[-2]C[-1]+R[-2]C
    Si on teste Evaluate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print Evaluate("R[-2]C[-1]+R[-2]C") ' Résultat => Erreur 2015
    Alors que une bonne partie d'entre nous savent que cela marche avec la formule anglaise (l'avantage ca marche à l'international et compréhensible par tout le monde) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Debug.Print Evaluate("A1+B1")
      ' Résultat => 7
    Ce que l'on peut faire alors c'est convertir la formule R1C1 en formule XL tel qu'on a l'habitude de voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Debug.Print Application.ConvertFormula("R[-2]C[-1]+R[-2]C", xlR1C1, xlA1)
      ' Résultat => A1+B1
    on a plus qu'à appliquer Evaluate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Debug.Print Evaluate(Application.ConvertFormula("R[-2]C[-1]+R[-2]C", xlR1C1, xlA1))
      ' Résultat =>7
    Edit : j'ai validé par mégarde avant de finaliser le post je le re-édit
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    re,

    donc (voir mon post ci-dessus) si la formule est bien écrite avec les variables, cela devrait s'écrire comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.Value = Evaluate(Application.ConvertFormula("MATCH(1,(C[3]=""" & der2 & """)*(C[" & aholou - 1 & "]=" & Top & "),0)", xlR1C1, xlA1))

    Edit : Maintenant si c'est pour mettre la formule dans une plage on peut faire par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       Range("B3:B10").FormulaArray = "=Mettre_la_Formule_Correspondante"
       Range("B3:B10").Value = Range("B3:B10").Value
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    @ Nagel Tha

    Ryu dans la dernière ligne de ton second code, tu affectes la valeur du champ de la plage à elle-même. …
    Cela permet de garder que les valeurs des résultats données par les formules se trouvant dans les cellules et donc par conséquent
    de se débarrasser des formules dont on a plus besoin (qd le cas où la volonté de procéder ainsi est adéquate et s'y prête - la feuille excel du coup fait moins de calcul, c'est pratique quand tu as des données conséquentes …
    où que les calculs ne sont pas amenés à être modifié à tout bout de de champ par exemple , …)
    Exemple simple en test à faire :

    1 2 =A1+B1
    2 3 =A2+B2
    3 4 =A3+B3
    4 5 =A4+B4
    5 6 =A5+B5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("C1:C5").Value = Range("C1:C5").Value
      ' copie les valeurs de C1 à C5 par les valeurs (données par les formules) qui sont de C1 à C5
    Regarde avant tu as toutes les formules - puis après tu n'as gardé que les valeurs des formules
    De cette façon on passe en direct et on évite tout ce qui est Select, Selection



    PS : en effet tu as raison c'est une formule Matricielle FormulaArray
    je vais revoir cela tranquillement car je l'ai traité en R1C1. (par contre le R1C1 permet de faire des formules matricielles il me semble ainsi que Evaluate)
    Quoi qu'il en soit pour qu'une formule R1C1 soit pris en compte par Evaluate (A moins qu'il existe une façon d'écrire que je connais pas encore) il faut que la formule R1C1 soit convertit.

    Je re plus tard (peut être pas ce soir) afin de revoir la copie



    Edit : Modif

    En fait Evaluate interprète les expressions dont les formules Matricielles

    Si on reprend l'exemple ci-dessus des différentes sommes avec Ax + Bx et que l'on veut faire une formule matricielle du total que l'on met en E2 par exemple :
    on obtiendra 35

    Il en est de même avec l'utilisation d'Evaluate en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Debug.Print Evaluate("SUM(A1:A5+B1:B5)")
      ' Résultat => 35
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Juillet 2018
    Messages : 2
    Par défaut reponse
    merci à tous pour vos interventions.
    RyuAutodidacte la solution que tu m'as proposée marche parfaitement.Merci

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

Discussions similaires

  1. Faire la recherche d'un élement dans une colonne avec la fonction match
    Par ckrikri dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/11/2008, 11h54
  2. [XSLT] probleme avec la fonction matches()
    Par IndyGroumpf dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 14/10/2007, 19h13
  3. Evaluation de la fonction quote
    Par Toitoine dans le forum Lisp
    Réponses: 2
    Dernier message: 05/05/2007, 19h13
  4. [PB 9] Fonction Match
    Par sbouvetJD dans le forum Powerbuilder
    Réponses: 1
    Dernier message: 29/03/2007, 15h59
  5. [VBA-E] Recherche de valeur fonction Match
    Par Dextro dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/02/2007, 19h09

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