begin process at 2012 02 16 10:30:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Divers

 > 

General

 > 

controle fichier excel ouvert


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

controle fichier excel ouvert

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ée dans : fichier, excel, controle, ouvert


Répondre à ce message

Sujets en rapport avec ce message

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 Controle OLE Excel [ par cmaisse ] Bonjour à tous,J'ai un petit souci, j'ai créer un objet permettant d'ouvrir un fichier excel mais je ne sais pas comment récupérer le nom des différen savoir si un fichier excel est ouvert depuis access [ par annelise ] bonjour, j'ai besoin d'exporter des données d'access vers Excel, le probleme est que si mon fichier excel est ouvert, ça ne marche pas, comment faire savoir si un fichier excel est ouvert et le fermer si c'est le cas [ par skunkbedo ] Salut tout le monde! Je vsuis en train de développer une application en VB qui utilise Excel. L'application permet d'ouvrir, de modifier et d'enregist reconnaissance ouverture fichier excel [ par davidouz ] davidouzLUT, j'aimerais savoir comment on peux vérifier si un fichier excel est ouvert ou non, afin de l'ouvrir si il ne l'est pas, et d'ouvrir sa fen URGENT........Savoir si un fichier est ouvert ou non ??? [ par thebox ] Bonjour à tous et toutes,J'ai un bouton sur un formulaire Access 2000 et quand je clique dessus, ca m'ouvre un fichier Excel déjà existant. Mon problè Test si Fichier Excel ouvert [ par syl2 ] Bonjour à tous,je suis en train de réaliser une application VBA Access qui consiste à extraire des données de ma base pour générer des tableaux dynami Excel reste ouvert... [ par rackne ] Bonjour, j'ai fait une appli en VB6 qui manipule des fichiers xls (que du bonheur)En gros à l'aide d'une common dialog je recupère un nom de fichier,


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,540 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales