comment fermer un fichier ouvert via vba ?

assniok

XLDnaute Occasionnel
Bonjour a tout le forum :)

j'ai besoin d'aide pour finaliser un bouton :D

Donc j'ai ce bouton qui me permet d'ouvrir un fichier excel a partir de mon fichier principal, de copier des données de ce fichier dans le presse papier puis de les coller dans mon fichier principal.

ce que je n'arrive pas a faire, c'est de refermer le fichier ouvert de façon a n'avoir que mon fichier principal d'ouvert...

Code:
Private Sub Bouton2_Click()
With Me.Listbox1
    For i = 0 To Me.Listbox1.ListCount - 1
        If .Selected(i) Then
        On Error Resume Next
            Workbooks.Open (path & .List(i))
    DerligneI = Range("I65536").End(xlUp).Row
    Range("H2:I" & DerligneI).Select
    Selection.Copy
    Windows("monfichier.xls").Activate
    Sheets("Test").Select
    Range("H2").Select
    ActiveSheet.Paste
            If Err <> 0 Then
                MsgBox "ça ne sert a rien d'ouvrir deux fois le même fichier !"
                On Error GoTo 0
            End If
        End If
    Next i
End With
End Sub

Par la meme occasion, si vous voyez des erreurs ou des simplifications de mon code, etant novice, je suis preneur ;)

Merci de votre aide
@+
 

bérylion

XLDnaute Occasionnel
Re : comment fermer un fichier ouvert via vba ?

Salut

non testé :

Code:
Private Sub Bouton2_Click()
With Me.Listbox1
    For i = 0 To Me.Listbox1.ListCount - 1
        If .Selected(i) Then
        On Error Resume Next
            Workbooks.Open (path & .List(i))
    DerligneI = Range("I65536").End(xlUp).Row
    Range("H2:I" & DerligneI).Select
    Selection.Copy
    Windows("monfichier.xls").Activate
    Sheets("Test").Select
    Range("H2").Select
    ActiveSheet.Paste
            If Err <> 0 Then
                MsgBox "ça ne sert a rien d'ouvrir deux fois le même fichier !"
                On Error GoTo 0
            End If
        End If
        [B][I][COLOR="Red"]Workbooks(Path & .List(i)).Close False[/COLOR][/I][/B]
    Next i
End With
End Sub
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : comment fermer un fichier ouvert via vba ?

Bonjour

un essai en rajoutant les 2 lignes en marron

Code:
Private Sub Bouton2_Click()
With Me.Listbox1
    For i = 0 To Me.Listbox1.ListCount - 1
        If .Selected(i) Then
        On Error Resume Next
            Workbooks.Open (path & .List(i))
[COLOR=DarkRed]monfichier = activeworkbook[/COLOR]
    DerligneI = Range("I65536").End(xlUp).Row
    Range("H2:I" & DerligneI).Select
    Selection.Copy
    Windows("monfichier.xls").Activate
    Sheets("Test").Select
    Range("H2").Select
    ActiveSheet.Paste
            If Err <> 0 Then
                MsgBox "ça ne sert a rien d'ouvrir deux fois le même fichier !"
                On Error GoTo 0
            End If
        End If
[COLOR=DarkRed]workbooks(monfichier).close false[/COLOR]
    Next i
End With
End Sub
 

assniok

XLDnaute Occasionnel
Re : comment fermer un fichier ouvert via vba ?

ça ne marche pas non plus, cependant le nom de mon fichier excel est plutot du type "mon fichier.xls"

du coup, a cause de l'espace dans le nom de fichier ça plante... enfin, je suppose que c'est a cause de l'espace...

mon pb est que je ne peux pas modifier le nom de mon fichier car ça me ferais changer beaucoup de chose... deja que je galere...

existe-t-il une autre solution ?
 

Pierrot93

XLDnaute Barbatruc
Re : comment fermer un fichier ouvert via vba ?

Bonjour à tous

peut être ainsi :

Code:
Private Sub Bouton2_Click()
[COLOR="SandyBrown"][B]dim monfichier as  Workbook[/B][/COLOR]
With Me.Listbox1
    For i = 0 To Me.Listbox1.ListCount - 1
        If .Selected(i) Then
        On Error Resume Next
            Workbooks.Open (path & .List(i))
[B][COLOR="sandybrown"]set monfichier = activeworkbook[/COLOR][/B]
    DerligneI = Range("I65536").End(xlUp).Row
    Range("H2:I" & DerligneI).Select
    Selection.Copy
    Windows("monfichier.xls").Activate
    Sheets("Test").Select
    Range("H2").Select
    ActiveSheet.Paste
            If Err <> 0 Then
                MsgBox "ça ne sert a rien d'ouvrir deux fois le même fichier !"
                On Error GoTo 0
            End If
        End If
[COLOR="sandybrown"][B]monfichier.close false[/B][/COLOR]
    Next i
End With
End Sub

bonne soirée
@+
 

assniok

XLDnaute Occasionnel
Re : comment fermer un fichier ouvert via vba ?

@ Pascal

en effet c'est bien ce que je pensais au depart, mais lorsque j'ai vu que ça ne fonctionnait pas, j'en ai deduit qu'il fallait utiliser mon nom de fichier...

Mais ta solution m'interesse car c'est celle que j'avais envisagé au depart mais sans y arriver....

As tu une idée de pourquoi ça ne fonctionne pas ?
 

Pierrot93

XLDnaute Barbatruc
Re : comment fermer un fichier ouvert via vba ?

Re

dans ton code tu utilises "path" :

Code:
Workbooks.Open (path & .List(i))

Sauf erreur de ma part, "path" tout seul ne peut rien renvoyer... essaye peut être :

Code:
Workbooks.Open (ThisWorkBook.path & .List(i))

a voir...
 

assniok

XLDnaute Occasionnel
Re : comment fermer un fichier ouvert via vba ?

Re

dans ton code tu utilises "path" :

Code:
Workbooks.Open (path & .List(i))

Sauf erreur de ma part, "path" tout seul ne peut rien renvoyer... essaye peut être :

Code:
Workbooks.Open (ThisWorkBook.path & .List(i))

a voir...

ça ne change rien, ni dans un sens ni dans un autre... en fait, dans les deux cas, mon appli marche toujours comme avant... et le pb du fichier non fermé subsiste....

@ Paritec, avec ThisWorkBook.close, bah ça me ferme le classeur que je souhaite garder ouvert :(

je ne comprends pas pourquoi ça ne marche pas...
@+
 

assniok

XLDnaute Occasionnel
Re : comment fermer un fichier ouvert via vba ?

j'avais utilisé cette macro qui marchait pas mal...

est il possible d'utiliser ce genre de chose ?
Code:
For Each w In Workbooks
    If w.Name <> ThisWorkbook.Name Then
    w.Close SaveChanges:=False
    End If
Next w
End Sub

@++
 

PMO2

XLDnaute Accro
Re : comment fermer un fichier ouvert via vba ?

Bonjour,

Une autre démarche avec le code suivant qui remplacerait
le votre dans la mesure où vous le trouveriez mieux ??

Code:
Private Sub Bouton2_Click()
Dim Path As String
Dim i As Long
Dim WBactif As Workbook
Dim WB As Workbook
Dim S As Worksheet
Dim A$
Dim DerligneI As Long

Path = "c:\"  'à adapter
Set WBactif = ActiveWorkbook
With Me.ListBox1
  For i = 0 To Me.ListBox1.ListCount - 1
    If .Selected(i) Then
      A$ = .List(i)
      If LCase(Right(A$, 4)) <> ".xls" Then
        A$ = A$ & ".xls"
      End If
      Set WB = GetObject(Path & A$)
      Set S = WB.Sheets(1) 'première feuille (à adapter ???)
      DerligneI = S.Range("I65536").End(xlUp).Row
      S.Range("H2:I" & DerligneI).Copy
      WBactif.Sheets("Test").Paste Destination:=WBactif.Sheets("Test").Range("h2")
      WB.Close
      Set WB = Nothing
    End If
  Next i
End With
End Sub


Cordialement.

PMO
Patrick Morange
 
Haut Bas