Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : controle fichier excel ouvert [ Divers / General ] (marcod59)

vendredi 6 avril 2007 à 17:53:56 | controle fichier excel ouvert

marcod59

Bonjour,

Comment contrôler si un fichier donné excel est ouvert. Je voudrais faire un test pour voir si le fichier en question est ouvert afin de ne pas faire le code s'il est ouvert.

Merci d'avance et bonne prog
@+++
marcod59

vendredi 6 avril 2007 à 20:51:12 | Re : controle fichier excel ouvert

mortalino

Membre Club


Salut,

utilise mon snippet, il est fait pour :


Private Const OF_SHARE_EXCLUSIVE = &H10
Private Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As StringByVal iReadWrite As Long) As Long
Private Declare Function lclose Lib "kernel32" Alias "_lclose" (ByVal hFile As LongAs Long
Function OpenDocXlsFile(FileToOpen As String) As Long
'   retourne  :
'   -1  -> erreur
'   0   -> fichier déjà ouvert, ouverture en lecture  seule
'   1   -> ouverture première  instance
    OpenDocXlsFile = -1
    
    Dim sExt        As String
    Dim NomAppli    As String
'   type de fichier  par son extension
    If LenB(FileToOpen) < 16 Then
        Exit Function
    Else
        sExt = LCase$(RightB$(FileToOpen, 8))
        If sExt = ".doc" Or sExt = ".rtf" Then
            NomAppli = "Word"
        ElseIf sExt = ".xls" Or sExt = ".csv" Then
            NomAppli = "Excel"
        Else
            Exit Function
        End If
    End If
'   ouverture  office
    Dim MonApp      As Object
    Dim MonDoc      As Object
    Dim hFile       As Long
    
    hFile = lopen(FileToOpen, OF_SHARE_EXCLUSIVE)
    If hFile <> -1 Then 'pas ouvert
        lclose (hFile)
        Set MonApp = CreateObject(NomAppli & ".Application")
        If NomAppli = "Word" Then
            Set MonDoc = MonApp.Documents.Open(FileToOpen)
        Else
            Set MonDoc = MonApp.Workbooks.Open(FileToOpen)
        End If
        OpenDocXlsFile = 1
    ElseIf (hFile = -1And (Err.LastDllError = 32) Then 'déjà ouvert
        lclose (hFile)
        Set MonApp = CreateObject(NomAppli & ".Application")
        If NomAppli = "Word" Then
            On Local Error Resume Next
            Set MonDoc = MonApp.Documents.Open(FileToOpen, , True)
            If Err.Number = 4198 Then
'               word 2000, utilisateur fait  ANNULER
                Err.Clear
                GoTo Lbl_Exit
            End If
            On Error GoTo 0
        Else
            Set MonDoc = MonApp.Workbooks.Open(FileToOpen, , True)
        End If
        OpenDocXlsFile = 0
    End If
    MonApp.Visible = True
    
Lbl_Exit:
    Set MonDoc = Nothing
    Set MonApp = Nothing
End Function

'    EXEMPLE
Private Sub Form_Load()
    Debug.Print "Word : " & OpenDocXlsFile("C:\Nouveau  Document Microsoft Word.doc")
    Debug.Print "Excel : " & OpenDocXlsFile("C:\test.xls")
    
    Unload Me
End Sub

~ Mortalino ~ Colorisation automatique

@++


  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>

vendredi 6 avril 2007 à 23:36:58 | Re : controle fichier excel ouvert

MPi

Tu travailles à partir d'Excel (VBA) ou de VB ou autre ?

Si tu travailles sous Excel, il y a la "collection" Windows qui te donne le nom de tous les fichiers qui sont ouverts dans la session. Équivalent à aller dans le menu Fenêtre et regarder ce qui s'y trouve.

MPi

samedi 7 avril 2007 à 09:31:17 | Re : controle fichier excel ouvert

marcod59

Salut Mortalino et MPI,

Premièrement, merci d'avoir répondu, ensuite.
Pour répondre à MPI, je travail en VB.
Pour Mortalino, j'ai un petit souci avec ton code. Tout d'abord, je l'ai mis dans un module, ensuite je l'ai inclus dans mon code de cette façon :

Private Sub Cmdexcel_Click()
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim XlSheet As Excel.Worksheet
    Dim b, l As Integer

    Set xlApp = New Excel.Application
    Set xlBook = xlApp.Workbooks.Add
    Set XlSheet = xlBook.Worksheets(1)
    '' désactive les messages d'Excel
    xlApp.Application.DisplayAlerts = False

If OpenDocXlsFile(App.Path & "\relevé.xls") = 0 Then
    msg = MsgBox("Veuillez fermer le fichier relevé.xls" & Chr(10) & "pour pouvoir récupérer les données", vbCritical)
    GoTo fin
End If
' Ouvre le fichier
    xlApp.Workbooks.Open FileName:=App.Path & "\relevé.xls", Editable:=True, ReadOnly:=False
b = Lstview1.ListItems.Count
For a = 1 To b
            l = xlApp.Sheets("donnees").Range("A65536").End(xlUp).row + 1
        Set ObjListe = Nothing
        Set ObjListe = Lstview1.ListItems(a)
            xlApp.Sheets("donnees").Range("A" & l).Value = Lstview1.ListItems.Item(1)
            xlApp.Sheets("donnees").Range("B" & l).Value = ObjListe.SubItems(1)
            xlApp.Sheets("donnees").Range("C" & l).Value = ObjListe.SubItems(2)
            xlApp.Sheets("donnees").Range("D" & l).Value = ObjListe.SubItems(3)
            xlApp.Sheets("donnees").Range("E" & l).Value = ObjListe.SubItems(4)
            xlApp.Sheets("donnees").Range("F" & l).Value = ObjListe.SubItems(5)
            xlApp.Sheets("donnees").Range("G" & l).Value = ObjListe.SubItems(6)
            xlApp.Sheets("donnees").Range("H" & l).Value = ObjListe.SubItems(7)
            xlApp.Sheets("donnees").Range("I" & l).Value = ObjListe.SubItems(8)
            xlApp.Sheets("donnees").Range("J" & l).Value = ObjListe.SubItems(9)
            xlApp.Sheets("donnees").Range("K" & l).Value = ObjListe.SubItems(10)
            xlApp.Sheets("donnees").Range("L" & l).Value = ObjListe.SubItems(11)
            xlApp.Sheets("donnees").Range("M" & l).Value = ObjListe.SubItems(12)
Next a
fin:
    xlApp.ActiveWorkbook.Save
    xlApp.Application.DisplayAlerts = True
    xlBook.Close
    xlApp.Quit
    Set xlApp = Nothing
    Set xlBook = Nothing
    Set XlSheet = Nothing
End Sub

Le problème, et qu'il m'ouvre à chaque fois un fichier excel et que dans tous les cas, je n'arrive pas à enregistrer les données.
Je pense que je n'utilise pas ton code correctement. Peux-tu me mettre sur le bon rail. Merci

Joyeuses Pâques à vous
@+++
marcod59


samedi 7 avril 2007 à 15:03:46 | Re : controle fichier excel ouvert

MPi

Réponse acceptée !
Je viens de faire le test sous VB6 et ce code affiche bien tous les classeurs déjà ouverts

    Dim Fenetre As Window
    For Each Fenetre In Windows
        MsgBox Fenetre.Caption
    Next

Ça n'affichera pas le chemin complet, par contre.

MPi

samedi 7 avril 2007 à 16:40:31 | Re : controle fichier excel ouvert

marcod59

Merci MPI, c'est justement ce que je cherchais. Juste le nom du fichier afin de faire le test car s'il est ouvert je ne peux rentrer les données. Donc en faisant un test avant, je le signale pour qu'il soit fermé.

Joyeuses Pâques
@+++
marcod59

samedi 7 avril 2007 à 20:51:38 | Re : controle fichier excel ouvert

MPi

Attention toutefois ...
Le fichier pourrait être ouvert dans une autre session d'Excel.
À ce moment-là, il ne serait pas dans la liste, je pense (?)
Tu pourrais toujours ajouter une gestion d'erreur.


MPi



Cette discussion est classé dans : fichier, excel, controle, ouvert


Répondre à ce message

Sujets en rapport avec ce message

Listbox dans 1 fichier excel avec sources d'un autre fichier excel pas obligatoirement ouvert [ par FRLELIEVRE ] Bonjour à vous les bons en informatique !Je suis tout nouveau ici et dans la programmation, et pour tout vous dire.....je rame !!! je vous explique mo Activer fichier excel - Transferer variable de macro Word à macro Excel [ par didieraucun ] Bonsoir à tous,  A partir d'un document Word, je souhaites récupérer certaines valeurs d'un tableau pour les transférer automatiquement dans un fichie Connaitre l'adresse IP de l'ordinateur sur lequel un fichier Excel est ouvert [ par Mi444 ] BonjourLorsque je souhaite ouvrir un fichier Excel qui est déjà ouvert sur un autre poste de l'entreprise, Excel me l'ouvre en lecture seule en me sig Connexion a partir d'un fichier excel ouvert a un fichier excel fermer [ par h_adil ] Bonsoir,je voudrai savoir comment on peut se connecter à partir d'un fichier excel ouvert à un ficher excel fermer puis de recuperer des informations Détection si excel est déjà ouvert [ par MarieNoob ] Bonjour tout le monde,Voici mon petit problème, lors du lancement de mon application en VBA je cache excel pour utiliser seulement les Userform avec c problèmes avec plusieurs utiliateurs pour un fichier excel en réseau [ par adri37 ] Bonjour,J'ai développer une base de données en Excel VBA que j'ai mise en réseau (sur un disque dur commun).Le problème est que lorsque le fichier est connaitre l'emplacement d'un fichier Excel ouvert [ par dvdnet ] Bonjour, un truc certainement tout con, mais que je n'arrive pas à faire ;-)Je voudrais juste récupérer dans une variable en VBA le chemin du dossier connaitre l'emplacement d'un fichier Excel ouvert [ par dvdnet ] Bonjour, un truc certainement tout con, mais que je n'arrive pas à faire ;-)Je voudrais juste récupérer dans une variable en VBA le chemin du dossier importer bloc d'un fichier Excel fermé vers un autre ouvert [ par thierrypp ] THIERRYPPBonjour,Pourriez-vous m'indiquer comment importer du fichier Excel C:\book1.xls le bloc E4:F43vers le fichier Excel ouvert en cours de trait


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,530 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.