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 :

Vbs Verification d'excel ouvert


Sujet :

VBScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 62
    Par défaut Vbs Verification d'excel ouvert
    Bonjour,

    Je souhaiterai verifier à l'aide d'un vbs si un fichier excel est ouvert.
    Si le fichier est ouvert alors une msgbox dis merci d'essayer plus tard
    sinon ouvrir le fichier. j'arrive pas a trouver comment on fait en vbs en vba sous excel je vois mais la je suis un peux pommé Si quelqu'un a une solucion je vous en remeci par avance.

    Merci

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Montre nous le code que tu as écrit en VBS.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 62
    Par défaut
    Ce code fonctionne bien pour l'ouverture d'un classeur mais pour la verification
    je vois pas comment faire j'ai bidouiller mais ca plante a chaque fois.J'ai l'impression que je me melange les pinceaux avec du vba et que ca passe pas

    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
    Const EXCEL_GUID = "Excel.Application" 
     
    ' Méthodes 
    Sub Main() 
     ' Excel objects 
     Dim wkb 
     
     ' Création d'une instance d'Excel 
     Set xls = CreateObject(EXCEL_GUID) 
     
     ' On ne l'affiche pas 
     'xls.Visible = True 
     
     ' Ajout d'un espace de travail (par défaut, Excel s'ouvre vide) 
     Set wkb = xls.Workbooks.Open("S:\Lala\Lala\mon classeur.xls") 
     xls.Run("start.start")
     
     ' On indique qu'on ferme l'espace de travail en enregistrant le document (une popup d'enregistrement apparaît) 
     wkb.Close(true) 
     
     ' On quitte Excel 
     xls.Quit 
     xls.Visible = True 
    End Sub 
     
    ' Démarrage du programme 
    Call Main()

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    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
    'Recupere une valeur dans un case d'un tabeau excel
    Function GetXlsValue(byref tableau, Nom_feuille, path) 'tableau = Le tableau contenant les coordonnés des cases à lire dans le fichier Excel.
                                                           'Nom_feuille = Le nom de la feuille du classeur Excel ou sont stockés les informations.
                                                           'path = Chemin complet du fichier Excel à ouvrir.
    On Error Resume Next
    Dim str_CaseXls 'Case Excel à lire.
    Dim str_CaseRecup 'Mise en forme du nom de la case pour l'objet Range
    Dim index 'Index de la boucle.
     
    'Ouverture du fichier Excel et récupération de l'objet correspondant à la feuille contenant les informations.
    Set obj_xls = CreateObject("Excel.Application")
    Set obj_File = obj_Xls.Workbooks.Open (path)
    Set Feuille = obj_File.Worksheets(Nom_feuille)
    index = 0
     
    'Récupération des informations pour chaque case spécifiée dans le tableau.
    Do While index <= Ubound(tableau)
       If tableau(index,0) <> "" Then
          str_CaseXls = tableau(index,0)
          str_CaseRecup = str_CaseXls & ":" & str_CaseXls
          tableau(index,1) = Feuille.Range(Str_CaseRecup).Value
       End If
       index = index + 1
    Loop
    obj_Xls.Workbooks.close
    Set obj_xls = Nothing
    Set obj_File = Nothing
    Set Feuille = Nothing
    If err.number <> 0 Then
       ErrorFile path, Err
    End If
    End Function
    C'est une fonction que j'utilisais pour lire une case d'un fichier excel, tu peut t'en inspirer pour voir comment on ouvre des workbooks et des feuilles en vbs.

    Ce qui m'embête avec ton code, c'est que tu essayes d'ouvrir un fichier excel alors que tu voulais savoir si le fichier est déjà ouvert.

    Regarde ces deux liens :
    http://www.mrexcel.com/board2/viewtopic.php?t=52146
    http://forums.microsoft.com/MSDN/Sho...36983&SiteID=1
    Le dernier te propose une solution avec du code VBS alors que l'autres c'est du VBA et il faut réadapter le code.
    En plus je préfère la solution du dernier lien .

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 62
    Par défaut
    Je pars de ce code comme base car si le fichier est pas ouvert ces se que je dois faire. Le dernier code verifie si un classeur exite mais si j'ai bien pigé il verifie qu'en local non ? Mon fichier se trouve sur le reseaux et plusieur personne peuvent l'ouvir. J'ai pense a une verification du mode d'ouverture si le fichier peux s'ouvrire en lecture et ecriture alors il est pas utilise et on peux l'ouvrire sinon on envoie un msgbox en disant qu'il est occupé de reesayer plus tard.

    Le truc ses comment savoir si l'excel est ouvert en ecriture ou pas, je trouve pas grand chose sur ca. Merci de ton aide vraiment sympa

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Ha ok, je viens de comprendre ton problème.
    Pour l'instant je pensais que le fichier etait ouvert sur le même excel.
    Mais en fait le fichier sera ouvert sur des excels différents.
    Tu veux empecher le travail simultané sur un même fichier.
    Je ne sais pas si excel bloque le fichier en écriture lorsqu'il ouvre celui-ci où s'il peut le faire, mais je ne pense pas.
    Regarde du coté des objets WMI.
    En utilisant l'objet CIM_DATAFILE tu devrais réussir à faire ce que tu souhaites.
    Tu as notemment cet argument : "datetime LastAccessed" qui pourrait t'interesser.
    Lorsque le fichier est ouvert je en sais pas si l'argument est mis à jour où si c'est effectué à la libération du fichier.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 62
    Par défaut
    Je vais passé par une autre approche je pense, lors de l'ouverture du classeur je cree un fichier toto a la fermeture je le detruit. Dans le script vbs je regarde si le fichier exite si il exite le classeur est ouvert alors msgbox je suis occupe sinon be je l'ouvre merci pour ton aide vraiment sympa

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    de rien, ton idée me parait simple, un peu moins propre, mais fonctionnelle et des fois c'est tout ce qui compte.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 62
    Par défaut
    Bonjour,

    Je reviens avec un probleme voici le script que j'ai crée:

    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
    Const EXCEL_GUID = "Excel.Application" 
     
    ' Méthodes 
    Sub Main() 
     
    Dim OFS, MonFichier, Result
    'crée la référence du dossier
    Set OFS = CreateObject("Scripting.FileSystemObject")
    'vérifie l'existance du fichier.
     
    	If OFS.FileExists("S:\lala\lili\Test\flag.txt") Then 
    		MsgBox ("Fichier Actuellement occupé, merci de réessayer plus tard. ")
    		'sup(false)
    		exit Sub
    	else
    		 ' Excel objects 
    		 Dim wkb 
    		 Dim FSys
    		 Dim MonFic 
     
    		 ' Création d'une instance d'Excel 
    		 Set xls = CreateObject(EXCEL_GUID) 
     
    		 ' On ne l'affiche pas 
    		 'xls.Visible = True 
     
    		 ' Ajout d'un espace de travail (par défaut, Excel s'ouvre vide) 
    		 Set wkb = xls.Workbooks.Open("S:\lala\lili\Test\Demande Support.xls") 
    		 Set FSys = CreateObject("Scripting.FileSystemObject")
    		 Set MonFic = FSys.CreateTextFile("S:\lala\lili\Test\flag.txt") 
    		 xls.Run("start.start")
     
    		 ' On indique qu'on ferme l'espace de travail en enregistrant le document (une popup d'enregistrement apparaît) 
    		 wkb.Close(true) 
     
    		 ' On quitte Excel 
     
    		xls.Quit 
    		xls.Visible = True
    		if sup() = true then
    			msgbox ("ok")
    			end if
    	End if
    End Sub 
    sub sup()
    		 Set objFSO = CreateObject("Scripting.FileSystemObject")
    		 objFSO.DeleteFile("S:\lala\lili\Test\flag.txt")
     
    End sub
    ' Démarrage du programme 
    Call Main()  
    Call sup()
    Se fichier fonctionne bien dans le cas ou le fichier crée n'existe pas dans le cas ou il existe il envoie bien la message box puis il execute le call sup() normal il est a la suite la il me met une erreur. Alors mon probleme ses que quand je met se qu'il y a dans sub sup() dans le Main() j'ai une erreur me disant que j'ai pas la permission. J'ai essayer plein de chose création d'une fonction, le sub etc ... et toujours pareil j'ai pas la permission. Quelqu'un aurais une idée de comment faire si le fichier est present alors afficher la msgbox("occupe") et tout finir sans faire le call sup().


    Je vous remerci de vos reponce.

  10. #10
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Quelqu'un aurais une idée de comment faire si le fichier est present alors afficher la msgbox("occupe") et tout finir sans faire le call sup().
    Tu ne veux plus supprimer ton fichier ?

    Je te conseille de faire un après la création du fichier. Je pense que tu ne peux pas supprimer le fichier parce que tu l'as ouvert et tu ne l'as pas fermer.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 62
    Par défaut
    Le script fonctionne bien. En faite il fait si le fichier existe pas il ouvre le main créer le fichier texte, ouvre le classeur on fait se qu'on a faire et on ferme, à la fermeture le ficher se supprime. Ses dans le cas ou une autre personne essaye d'executer le script alors le fichier flag exite donc il ouvre la msgbox en disant que le fichier est occupé et apres une erreur (Permission refusé) car il essaye de faire le sub sup() sauf que dans se cas il devrait pas le faire il devrait totalement finir le script. Je sais pas si tu vois se que je veux dire. J'ai essayer de virer la fonction sub sup et de mettre les ligne directement dans le main apres le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xls.Quit 
    xls.Visible = True
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    objFSO.DeleteFile("S:\lala\lili\Test\flag.txt")
    Mais pareil la même erreur(Permission refusé) dans les deux cas maintenant lors qu'il est pas utilise il ouvre le excel on fait se qu'on veux et l'erreur arrive a la fermeture de celui ci. Dans le deuxieme cas il arrive au meme moment apres la messagebox.

    Merci pour ton aide.

  12. #12
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Ha bah oui je viens de comprendre, il ne faut que le sub pour supprimer soit appelé constament il faut conditionner sont appels.
    Tu sais le vbs est un langage qui possède des choses commes les objets, les fonctions, et les procedures.
    A la place de ta sub fait donc un truc comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function sup()
    On Error Resume Next
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    objFSO.DeleteFile("S:\lala\lili\Test\flag.txt")
    If err.number <> 0 Then
       sup = false
    else
       sup = true
    End If
    End Function
    La cela devrait marcher.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 62
    Par défaut
    Petite question bebete :s comment on fait pour appeller la fonction dans le main :s afin qu'elle supprime le fichier, j'ai fais un sup() mais ca ma pas l'aire de fonctionner, en tout cas un grand merci pour ton aide, vraiment tres sympa

  14. #14
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Pour l'appel de ta fonction j'aurais fait :
    ou Si tu veux savoir si tu passes dans la fonction rajoute un msgbox dedans

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 62
    Par défaut
    Bon j'ai fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function sup() 
    	On Error Resume Next 
    		Set objFSO = CreateObject("Scripting.FileSystemObject") 
    		objFSO.DeleteFile("S:\IHM\PROD_QUALITY\Test\flag.txt")
    			msgbox (" debut")
    			If err.number <> 0 Then  
    				sup = false  
    				msgbox ("false")
    			else  
    				sup = true 
    				msgbox ("true")
    			End If 
    End Function
    Et quand je ferme mon excel ca me fait msgbox debut et msgbox false mais ca supprime plus le fichier txt.

  16. #16
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    as tu fait le :
    que je t'avais conseillé ?

  17. #17
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    enlève provisoirement le "On Error Resume Next " de la fonction Sub ... histoire de voir le message.. d'erreur... ou remplace le
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox "false : " & Err.Description

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 62
    Par défaut
    Merci pour votre aide precieuse boulet comme je suis j'avais oublier de fermer le fichier avec le

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] Test d'application excel ouverte
    Par Rayno1979 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/07/2009, 19h38
  2. Réponses: 1
    Dernier message: 14/06/2007, 15h21
  3. [VBA-E]Afficher les fichiers excel ouvert et leur onglets dispo pour les ouvrir
    Par anubisigfrid dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/03/2007, 22h52
  4. [VBA-Office]Détecter la directorie du fichier Excel ouvert
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/12/2006, 13h53
  5. déclenchement de Vérification de fichiers ouverts
    Par Nicko29 dans le forum Access
    Réponses: 14
    Dernier message: 09/09/2006, 10h21

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