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 :

Comment utiliser une 2° session Excel


Sujet :

Macros et VBA Excel

  1. #41
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour,

    Pour les CVS si quelqu'un veut bien donner une piste sur la façon de faire c'est avec plaisir...

    Sinon pour les Vbscripts cela progresse et marche (tests en cours) mais pas de manière nickel car le VBScript semble ne pas reconnaitre les := par exemple la ligne suivante marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    code = code & "wb2.Sheets.Add.Name = ""Test""" & vbCrLf
    mais pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    code = code & "wb2.Sheets.Add(Before:=wb2.Sheets(""Feuil1"")).Name = ""Test""" & vbCrLf
    comment peut on faire pour corriger cela svp car en plusieurs endroits il y a := comme pour FileName:=, FileFormat:=...?

  2. #42
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    bonsoir itwoo
    tu t'égare la !!! la syntaxe n'est pas tout a fait pareil en VBS pas du tout meme

    de memoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    workb.Sheets.Add  ,workb.Sheets(workb.Sheets.Count)
    workb etant soit un createobject ou optenu par un getobject bien sur dans le vbs ce qui veut dire que tu doit créer les lignes de codes pour chopper ton classeur
    dans les parenthezes tu peux mettre le nom du sheets qui doit le précéder si je me souviens bien ca fait tellement longtemps
    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

  3. #43
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    allez pour l'exemple

    créé un dossier sur ton bureau
    dans ce dossier crée un fichier exel dans le quel tu va mettre ce 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
    Sub itwoo()
        Dim code$, Scripts$, fichier$, x&, i
        code = code & "Set oExcel = CreateObject(""Excel.Application"")" & vbCrLf
        'code = code & "oExcel.Visible = True" & vbCrLf
        code = code & "Set workb = oExcel.Workbooks.Add" & vbCrLf
        code = code & "Set sh = workb.Sheets.Add(, workb.Sheets(workb.Sheets.Count))" & vbCrLf
        code = code & "sh.Name = wscript.arguments(0)" & vbCrLf
        code = code & "workb.SaveAs """ & ThisWorkbook.Path & "\itwoo""" & " & wscript.arguments(0)" & vbCrLf
        code = code & "oExcel.quit"
        fichier = ThisWorkbook.Path & "\creator.vbs"
        x = FreeFile
        Open fichier For Output As #x: Print #x, code: Close #x
     
        Scripts = """" & fichier & """ "
        With CreateObject("WScript.Shell")
            For i = 1 To 100
                .Run Scripts & i
            Next
        End With
    End Sub
    enregistre ce classeur le nom que tu voudra bien lui donner
    une fois enregistrer lance la sub
    regarde l'interieur de ton dossier
    ca rajeuni pas

    j'atire ton attention sur wscript.arguments(x) qui te permet d'injecter des argument au vbs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Run Scripts & truc & " " & machin & " " bidule  ' etc... etc....
    dans l'exemple que je viens de te donner wscript.argument(0) c'est le i itéré dans la boucle

    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. #44
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour Pat ,

    Non ca ne rajeunit pas (et Merci Marc pour toutes tes géniales idées !!!)
    ok je vais regarder ton code et notamment ton "Set sh = workb.Sheets.Add(, workb.Sheets(workb.Sheets.Count))" pour le positionnement de la feuille excel car actuellement je bricole pour la mettre à la bonne place faute de compréhension par VBS de Before := et After :=

    Voici le code qui marche et qui ressemble à une simple recopie, le seul point que j’aimerais améliorer c’est la compréhension par VBScript du := (ou savoir par quoi le remplacer) par exemple le positionnement de la feuille en utilisant Before := , ou FileFormat := ...en attendant utilisation d’astuce pour contourner...
    Idem pour le xlXYScatterlines non compris par Vbscript mais encore une fois par chance c’est le format graphique 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    Sub test()
    On Error Resume Next
    Kill ThisWorkbook.Path & "\test_vbs\*.*" 'pour détruire tous les fichiers excel présents dans test_vbs
    RmDir ThisWorkbook.Path & "\test_vbs"
    MkDir ThisWorkbook.Path & "\test_vbs"
    Err.Clear
    On Error GoTo 0
    vbssession2
    requetevbs = ThisWorkbook.Path & "\sessionsvbs.vbs"
    SC = """" & requetevbs & """ "
    For j = 0 To 20 'pour lancer une boucle sur 0 à 20 vbscripts
    elmnt = "test" & j
    reper = ThisWorkbook.Path & "\test_vbs"
    flnc = reper & "\" & elmnt & ".xlsx"
    Set WS = CreateObject("WScript.Shell") 'pour créer le VBScript
    WS.Run SC & j & " " & flnc 'pour lancer le Vbscript avec les 2 arguments j et flnc
    Next j      
    End Sub
     
    Sub vbssession2() 'création du code vbs pour lancer les 2° session excel
    Dim code As String, FSys As Object, MonFic As Object 
    code = code & "Dim Excel2, wb2, sh2, Graph2" & vbCrLf
    code = code & "Set Excel2 = CreateObject(""Excel.Application"")" & vbCrLf
    code = code & "Set wb2 = Excel2.Workbooks.Add" & vbCrLf
    'ici le := de Before non compris par VBScript
    'code = code & "wb2.Sheets.Add (Before:=wb2.Sheets(""Feuil1"")).Name = ""Test""" & vbCrLf 'ne marche pas
    code = code & "wb2.Sheets.Add.Name = ""Test""" & vbCrLf 'par chance la nouvelle feuille excel se créé en 1° place
    code = code & "Set sh2 = wb2.Sheets(1)" & vbCrLf
    code = code & "With sh2" & vbCrLf
    code = code & "  .Cells(1, 2).Value = ""Nombre""" & vbCrLf
    code = code & "  .Cells(1, 3).Value = ""Date""" & vbCrLf
    code = code & "  For i = 0 To 20" & vbCrLf
    code = code & "  .Cells(i + 2, 2).Value = i" & vbCrLf
    code = code & "  .Cells(i + 2, 3).Value = (WScript.Arguments(0)+1) * i" & vbCrLf
    code = code & "  Next" & vbCrLf
    code = code & "End With" & vbCrLf
    code = code & "sh2.Cells(1, ""M"").Select" & vbCrLf
    code = code & "Set Graph2 = wb2.Charts.Add" & vbCrLf
    code = code & "wb2.Windows(1).Zoom = 100" & vbCrLf
    'code = code & "wb2.ActiveChart.ChartType = xlXYScatterLines" & vbCrLf 'le xlXYScatterlines non compris par Vbscript
    code = code & "wb2.ActiveChart.Name = ""Graph1""" & vbCrLf
    code = code & "wb2.ActiveChart.SeriesCollection.NewSeries" & vbCrLf
    code = code & "wb2.ActiveChart.SeriesCollection(1).Formula = ""=SERIES('Test'!C1,'Test'!B2:B"" & 22 & "" ,'Test'!C2:C"" & 22 & "",1)""" & vbCrLf
    code = code & "wb2.ActiveChart.HasTitle = True" & vbCrLf
    code = code & "wb2.ActiveChart.ChartTitle.Text = ""Test de graphique""" & vbCrLf
    code = code & "wb2.ActiveChart.ChartTitle.Font.Size = 8" & vbCrLf
    code = code & "Excel2.Application.DisplayAlerts = False" & vbCrLf
    code = code & "wb2.SaveAs WScript.Arguments(1)" & vbCrLf 'ok marche avec sauvegarde au format défini par WScript.Arguments(1) le FileFormat := lui non compris
    code = code & "wb2.Close" & vbCrLf
    code = code & "Excel2.Application.DisplayAlerts = True" & vbCrLf
    code = code & "Set wb2 = Nothing" & vbCrLf
    code = code & "Set sh2 = Nothing" & vbCrLf
    code = code & "Set Graph2 = Nothing" & vbCrLf
    code = code & "Set Excel2 = Nothing" & vbCrLf
    With ThisWorkbook
    Set FSys = CreateObject("Scripting.FileSystemObject")
    Set MonFic = FSys.CreateTextFile(.Path & "\sessionsvbs" & ".vbs")
    With MonFic
       .write code
     End With
    End With
     
    End Sub
    A ce stade test en cours pour voir le temps mis et surtout si la consommation de mémoire n’est pas de nouveau en explosion...
    Dans le gestionnaire de tâches il y a tout un tas de VBScripts qui sont lancés en parallèle mais vont se fermer au fur et à mesure de leur exécution... Il semble que la limite mémoire soit donc bien celle de la mémoire RAM de l’ordinateur et non plus celle de la mémoire RAM de la session excel originale...cette session excel originale reste constante, sa mémoire ne bouge pas dans le gestionnaire des tâches !!! et à chaque nouveau script (qui apparait dans le gestionnaire des tâches) il y a consommation de la mémoire Ram de l’ordinateur par ce nouveau script et tant que celui-ci non fini et fermé...
    Suis pas trop disponible pour les tests pendant les 2 prochaines semaines...

  5. #45
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    le after ou before est sousentendu en vbs il suffit de renseigner le sheets afterentre les parenthezes en vbs

    question memoire
    il n'y a pas de difference tu consomme toujours pareil sauf que !!!!!!!!:


    comme tu ne crée pas l'instance a partir du classeur lanceur les 2 ou 4 giga de memoire allouée a excel selon les versions ne sont pas saturrés
    et c'etait justement ca ton probleme non?????( au bout de x instances ca plantait)

    de toute les manieres ca ira toujours plus vite
    pourquoi ?:
    tout simplement parce que les instances sont lancées en multitread asyncrones
    ca veux dire quoi?:
    en fait dans la boucle je lance le vbs sans prendre en compte si l'instance précedente est fini de démarrer et c'est absolument indépendant de VBA

    et le code c'est pas de marc c'est de moi

    au pire c'est la memoire globale systeme qui est surchargée cela dit j'ai testé 400 classeurs pas bronché bon d'accords j'ai 32 giga de RAM mais bon
    comme dans le script vbs elle sont refermées au pire on a 3 ou 4 instances d'ouvertes en meme temps
    j'ai longtemps travaillé avec vbs en tant qu'executeur il a cet avantage
    en gros il ne fait qu'apuyer sur un bouton pour demarrer autre chose
    si on pouvait rallentir le visuel tu verrais que le vbs se ferme avant que toi tu ai vu l'application se refermer autrement dit l'intance de chaque vbs n'ont pas le temps de stoker en memoire qu'elle se referme a l'inverse de vba qui lui reste en memoire tant que l'instance lanceur n'est pas refermée

    voila voila
    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. #46
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    hello Pat,

    Ok vais regarder dès que possible le After et le Before plus en détail...
    Sais tu si l’on peut remplacer/déclarer les := ? Par exemple pour CreateBackup, FileFormat et autre syntaxe par quelque chose ? il y a moyen de contourner mais bon si on pouvait les déclarer directement ca serait mieux car ils apparaissent souvent ces :=

    Reprise des tests dans 2 semaines mais en effet pour la mémoire nous sommes d’accord...et cette fois le but semble proche puisque pour le moment tout semble fonctionner.

    PS : pour le code ton aide est très précieuse merci beaucoup et je t’en suis reconnaissant, mais Marc nous a aussi appris énormément et sa participation fut déterminante (notamment ses fameuses abeilles!!!), tout comme Qwaz, Eriic...bref c'est un résultat collectif auquel tu as beaucoup contribué. Merci Pat, Marc, Qwaz, Eric, Dysorthographie et à vous tous

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

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    tu n'utilises les arguments nommés que si tu n'as pas envie de les mettre tous.
    Mais tu peux laisser vides ce que tu n'utilises pas, et mettre ceux que tu utilises à leur place sans les nommer :
    ,,,paramètre4,,paramètre6
    Reste à voir si ce principe est valable également en vbs.
    eric

  8. #48
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    bonjour itwoo

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Sub itwoo()
        Dim code$, Scripts$, fichier$, x&, i
        code = code & "Set oExcel = CreateObject(""Excel.Application"")" & vbCrLf
        'code = code & "oExcel.Visible = True" & vbCrLf
        code = code & "Set workb = oExcel.Workbooks.Add" & vbCrLf
     
    ' A TOI DE CHOISIR 
     
        '1  ajouter une feulle apres la feuille qui se nomme "feuil1"
        'code = code & "Set sh = workb.Sheets.Add(, workb.Sheets(""Feuil1""))" & vbCrLf
     
     
     
        '2  ajouter une feulle et la mettre en premier
        'code = code & "Set sh = workb.Sheets.Add" & vbCrLf
     
     
        ' 3 ajouter une feulle AVANT!!! la "feuil3"
        code = code & "ind = workb.Sheets(""Feuil3"").Index - 1" & vbCrLf
        code = code & "Set sh = workb.Sheets.Add(, workb.Sheets(ind))" & vbCrLf
     
     
     
     
     
        code = code & "sh.Name = ""itwoo"" & wscript.arguments(0)" & vbCrLf
        code = code & "workb.SaveAs """ & ThisWorkbook.Path & "\itwoo""" & " & wscript.arguments(0)" & vbCrLf
        code = code & "oExcel.quit"
        fichier = ThisWorkbook.Path & "\creator.vbs"
        x = FreeFile
        Open fichier For Output As #x: Print #x, code: Close #x
     
        Scripts = """" & fichier & """ "
        With CreateObject("WScript.Shell")
            For i = 1 To 200
                .Run Scripts & i
            Next
        End With
    End Sub
    Bref pour le sheet.add c'est quasiment pareille que vba (hors syntaxe),sauf que pour le before il faut determiner l'index avec l'index de la feuille suivante -1

    tu peux aussi tester avant si le sheets existe de la meme maniere que vba dans une boucle
    je viens de tester 200 sur le pc portable il a pas moufté: 94 secondes
    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

  9. #49
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut
    Bonjour Eric, Pat...

    Désolé pour l'absence...
    Oui vos 2 posts précédents font l'affaire à merveille, cela marche bien en vbs comme cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sheets.Add(Before, After, Count) 'pour positionner la feuille excel ajoutée en fonction des feuilles excel du fichier
    code = code & "Set sh2 = wb2.Sheets.Add(, wb2.Sheets(wb2.Sheets.Count))" & vbCrLf 'pour insérer la feuille excel en dernière position la , permet de positionner la nouvelle feuille excel en after de la feuille excel choisie
    code = code & "Set sh2 = wb2.Sheets.Add(, wb2.Sheets(1))" & vbCrLf 'pour insérer la feuille excel juste aprés la 1° feuille
    code = code & "Set sh2 = wb2.Sheets.Add(, wb2.Sheets(""Feuil1""))" & vbCrLf 'pour insérer la feuille excel juste aprés la 1° feuille
    code = code & "Set sh2 = wb2.Sheets.Add(wb2.Sheets(wb2.Sheets.Count))" & vbCrLf 'pour insérer la feuille excel juste avant la dernière feuille excel
    Test en cours depuis quelques temps et pour le moment cela tourne comme une horloge
    Si tout va bien et aprés un petit moment de tests je mettrai résolu...
    Merci à vous tous

  10. #50
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour,

    Tests toujours en cours, je reviens vers vous sous peu car plusieurs paramétres doivent être améliorés si possible et perso je séche encore une fois...

    a bientôt

  11. #51
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut Re
    Bonjour,

    Voici les résultats des tests qui sont très bien à petite échelle mais ne sont pas super bons à grande échelle entre une seule session excel, vbscript, une 2° session excel:

    Sur une petite échelle voici ce que cela donne :
    Tout d’abord quelque soit la méthode il n’y a pas bloquage ni mémoire ni vbscript car pas assez de datas pour cela:
    Test 1° session excel : c’est la méthode la plus rapide (bien que cette façon soit déjà très longue) et la plus simple et logique...
    test avec vbscript: (à ma grande surprise !!!) n’est pas plus rapide mais va quasi / aussi vite que la méthode une seule session excel...pour VBScript c’est comme si excel empêchait de calculer plusieurs sessions en parallèles bien qu’elles soient pourtant là dans le gestionnaire de tâches...
    Si lancement par VBScript il y a plusieurs sessions excel différentes ouvertes en processus arrière plan, alors que si lancement par VBA la session Excel ne lance qu’un seul processus excel à la fois Comment se fait il alors que dans ces conditions la version VBScript ne soit pas plus rapide que la 1° session excel ?TRES PROBABLEMENT LE FAIT QU’EXCEL NE TRAVAILLE PAS EN MULTITACHES MAIS FICHIER APRES FICHIER DONC VBSCRIPT NE PEUT PAS ALLER PLUS VITE QUE LA SESSION EXCEL, CE QUI LIMITE LA VITESSE D’EXECUTION C’EST EXCEL A CAUSE DE SA VITESSE DE CALCUL...
    test 2° session excel : c’est la version la moins rapide, elle est 3.5 fois plus longue que la version une seule session excel...

    Voici les résultats des tests à grande échelle
    test 1° session excel : la mémoire est consommée peu à peu mais le chrono bien que pas super rapide augmente de façon linéaire, recherche d’un moyen pour ouvrir fermer automatiquement excel pour le relancer (manuellement c’est possible sans soucis)
    si 15 valeurs temps 297 secondes soit par valeurs 19.8 secondes
    si 50 valeurs temps 974 secondes soit par valeurs 19.48 secondes
    si 100 valeurs temps1914 secondes soit par valeurs 19.18 secondes
    test avec vbscript: impossible de lancer VBScript la chaine des datas est trop longue pour être passée en argument, pas réussi à lancer VBScript
    test 2° session excel : la mémoire n’est pas consommée mais le chrono créve le plafond car le chrono n’augmente pas de façon linéaire!!!
    si 15 valeurs temps 926 secondes soit par valeurs 61.7 secondes
    si 50 valeurs temps 6424 secondes soit par valeurs 128,48 secondes
    si 100 valeurs temps 21627 secondes soit par valeurs 216,27 secondes
    il semblerait que plus il y a de valeurs plus excel ralenti=> ENORME PROBLEME EXCEL, LA 2° SESSION N’AUGMENTE PAS LINEAIREMENT !!!
    Vu le résultat catastrophique au niveau du chronomètre pour la 2° session excel elle ne peut pas être conservée, VBScript non plus car pas réussi à lancer VBScript...
    Donc il faut rester sur la méthode classique de la 1° session excel en essayant d’automatiser l’ouverture/ fermeture et aussi en essayant d’accélérer excel car il semble que le goulet d’étranglement soit la vitesse d’exécution d’excel...
    COMMENT ACCELERER EXCEL ? il n’est pas possible d’augmenter la mémoire RAM de la session excel pour créer tous les fichiers sous la 1° session Excel. Par contre il peut être astucieux d’augmenter la mémoire RAM de l’ordinateur, ou son processeur ou autre mais quoi ?
    Une idée était aussi de lancer 2 fichiers excel en même temps l’un faisant le début, le 2° la suite (et ainsi de suite): pas réussi car excel une fois lancé tourne à fond et ne permet pas à l’ordinateur d’ouvrir un 2° fichier excel...donc pour le moment répartition de la tâche entre 2 ordi pour aller 2 fois plus vite...

    Donc pour le moment il faut garder la méthode excel classique avec une seule session excel et l’adapter pour la relancer avant que la mémoire ne bloque...la méthode par VBScrpipt ne marchant pas (pour le moment problème de la longueur de la string des datas limité à 2047 caractères) ou encore différent trouver une autre méthode

    Par contre concernant cette discussion l'utilisation de la 2° session Excel cela marche, mais ne convient pas pour ce que je souhaite...

    Si vous avez une idée pour améliorer je veux bien avec plaisir ...ici Pat tu as parlé du cvs???
    ensuite je marque comme résolu cette discussion sur la 2° sesion excel, quitte à ouvrir une autre discussion ailleurs

  12. #52
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour itwoo
    si avec vbs c'est plus lent tu t'es planté quelque part c'est tout bonnement impossible
    ensuite c'est quoi cet argument de 2047 caracteres ta perdu la tete ou quoi ?????
    sincerement j'ai pas tout compris ce que tu veux faire mais a mon avis tu a pas le bon outil

    ma fois quand tu rempli une variable string a fond meme si c'est pour l'injecter dans le vbs tu prends de la memoire de vba quand meme
    avec des gros texte c'est pas comme ca qu'il faut travailler avec les vbs
    essaie de coder ton argument de facon a ce qu'il devienne en dur dans le vbs
    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

  13. #53
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    je vien de tester sur 100 classeurs
    en injectant un string de 3000 caracteres en argument qui sera inscrit en A1 de chaque classeurs , ca ne met moins de 2 secondes par classeurs
    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
    Sub itwoo()
        Dim code$, Scripts$, fichier$, x&, i
        code = code & "Set oExcel = CreateObject(""Excel.Application"")" & vbCrLf
        'code = code & "oExcel.Visible = True" & vbCrLf
        code = code & "Set workb = oExcel.Workbooks.Add" & vbCrLf
        code = code & "Set sh = workb.Sheets.Add(, workb.Sheets(workb.Sheets.Count))" & vbCrLf
        code = code & "sh.Name = ""itwwoo"" & wscript.arguments(0)" & vbCrLf
        code = code & " sh.cells(1)=wscript.arguments(1)" & vbCrLf
        code = code & "workb.SaveAs """ & ThisWorkbook.Path & "\itwoo""" & " & wscript.arguments(0)" & vbCrLf
        code = code & "oExcel.quit"
        fichier = ThisWorkbook.Path & "\creator.vbs"
        x = FreeFile
        Open fichier For Output As #x: Print #x, code: Close #x
     
        Scripts = """" & fichier & """ "
        With CreateObject("WScript.Shell")
            For i = 1 To 100
                .Run Scripts & i & " " & String(3000, "A") 'j'injecte 3000 caracteres dans la cellules A1 de chaque classeur
            Next
        End With
    End Sub
    Nom : demo2.gif
Affichages : 192
Taille : 894,1 Ko
    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

  14. #54
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour Pat,

    oui ca ne semble pas logique que VBS ne soit pas plus rapide que Excel tout seul...d'ou le message d'aide

    Merci de ton astuce, je vais tester ce que tu indiques, ici j'ai mis pour l'argument: chaine= ... alors que toi tu as mis string()...autant c'est juste ca...
    qui bloque la taille à grande échelle...tu l'as mis en dur dans le vbs, je ne connaissais pas cette astuce string()
    le temps de tester et je te dis...

  15. #55
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour Pat,

    Effectué ton test, sur mon ordi cela bloque, par exemple String(2000, "A") ne passe pas...en effet impossible de passer les 2047 caractères pour la chaine de caractères mise en argument du vbscript.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Scripts = """" & fichier & """ "
        'Pat introduit 3000 caractères ici je ne peux pas faire comme lui
        j = Len(Scripts & i & " " & "")
        'chaine = Scripts & i & " " & String(2047 - j, "A")
        'j = Len(chaine) 'longueur maximale 2047 caractéres
        k = 2047 - j 'attention i ="" vide ici!!! donc +1 caractére possible
        With CreateObject("WScript.Shell")
            For i = 1 To 100
                '.Run Scripts & i & " " & String(3000, "A") 'j'injecte 3000 caracteres dans la cellules A1 de chaque classeur
                'non String(3000, "A") :ne marche pas trop grand!!!
                .Run Scripts & i & " " & String(k, "A") 'marche
                .Run Scripts & i & " " & String(1980, "A") 'impossible d'aller au delà
    Essaie d’augmenter la String sur ton ordi pour voir à combien tu bloques stp car ton ordi peut être un peu plus puissant...mais tu risques de bloquer rapidement...
    Bref pour le moment je suis toujours coincé pour tout automatiser malgré tout un tas de recherche d’astuces...

    Par contre comme pour Excel2 cela marche nickel même si trop long...il serait bien de fermer cette discussion pour en ouvrir une autre ailleurs, es tu d’accord ?

  16. #56
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    que veux tu que je te dise moi ???
    je n'ai pas de soucis avec arguments de 30000 caracteres
    dans cet exemple je créé des classeurs et leur met 30000 "A" en A1 30000 !!!!!!!!
    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
    Sub itwoo()
        Dim code$, Scripts$, fichier$, x&, i
        code = code & "Set oExcel = CreateObject(""Excel.Application"")" & vbCrLf
        'code = code & "oExcel.Visible = True" & vbCrLf
        code = code & "Set workb = oExcel.Workbooks.Add" & vbCrLf
        code = code & "Set sh = workb.Sheets.Add(, workb.Sheets(workb.Sheets.Count))" & vbCrLf
        code = code & "sh.Name = ""itwwoo"" & wscript.arguments(0)" & vbCrLf
        code = code & " sh.cells(1)=wscript.arguments(1)" & vbCrLf
        code = code & "workb.SaveAs """ & ThisWorkbook.Path & "\itwoo""" & " & wscript.arguments(0)" & vbCrLf
        code = code & "oExcel.quit"
        fichier = ThisWorkbook.Path & "\creator.vbs"
        x = FreeFile
        Open fichier For Output As #x: Print #x, code: Close #x
     
        Scripts = """" & fichier & """ "
        With CreateObject("WScript.Shell")
            For i = 1 To 5
                .Run Scripts & i & " " & String(30000, "A") 'j'injecte 3000 caracteres dans la cellules A1 de chaque classeur
            Next
        End With
    End Sub
    a mon avis tu te plante quelque part

    Nom : demo2.gif
Affichages : 131
Taille : 399,6 Ko

    et puis si tu regardais ce que tu fait en ligne 1,3,11
    fait des debug.print tu comprendra tout seul
    tu t'es un peu emmeeeeelllléééééé les pinceaux la
    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

  17. #57
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour,

    Eh bien écoute un grand merci Pat car en testant sur le 2° ordi tu as raison ca marche nickel alors que sur le 1° blocage à 2047 (ca ressemble à 2048=2^11) caractères...j’ignore totalement pourquoi le 1° ordi bloque...il est peut être pas assez puissant... Si tu as une idée du blocage tu peux le mettre et après je mets que cette discussion est résolue...
    Bref pour le moment ca repart...et comme excel 2 marche si besoin on rediscutera ailleurs...en tous les cas merci car ca fait un sacré moment que je cherche pour rien...

  18. #58
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re ca serait pas un excel 2003 celui qui deconne par hasard ?
    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

  19. #59
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    ben non c'est Excel 2007...bon c'est pas grave je vais travailler sur l'autre ordi...et pour les autres questions j'ouvrirai une autre discussion car Exel2 marche nickel.
    Merci à vous tous

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. [XL-2003] Comment utiliser une variable pour filtrer dans Excel
    Par MichaSarah dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/06/2010, 17h40
  2. Comment utiliser une boite de dialogue Excel ?
    Par mamou30 dans le forum Delphi
    Réponses: 6
    Dernier message: 18/06/2007, 01h24
  3. Réponses: 2
    Dernier message: 14/05/2006, 20h36
  4. [WebForms]Comment utiliser une variable de session depuis JavaScript ?
    Par ThunderBib dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 05/05/2006, 15h01
  5. [nero] Comment utiliser une ancienne session
    Par FFF dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 17/08/2005, 15h03

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