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 :

probleme:variable string en retour au lieu d'un array


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 probleme:variable string en retour au lieu d'un array
    Bonjour a tous
    j'ai un petit soucis avec le retour d'une variable
    cela devrait être un array mais au lieu de ca j'ai le string de l'array
    si quelqu'un a une idée du pourquoi comment je suis preneur


    connaissances minimum en JS requises
    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
    '=======================================================================
    'teste de restitution en tableau
    Function NBP2(max, T)
        Set sc = CreateObject("ScriptControl")
        code = code & "function NBP(max){var keys= new Array(); var a = 0;for(i = 2; i <= max; i++) {var j = 1;var racine = Math.floor(Math.sqrt(i));"
        code = code & "do {j++;} while(j <= racine && i%j != 0);if(j > racine) {keys.push(a);keys[a]=i;a=a+1; }};return keys}"
        With sc: .Language = "JScript": .AddCode code: End With
        T = Timer: NBP2 = sc.Run("NBP", max): T = Timer - T
    End Function
     
    Sub test2()
        Dim T
        resultat = NBP2(100000, T)
        ' ici je ne comprends pas j'ai un string en retour dans les variables locales
        Debug.Print resultat ' ici c'est un string alors que ca ne devrait pas en être 
        Debug.Print "temps ecoulé " & T & " secondes"
    End Sub
    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
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Désolé, j'y connais rien en JS, mais j'ai bien un tableau comme ça

    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
    '=======================================================================
    'teste de restitution en tableau
    Function NBP2(max, T) As Variant
        Set sc = CreateObject("ScriptControl")
        code = code & "function NBP(max){var keys= new Array(); var a = 0;for(i = 2; i <= max; i++) {var j = 1;var racine = Math.floor(Math.sqrt(i));"
        code = code & "do {j++;} while(j <= racine && i%j != 0);if(j > racine) {keys.push(a);keys[a]=i;a=a+1; }};return keys}"
        With sc: .Language = "JScript": .AddCode code: End With
        T = Timer: NBP2 = Split(sc.Run("NBP", max), ","): T = Timer - T
    End Function
     
    Sub test2()
        Dim T
        resultat = NBP2(100000, T)
        Debug.Print UBound(resultat)
        Debug.Print "temps ecoulé " & T & " secondes"
    End Sub
    Si besoin d'injecter les éléments sur une feuille, un petit Transpose... s'impose
    Dans la fonction ou dans l'appelante, au choix

    Ici, dans la fonction, pour injecter le résultat en partant de la cellule active
    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
    '=======================================================================
    'teste de restitution en tableau
    Function NBP2(max, T) As Variant
        Set sc = CreateObject("ScriptControl")
        code = code & "function NBP(max){var keys= new Array(); var a = 0;for(i = 2; i <= max; i++) {var j = 1;var racine = Math.floor(Math.sqrt(i));"
        code = code & "do {j++;} while(j <= racine && i%j != 0);if(j > racine) {keys.push(a);keys[a]=i;a=a+1; }};return keys}"
        With sc: .Language = "JScript": .AddCode code: End With
        T = Timer: NBP2 = Application.Transpose(Split(sc.Run("NBP", max), ",")): T = Timer - T
    End Function
     
    Sub test2()
        Dim T
        resultat = NBP2(100000, T)
        Debug.Print UBound(resultat)
        Debug.Print "temps ecoulé " & T & " secondes"
        ActiveCell.Resize(UBound(resultat), 1).Value = resultat
    End Sub

  3. #3
    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
    BONSOIR jOE
    re

    oui spliter le résultat mais ce serait prendre le chemin le plus facile sans comprendre pourquoi keys devient un string en VBA
    c'est pas normal keys est bien un array dans le JS
    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

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    T'as posé la question dans la section VBA, j'ai donc touché le VBA


    tient, c'est côté js qui ça coince apparemment : http://ramblings.mcpher.com/Home/exc...control/arrays

  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
    y amemprise je crois
    en fait dans ton lien on traite un dictionnaire Scripting.dictionary

    et en JavaScript on traite cet object comme l'Object "Scripting.arraylist" dans VBA avec le suffixe "[FONT=Courier New].toArray()[/FONT]" pour avoir un tableau

    le ".sort" pour un dico en vba ca n'existe pas seulement pour Scripting.arraylist et sortedlist je crois aussi sauf que sortedlist possède (cle/valeur) comme le dico mais pas arraylist
    [FONT=Courier New]
    "return new VBArray(arrayIn).toArray();}"


    dans mon code keys et d'entrée un array non il y a quelque chose qui cloche mais je comprends pas

    je recherche
    a si il y avait Mercatog dans le coin on serait fixé [/FONT]


    re
    d'ailleurs tiens fait le test
    j'ai remplacer return keys par return keys[5]
    regarde le résultat
    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
    '=======================================================================
    'teste de restitution en tableau
    Function NBP2(max, T)
        Set sc = CreateObject("ScriptControl")
        code = code & "function NBP(max){var keys= new Array(); var a = 0;for(i = 2; i <= max; i++) {var j = 1;var racine = Math.floor(Math.sqrt(i));"
        code = code & "do {j++;} while(j <= racine && i%j != 0);if(j > racine) {keys.push(a);keys[a]=i;a=a+1; }};return keys[5];}"
        With sc: .Language = "JScript": .AddCode code: End With
        T = Timer: NBP2 = sc.Run("NBP", max): T = Timer - T
    End Function
     
    Sub test2()
        Dim T
        resultat = NBP2(1000, T)
        ' ici je ne comprends pas j'ai un string en retour dans les variables locales
        Debug.Print resultat ' ici c'est un string alors que ca ne devrait pas en être
        Debug.Print "temps ecoulé " & T & " secondes"
    End Sub
    voila on est bien donc d'accords keys est bien un array
    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
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Patrick

    Je n'ai pas de réponse exacte mais j'ai des doutes que Run transforme le tableau js Keys en string ou en objet JScriptTypeInfo (de la même manière)

    Regarde ton code avec les lignes 6 ou 7 en commentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function NBP2(max, T)
    code = code & "function NBP(max){var keys= []; var a = 0;for(i = 2; i <= max; i++) {var j = 1;var racine = Math.floor(Math.sqrt(i));"
    code = code & "do {j++;} while(j <= racine && i%j != 0);if(j > racine) {keys.push(a);keys[a]=i;a=a+1; }};return keys;}"
    Set Sc = CreateObject("ScriptControl")
    With Sc: .Language = "JScript": .AddCode code: End With
    T = Timer: Set NBP2 = Sc.Run("NBP", max): T = Timer - T
    'T = Timer: NBP2 = Sc.Run("NBP", max): T = Timer - T
    Debug.Print TypeName(NBP2); VarType(NBP2)
    End Function
    Les 2 cas ont une vartype=8 , càd string (cher à Marc-L)

    Pour tester le cas de "l'objet"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test2()
    Dim T As Long
    Dim Elm
     
    Set resultat = NBP2(1000, T)
    For Each Elm In resultat
        Debug.Print Elm                                   '
    Next Elm
    End Sub

Discussions similaires

  1. [XL-2003] Variable String au lieu d'un nom de Feuille
    Par MatMout dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/07/2010, 11h04
  2. [TPW][Débutant] Retour chariot dans variable string
    Par dimi2 dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 03/04/2008, 20h22
  3. Probleme avec string et variable.
    Par pierre987321 dans le forum Delphi
    Réponses: 3
    Dernier message: 26/04/2007, 13h22
  4. Réponses: 6
    Dernier message: 14/02/2004, 14h01

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