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

VBScript Discussion :

Problèmes d'exécution de script vbs via ETL BODI


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Problèmes d'exécution de script vbs via ETL BODI
    Bonjour

    Je suis un peu débutant en VBS et je fais face à un soucis dont j'ai du mal à me défaire. Et j'essaye de faire le tour de tous les possibilités.

    J'ai un script vbs qui transforme un fichier csv en xlsx. (Je peux joindre le code même si ce n'est pas lui qui doit poser problème).

    Ce vbs est déclenché par le lancement d'un .bat qui lui même est déclenché par un etl (BO DataIntegrator).

    Tout se fait sur un serveur.

    Lorsque je lance ce .bat via cmd (en utilisant un compte adminsvr ou adminservice qui sont tous les 2 administrateurs du serveur) , tout se passe à merveille et mon fichier est généré.

    Lorsque je le lance par l'ETL (l'ETL étant configuré pour être lancé par adminsvr ou adminservice, j'ai testé les 2 configurations), le vbs plante avec en erreur :

    07/05/2018 10:16:16 Erreur : 1004 Microsoft Excel ne peut accéder au fichier «*C:\test\test_csv.csv*». Plusieurs raisons sont possibles*:

    • Le nom du fichier ou le chemin d'accès n’existe pas.
    • Ce fichier est actuellement utilisé par un autre programme.
    • Le classeur que vous essayez d’enregistrer porte le même nom qu’un classeur actuellement ouvert.


    Ci joint le code du vbs :

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    Option Explicit
    Const ForReading = 1
    Const ForWriting = 2
    Const adOpenStatic = 3
    Const adLockOptimistic = 3
    Const adCmdText = &H0001
     
    '///// Variable Declare
    Dim book, CsvInput ,ExcelOutput ,csvbook, objfile
    Dim fs, sArg
     
    Dim objFSO2 : Set objFSO2 = CreateObject("Scripting.FileSystemObject")
    Dim ficLog : Set ficLog = objFSO2.OpenTextFile("csv_to_excel.txt", 8, true)
     
    ficLog.WriteLine Now & " Etape 0 : "
     
    'On récupère les arguments
    Set sArg = WScript.Arguments
     
    'Il y a 2 arguments, fichier en entrée, fichier de sortie
    If sArg.Count <> 2 Then
     
    	WScript.Quit
    End If
     
    'On récupère les 2 arguments.
    CsvInput = sArg(0)
    ExcelOutput = sArg(1)
     
    'CsvInput = "\\pdecisds01wv\BODS\FLUXEGEE\out\gegse\C01\Suivi\test_csv.csv"
    'ExcelOutput = "\\pdecisds01wv\BODS\FLUXEGEE\out\gegse\C01\Suivi\C01_tableau_histo.xlsx"
     
    CsvInput = "c:\test\test_csv.csv"
    ExcelOutput = "c:\test\C01_tableau_histo.xlsx"
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set fs = WScript.CreateObject("Scripting.FileSystemObject")
     
    WScript.Sleep 10000
     
    '///// Open objects
    Dim objFSO : Set objFSO = CreateObject ("Scripting.FileSystemObject") 
    ' - File system object
     
    Dim XL     : Set XL = CreateObject ("Excel.Application")              
    ' - Excel object
     
    '///// Properties Excel object
    XL.Visible = False
    XL.DisplayAlerts = False
    XL.SheetsInNewWorkbook = 1
    set book = XL.Workbooks.Add
    WScript.Sleep 10000
    ficLog.WriteLine Now & " Etape 1 : suppression de xlsx"
     
    '///// Supprime l'ancienne feuile excel
    Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.FileExists(ExcelOutput) Then
     FSO.DeleteFile(ExcelOutput)
    End If
     
    '///// Ouvre le csv sous Excel
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    ficLog.WriteLine Now & " Etape 2" & CsvInput
     
    On Error Resume Next
    Set objfile = objFSO.GetFile(CsvInput)
    If Err.Number <> 0 Then	
    	ficLog.WriteLine Now & " Erreur  : " & CStr(Err.Number) & " " & Err.Description
    	WScript.Quit Err.Number
    end if
    On Error GoTo 0
     
     
    ficLog.WriteLine Now & " Etape 3 " & objFSO.GetAbsolutePathName(objFile)
     
    On Error Resume Next
    Set csvBook = XL.Workbooks.Open(objFSO.GetAbsolutePathName(objFile))
    If Err.Number <> 0 Then	
    	ficLog.WriteLine Now & " Erreur  : " & CStr(Err.Number) & " " & Err.Description
    	WScript.Quit Err.Number
    end if
    On Error GoTo 0
     
     
    ficLog.WriteLine Now & " Etape 4"
     
    On Error Resume Next
    csvBook.Sheets (1).Copy ,book.Sheets (1)
    If Err.Number <> 0 Then	
    	ficLog.WriteLine Now & " Erreur  : " & CStr(Err.Number) & " " & Err.Description
    	WScript.Quit Err.Number
    end if
    On Error GoTo 0
     
     
    ficLog.WriteLine Now & " Etape 5"
    csvBook.Close
    ficLog.WriteLine Now & " Etape 6"
     
    '///// Enregistre le csv sous format excel 
    book.Sheets (1).Delete
    ficLog.WriteLine Now & " Etape 7"
    book.SaveAs ExcelOutput
    book.Close
    XL.SheetsInNewWorkbook = 3
    XL.Quit
     
    '// réouvre le workbook pour revalider la colonne des PDS
     
     
    Dim Xlapp 'Excel
     Dim wb, feuille 'le classeur
     Set XlApp = CreateObject("Excel.application")
     XlApp.Visible = false
     Set Wb = XlApp.Workbooks.Open(ExcelOutput)
    Wb.Sheets(1).Range("G2:G65536").Value = Wb.Sheets(1).Range("G2:G65536").FormulaR1C1
     wb.close true 'ferme avec sauvegarde
     XlApp.quit 'quitte excel
     Set Wb = Nothing
     Set XlApp = Nothing
     
    '//////// Functions ////////
     
    Function DeleteFile(sFile, bForce)
      Dim oFso, iRet
      On Error Resume Next
      Set oFso = CreateObject("Scripting.FileSystemObject")
      oFso.DeleteFile sFile, bForce
      iRet = err=0
      Err.Clear
      On Error Goto 0
      Set oFso   = Nothing
      DeleteFile = iRet
    End Function

    A garder à l'esprit que ça fonctionne très bien sur un autre serveur avec ETL configuré sur adminservice. Seule différente étant que celui qui ne fonctionne pas est en windows 2012 R2 (avec un excel 2016) et celui qui fonctionne en Windows server 2003 (avec excel 2007).

    Après je suis peux être pas sur le bon forum et devrait aller plus du coté administration serveur.

    Merci d'avance pour votre aide.

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je ne peux pas apporter une solution pour la simple raison qu'on ne sait pas comment exactement le script est lancé dans l'ETL... (et si vous pouvez développer plus en détail sur ça). Mais, je peux dire vous devrez remettre le script plus au net par éliminer toutes les instances répétées et inutiles de scripting.filesystemobject en ne gardant qu'une ! Avec objFSO2, objFSO, fs, FSO ... , ça tourne en ridicule ! Une seule suffit.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Juste pour revenir sur le code. Il n'est pas de moi et effectivement je pense qu'il y aurait du ménage à faire.

    En fait l'ETL réussit à déclencher le vbs, mais celui ci s'arrête sur la ligne

    "set book = XL.workbooks.add"

    J'ai rajouté du log pour le voir.

    Je pensais que ça pouvait venir de la version d'excel, je suis donc passé en excel 2007 mais le problème persiste.

    Est ce que ça pourrait venir de windows 2012 qui bloquerait?

    Merci d'avance

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Lorsque je log l'erreur, j'ai

    Numéro d'erreur : 1004
    Mémoire insuffisante. Microsoft Office Excel ne peut plus ouvrir ou enregistrer de documents.

    • Pour augmenter la mémoire disponible, fermez les classeurs ou les programmes dont vous n'avez plus besoin.

    • Pour libérer de l'espace du disque sur lequel vous enregistrez, supprimez-en les fichiers dont vous n'avez plus besoin.

Discussions similaires

  1. Problème d'exécution du script via une règle
    Par d_dalcan dans le forum VBA Outlook
    Réponses: 23
    Dernier message: 03/02/2016, 16h30
  2. Exécution d un VBS via WinRS -> Problème!
    Par thibgrev dans le forum VBScript
    Réponses: 0
    Dernier message: 12/04/2011, 17h11
  3. exécuter un script vbs depuis asp
    Par creezeer dans le forum ASP
    Réponses: 1
    Dernier message: 20/03/2006, 16h36
  4. Problème d'exécution Acrobat et Word via IE
    Par licorne dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/11/2005, 12h17
  5. Problème d'exécution d'un ActiveX via un Javascript
    Par xjinh dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/10/2005, 14h08

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