Controle fichier excel ouvert [Résolu]

marcod59 170 Messages postés vendredi 16 janvier 2004Date d'inscription 13 juin 2010 Dernière intervention - 6 avril 2007 à 17:53 - Dernière réponse : cs_MPi 3877 Messages postés mardi 19 mars 2002Date d'inscription 23 août 2018 Dernière intervention
- 7 avril 2007 à 20:51
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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cs_MPi 3877 Messages postés mardi 19 mars 2002Date d'inscription 23 août 2018 Dernière intervention - 7 avril 2007 à 15:03
3
Merci
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

Merci cs_MPi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de cs_MPi
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 6 avril 2007 à 20:51
0
Merci
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 String, ByVal iReadWrite As Long) As Long
Private Declare Function lclose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As 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 = -1) And (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

~ <small> Mortalino ~ Colorisation automatique </small>

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Commenter la réponse de mortalino
cs_MPi 3877 Messages postés mardi 19 mars 2002Date d'inscription 23 août 2018 Dernière intervention - 6 avril 2007 à 23:36
0
Merci
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
Commenter la réponse de cs_MPi
marcod59 170 Messages postés vendredi 16 janvier 2004Date d'inscription 13 juin 2010 Dernière intervention - 7 avril 2007 à 09:31
0
Merci
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
Commenter la réponse de marcod59
marcod59 170 Messages postés vendredi 16 janvier 2004Date d'inscription 13 juin 2010 Dernière intervention - 7 avril 2007 à 16:40
0
Merci
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
Commenter la réponse de marcod59
cs_MPi 3877 Messages postés mardi 19 mars 2002Date d'inscription 23 août 2018 Dernière intervention - 7 avril 2007 à 20:51
0
Merci
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
Commenter la réponse de cs_MPi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.