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 :

(E-03)Evaluate:Récupérer resultat d'une formule excel sans passer par une cellule.


Sujet :

Macros et VBA Excel

  1. #1
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut (E-03)Evaluate:Récupérer resultat d'une formule excel sans passer par une cellule.
    Bonsoir à tous,

    est-il possible d'interpréter une formule excel générée par VBA et de récuprer son contenu sans passer par une cellule (histoire d'accéler le code)

    Exemple en passant par une cellule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
               'Arg SUMIF Konten-Month : ex : 6290920-11
               Qry_arg = Trim(Sheet_id) + "-" + Month_id
               Cell_ref = "=SUMIF([KSTXXX.xls]Pivot_Month!$H$5:$H$1851;" & Qry_arg & ";[KSTXXX.xls]Pivot_Month!$D$5:$D$1851)"
               Cells(Range(Range_id).Row, 16 + I).Formula = Cell_ref
               'Summarize
               Facts(Month_id) = Facts(Month_id) + Cells(Range(Range_id).Row, 16 + I)
    J'ai essayé avec Application.Evaluate, mais cela ne fonctionne pas.

    D'avance merci.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonsoir,

    J'ai essayé avec Application.Evaluate, mais cela ne fonctionne pas.
    C'est pourtant prévu pour: en A1:A6 des lettres, en B1:B6 des nombres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Evaluate("SUMIF(Feuil1!A1:B6,""a"",Feuil1!B1:B6)")
    Renvoie la somme des nombres associés à la lettre 'a'.

    En précisant le nom du fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Evaluate("SUMIF([NomFichier.xls]Feuil1!A1:B6,""a"",[NomFichier.xls]Feuil1!B1:B6)")
    Et si le nom du fichier comprend des espaces:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Evaluate("SUMIF('[Nom Fichier.xls]Feuil1'!A1:B6,""a"",'[Nom Fichier.xls]Feuil1'!B1:B6)")
    Bonne chance,

    Tirex28/

  3. #3
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Merci Tirex,
    j'ai détecté comme toi que le problème vient des doubles paires de quotes autour de l'argument qui me manquent a, mais je ne parviens pas à les injecter par le code autour de ma variable a.

    Tu n'as pas un exemple ?

    merci.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Re,

    En reprenant la même plage exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim variable As String
    variable = "a"
     
    MsgBox Application.Evaluate("SUMIF(Feuil1!A1:B6,""" & variable & """,Feuil1!B1:B6)")
    [EDIT] Reflexion faite, l'emploi d'Evaluate n'est pas impératif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim variable As String
    variable = "a"
    MsgBox Application.SumIf(Range("A1:B6"), variable, Range("B1:B6"))
    Cordialement,

    Tirex28/

  5. #5
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut Ok pour cela. Etape suivante : récupérer si erreur dans evaluate
    Encore merci.

    cela marche comme je le souhaite.

    Maintenant je souhaite tester si Evaluate ramène une erreur, si possible sans gestion d'erreur ( ucfoutu) car soit je prends le résultat de l'evaluate, soit je prends 0 si erreur.
    (pour la petite Histoire le SUMIF de ma demande initiale consomme beaucoup de ressources et je pense qu'avec VLOOKUP je vais gagner en performances vu que je ne doit récupérer que 1 valeur (ou rien) sur un tableau trié)

    Voici un exemple de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Dim resu As Variant
        resu = Evaluate("VLOOKUP(""6290920-0"",[KSTXXX.xls]Pivot_Month!$H$5:$I$1851,2,FALSE)")
        MsgBox resu
    Je n'arrive pas à tester si Resu est une erreur. Ce code plante sur le MSGBOX si l'evaluate de la fonction VLOOKUP est #N/A.

    Par debug, resu vaut Error 2042.
    Si le VLookup fonctionne, pas de problème.

    Merci d'avance à tous.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim resu As Variant
    resu = Evaluate("VLOOKUP(""6290920-0"",[KSTXXX.xls]Pivot_Month!$H$5:$I$1851,2,FALSE)")
    If IsError(resu) Then
        'Code
    Else
        MsgBox resu
    End If
    Cordialement,

    Tirex28/

  7. #7
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bien sûr.

    Suis-bête d'être passé à côté comme cela.
    J'ai essaye ISERR, ISNA....

    Super merci beaucoup.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

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

Discussions similaires

  1. [XL-2007] Récupérer l'adresse d'une cellule sans passer par une macro
    Par Runsh63 dans le forum Excel
    Réponses: 4
    Dernier message: 28/04/2014, 15h09
  2. Sélectionner une plage puis la mettre dans une formule excel
    Par hkp314 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/09/2013, 11h19
  3. [XL-2007] Envoyer un tableau a unidimensinel vers Excel sans passer par une boucle
    Par Bonero dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 06/09/2013, 17h03
  4. Supprimer les espaces sans passer par une formule
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/06/2011, 14h25
  5. Background degradé sans passer par une image?
    Par j14z dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 28/03/2008, 15h02

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