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 :

Exécuter un string comme une ligne de code


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 6
    Par défaut Exécuter un string comme une ligne de code
    Bonjour,

    Je cherche à executer une variable de type string ayant comme contenu une fonction.

    Par exemple :

    Dim a As Integer
    Dim code1, code2, code3 As string

    code1 = "for i=1 to 10"
    code2 = "a=a+10"
    code3 = "next i"

    Je cherche ici la fonction ou l'ensemble de fonctions à utiliser afin d’exécuter les 3 variables, dans un premier temps connaitre la fonction permettant d'executer UN string, et dans un deuxième temps le moyen de fusionner les trois variables pour en considérer un bloc de code entier (et l’exécuter...)

    Je vous remercie d'avance!

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    A ma connaissance, la seule façon d'exécuter ce code est de l'incorporer dans une macro via VBA, mais c'est très lourd et cela suppose que tu es autorisé à le faire.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 6
    Par défaut
    merci de votre réponse, je suis administrateur d'un outil et je cherche à justement simplifier le code d'une macro (1500+ lignes) car l’exécution est lente.
    Je pourrais réduire cette macro à une cinquantaine de lignes.

    Mon problème est le suivant : ma macro est une succession de conditions if, au début du code on a seulement if element1 = "..." And element2= "...".
    A la fin du code j'ai plus de 100 conditions!! Je cherche donc à Incrémenter ces conditions car elles s’enchaînent logiquement.
    J'obtiens à la fin : If element1 = "..." And .. >>> element 100= "...", plus de 100 conditions et c'est ça qui ralentis l'execution du code, c'est par ailleurs pas "propre" et il est probable que sur certaines version d'excel le nombre de conditions doit être limité.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Je cherche donc à Incrémenter ces conditions car elles s’enchaînent logiquement
    Est-ce que tu peux donner un exemple ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 6
    Par défaut
    Voici le "début" du 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
     
     If air_prod = "" Then
     
       Else
     
            For i = 1 To UBound(results_air_prod)
     
                If air_flow_min = 0 And air_flow_max = 0 Then
     
                    results(i) = results_air_prod(i)
     
                ElseIf results_air_prod(i) = results(i) Then
     
                    results(i) = results(i)
     
                Else
     
                    results(i) = ""
     
                End If
     
            Next i
     
        End If
    La condition à surveiller ici est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If air_flow_min = 0 And air_flow_max = 0 Then
    Une partie du code plus loin :

    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
     
    If length_max = 0 Then
     
       Else
     
            For i = 1 To UBound(results_length)
     
                If air_flow_min = 0 And air_flow_max = 0 And air_prod = "" And installation = "" And cpr_model = "" And dry_model = "" And tech_lub = "" And supplier = "" And Middle_voltage = 0 And weight_max = 0 And height_max = 0 And width_max = 0 Then
     
                    results(i) = results_length(i)
     
                ElseIf results_length(i) = results(i) Then
     
                    results(i) = results(i)
     
                Else
     
                    results(i) = ""
     
                End If
     
            Next i
     
        End If
    c'est donc cette condition qui évolue (jusqu'à plus de 100 éléments à la fin du code....) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If air_flow_min = 0 And air_flow_max = 0 And air_prod = "" And installation = "" And cpr_model = "" And dry_model = "" And tech_lub = "" And supplier = "" And Middle_voltage = 0 And weight_max = 0 And height_max = 0 And width_max = 0 Then

  6. #6
    Invité
    Invité(e)
    Par défaut
    bonjour,
    test ça, attention c'est du VbScript il y a une legère différence avec VBA!
    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
    Sub test()
    Dim a As Integer
    Dim code As String
    code = "Sub Test()" & vbCrLf
    code = code & "dim a,i" & vbCrLf
    code = code & "for i = 1 to 10" & vbCrLf
    code = code & "a = a + 10" & vbCrLf
    code = code & "next " & vbCrLf
    code = code & "msgbox a" & vbCrLf
    code = code & "End Sub" & vbCrLf
    Set scr = CreateObject("ScriptControl")
    scr.Language = "VbScript"
    scr.AddObject "This", ThisWorkbook, True
    Set m = scr.Modules.Add("Module1")
    m.AddCode code
    m.Run "test"
    Set m= nothing
    Set scr = nothing
    End Sub

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Déjà tu pourrais économiser ces lignes : results(i) = results(i)

    Je ne sais pas à quel style de code tu comptes aboutir mais si c'est toujours avec des lignes à 100 conditions le pb c'est qu'excel les évalue toutes même si la 1ère est fausse (et donc 99 tests pour rien).
    Ca ne va pas arranger ton nombre de lignes mais tu devrais essayer de les prioriser et de mettre en tête (1 ou 2 par ligne) celles qui ont statistiquement le plus de chance d'être fausses pour quitter les tests au plus tôt.
    Si tu en as quelques unes qui ont 1 chance sur 2 d'être fausses ça va te faire un gros gain en tests.
    Et pour les suivantes si tu as des groupes de tests qui sont répétés stocke le résultat et réutilise-le plutôt que de refaire tous les tests.
    Et si c'est possible les groupes de tests les plus utilisés pourraient même être préparés par formule dans une feuille et récupérés en bloc pour leur utilisation. Ca peut faire un bon gain en plus de raccourcir et simplifier le code.

    eric

  8. #8
    Invité
    Invité(e)
    Par défaut
    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
    Sub test()
        If air_prod <> "" Then
            For i = 1 To UBound(results_air_prod)
                If air_flow_min + ir_flow_max = 0 Then Results(i) = results_air_prod(i)
                If results_air_prod(i) <> Results(i) Then Results(i) = ""
            Next i
        End If
        If length_max > 0 Then
            For i = 1 To UBound(results_length)
                If (air_flow_min = 0 + air_flow_max + Middle_voltage + supplier + weight_max + height_max + width_max = 0) _
                And (air_prod & installation & cpr_model & dry_model & tech_lub = "") Then Results(i) = results_length(i)
     
                If results_length(i) <> Results(i) Then Results(i) = ""
            Next i
        End If
    End Sub

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 6
    Par défaut
    Merci pour vos réponses,
    Je ne suis pas l'auteur de ce code, je suis simplement chargé de le simplifier pour rendre l’exécution plus rapide.

    Pour être plus clair ce code à pour but :

    D'effectuer une recherche, je m'explique avec un exemple très simple :

    On a 100 maisons, chaque maison a une couleur associée, une taille, un prix, des volets ou non, un jardin ou non...

    L'utilisateur rentre des critères de recherche (maison rouge, 150m2, < 300.000e, sans volets, avec jardin, par exemple) et le code VBA renvoie les maison qui entrent dans ces critères.

    J'avoue que le code est actuellement très brouillon, c'est pourquoi si vous avez des conseils pour effectuer ce genre de recherche je suis preneur!
    J'ai l'intuition qu'une fonction VBA, ou même excel, permet d'y arriver rapidement.

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    si la conception de la feuille de calculs contenant les données est correcte,
    le résultat serait instantané avec un filtre avancé et en moins de dix lignes de code !


    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

  11. #11
    Invité
    Invité(e)
    Par défaut
    il me semble bien que le code que j'ai placé au post #8 fait la même chose que le tien en il le simplifie!

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 6
    Par défaut
    Le vbscript marche à merveille rdurupt, je note ça dans un coin ça me sera très utile pour la suite (c'est une question fréquemment posée sur des forums pour laquelle sauf erreur de ma part il n'y a eu aucune réponse!)

    Marc-L, le filtre avancé s'avère être la meilleure solution, merci!

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par LouisExcellence Voir le message
    (c'est une question fréquemment posée sur des forums pour laquelle sauf erreur de ma part il n'y a eu aucune réponse!)!
    A ma connaissance j'en ai aucune idée

    Mais je penses que si!
    http://www.developpez.net/forums/d13...e/#post7536200
    Dernière modification par Invité ; 30/06/2015 à 23h13.

  14. #14
    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 heu
    Bonsoir
    Durupt respect!!!!

    il faudra que je te contacte si ca te dérange pas pour me parler en franciscain de ce scriptcontrol au quelque on attribue un langage
    tu a l'air de manipuler ca très bien

    j'aime le style
    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

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour Patrick, pas de problème!

Discussions similaires

  1. [CS4] exécuter une ligne de code "reconstruite"
    Par aerosky dans le forum Flash
    Réponses: 0
    Dernier message: 29/12/2010, 14h17
  2. Exécution d'une ligne de code avant la fin d'exécution de la précédente
    Par Patrice Henrio dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 19/07/2010, 15h22
  3. Réponses: 12
    Dernier message: 13/08/2009, 16h40
  4. Réponses: 7
    Dernier message: 19/12/2006, 12h11
  5. PB sur une ligne de code
    Par romrai dans le forum Access
    Réponses: 2
    Dernier message: 22/02/2006, 11h27

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