Macro Batch + Autoexec

Médéric -  
 Médéric -
Bonjour le forum,

J'aurais besoin d'un conseil sur la faisabilité de la chose suivante:

Est il possible de créer une macro qui me lance un batch, le batch lui lancerai un script shell (traitement sed - grep via CYGWIN sur Windows 8) ?

dit d'une autre façon: exécuté un script shell Cygwin via excel (j'ai pensé à autoexec ou autopen...) en passant par une tâche planifiée ou autres...

Un peu dans le style de ce topic:

http://www.commentcamarche.net/forum/affich-3907285-vba-lance-un-bat-qui-lance-un-init

Toutes autres manière de faire est la bienvenue.

Merci pour votre aide :)

ps: je sais c'est peut-être bizarre comme question ^_^

36 réponses

  • 1
  • 2
  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Une tache planifiee ira pour lancer le fichier batch (voir config tache planifiee)

    fichier batch: une ligne pour lancer le script.sh et une ligne pour lancer le fichier xlsm en programmant le depart du code vba a l'ouverture du fichier (thisworkbook, private sub workbook_open.

    faire des essais pour s'assurer que le script.sh soit fini avant de lancer excel
    (autrement il y a des solutions pour controler une fin de process)
    1
  2. Médéric
     
    Re,

    j'ai créé une macro, avant que tu répondes, qui lance un batch avec ça dedans:

    @ echo off
    
    C:
    chdir c:\cygwin\bin
    bash --login -i c:\cygwin\bin\script_sed.sh


    et ce batch lance mon script linux :)

    autoexec ou autopen ne sont plus utilisé sous 2010 ?
    1
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    autoexec ou autopen ne sont plus utilisé sous 2010 ? Peut-etre mais je vous ai parle du VBA dans ThisWorkbook.

    Ouvrez la fenetre VBA

    Double click sur ThisWorkBook

    fenetre de droite: liste de choix Declaration---->Workbook

    et vous avez la macro qui se lance a l'ouverture du classeur(WorkBook)

    Private Sub Workbook_Open()

    End Sub

    A+
    1
  4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Test: colonne A--->il y a deux espaces devant et pas sur fcidfinal colonne E et feuil1 colonne A

    ci-joint votre fichier precedent avec explication pour ordre de colonnes

    https://www.cjoint.com/?CBil7Pl8fOw

    bon courage
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Si donnees coherantes: avec une adaptation possible suivant ces donnees

    un exemple de code de recherche:

    ' Ecriture numero appele dans test colonne F
    '
      '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
      'r = Cells(65536, 1).End(xlUp).Row 'recuperation de la derniere cellule non vide de la colonne A excel 2003
      'r2 = Cells(65536, 2).End(xlUp).Row 'recuperation de la derniere cellule non vide de la colonne B excel 2003
      '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    Sub Cherche()
         Dim derlig, derlig1, NbId, plage As Range, plage1 As Range, cel As Range, cel1 As Range
         Dim val, val1, Idx
      
      
         With Worksheets("fcidfinal")
             'derniere ligne fcifinal colonne A
            derlig = .Range("A" & Rows.Count).End(xlUp).Row
             'derniere ligne test colonne A
            derlig1 = Worksheets("test").Range("A" & Rows.Count).End(xlUp).Row
            'Definition en memoire plage de recherche fcidfinal
            Set plage = .Range("E2:E" & derlig)
            'Definition en memoire plage de recherche test
            Set plage1 = Worksheets("test").Range("A2:A" & derlig)
        
            For Each cel In plage 'balayage fcidfinal de la colonne A
                val = cel
                'test si existe dans plage feuil test
                NbId = Application.CountIf(plage1, val)
                'Existe??
                If NbId > 0 Then
                     ligtest = 1
                    With Worksheets("test")
                        For Idx = 1 To NbId
                            'Recherche valeur exacte
                            ligtest = .Columns("A").Find(val, .Cells(ligtest, "A"), , xlWhole).Row
                            'Ecriture temps connex fcidfinal colonne D vers test colonne F
                            .Cells(ligtest, 6) = Worksheets("fcidfinal").Cells(cel.Row, 4)
                        Next Idx
                    End With
                 End If     'NbId
            Next cel
        End With        'fcidfinal
    End Sub


    Si cela est posible, il faudrait vous entretenir avec la personne qui gere l'ustensil qui genere votre fichier de donnees, car il y a des "anormalites" surprenantes et peut-etre que ce fichier est parametrable. Ca vous aiderait beaucoup.

    A+

    A+
    1
  7. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,
    Doit tourner tous les jours a une heure donnee (tache planifiee)
    Pourquoi passer par excel
    0
  8. Médéric
     
    Bonjour f894009,

    tourner à une heure donnée je sais pas si ça se fera....

    mais le but et de lancer un traitement (sed-grep) Cygwin sur un fichier de log.csv par le biais d'excel (pour ne garder que les info utiles du fichier de log).

    Hors lancé un script shell linux via excel (je ne pense pas que ce soit possible: sed ne serait pas compris par la CMD DOS.... normal en même temps).

    le seul moyen auquel j'ai pensé, c'est donc de me créer un batch qui lancera mon script.sh (script.sh traité par cygwin)

    en 2: faire par bouton, le calcul du temps d'appel (la ou tu m'as aidé sur ce post: http://www.commentcamarche.net/forum/affich-27070689-macro-calcul-horaires-excel-2010)

    j'espère avoir été clair dans mon explication ^_^

    Merciii !!
    0
  9. Médéric
     
    je n'ai pas encore testé votre solution, mais Workbook_Open() ne fait pas la même chose que autopen ?

    autre question:

    Je cherche a faire une RECHERCHEV sur mon classeur (celui du calcul_temps_appel), qui me cherche dans la feuille FCIDFINAL le numéro "appelé" correspondant a l'ID dans la feuille TEST.
    le résultat étant affiché a coté de la colonne TEMPS APPEL (feuille test)

    j'ai essayé cela mais ça me retourne #N/A (Inconnu avec mon test):

    =SIERREUR(RECHERCHEV($G$2;TEST;3;FAUX);"Inconnu")

    Ps:
    $G$2:118392375E2111E2A15E88ACAC9C4D59
    TEST est la plage de données $A$2:$E$20 du la feuille FCIDFINAL

    Merki :D
    0
  10. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    je n'ai pas encore testé votre solution, mais Workbook_Open() ne fait pas la même chose que autopen ? Si

    Pour la formule: sauf erreur de ma part, il faut inverser les colonnes: la colonne ou vous cherchez une valeur doit etre la premiere.

    A+
    0
  11. Médéric
     
    Bonjour,

    j'ai mis ceci en F2.test:
    =RECHERCHEV($A$2;TEST;3;FAUX)


    $A$2: cellule de la première colonne (de ma feuille1: TEST)
    TEST: Plage de données de ma Feuille2: FCIDFINAL
    3: index colonne de la feuille 2
    Faux: valeur exacte

    mais toujours la même erreur :/

    Merci ! @+
    0
  12. Médéric
     
    Bonjour,

    merci pour le fichier :)

    comment avez-vous fait pour enlever les espaces sur toute la colonne A de TEST

    fonction SUPPRESPACE, non ? car moi quand je l'applique sur mon fichier de base, en A2, j'ai le résultat: 0,00E+00. et un message d'erreur parlant de "référence circulaire".

    Autre chose: Est-il possible de créer une macro qui boucle sur une RECHERCHEV (dans une nouvelle feuille), sur chaque ID de FEUIL1 (de votre fichier), pour m'afficher tous les appels de chaque ID ?

    du style:

    ID: 118392375E2111E2A15E88ACAC9C4D59

    N°Appelant N° Appelé Temps Appel:
    203 231 00:00:07
    000 00001 00:00:22
    ... .... ....

    avoir un historique des appels passés par ID d'appel.

    Merci du temps accordé !
    0
  13. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    comment avez-vous fait pour enlever les espaces sur toute la colonne A de TEST "Facile" avec Donnees, outil de donnees, convertir et colonne non distribuee (tout ceci est faisable par macro)

    Autre chose: Il faudrait prevoir un onglet par Id et pas besoin d'enlever les espaces colonne Id puisque ce sera du VBA.

    A+
    0
  14. Médéric
     
    re,

    c'est vrai que dit comme ça c'est facile ......... ^^

    Autre chose: Il faudrait prévoir un onglet par Id

    Le problème c'est que ce fichier sera exploité chaque jours, et que les ID sont générés aléatoirement; je ne les connais pas à l'avance. De plus, il pourrait y avoir des centaines d'onglets (lenteur du traitement par excel, non ?)

    Merci !
    0
  15. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    que les ID sont générés aléatoirement; je ne les connais pas à l'avance. Comment allez-vous faire pour coller un "nom" si c'est vraiment aleatoire (Id different pour un meme nom)

    A+
    0
  16. Médéric
     
    grâce au numéro d'appelant (source)

    ce qu'il me faut c'est réunir certaines données des feuilles TEST et FCIDFINAL pour en extraire les infos intéressantes.

    N° source + N° Destination + Temps d'appel

    L'ID est mon seul moyen pour identifier les données correspondantes entre les 2 feuilles.

    A moins qu'il y est une façon plus simple de faire cela....
    0
  17. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Serait-il possible d'avoir le du fichier source de vos infos????

    A+
    0
  18. Médéric
     
    Re,

    c'est quelque peu indigeste a lire sans traitement ...

    http://cjoint.com/?3BloaPMzQr3

    merci !
    0
  19. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,
    J'ai recupere le fichier, je regarde la chose.

    A+
    0
  20. Médéric
     
    Re,

    ça marche !

    bon courage pour la "lecture"....

    ++
    0
  • 1
  • 2