comment fermer un fichier ouvert via vba ?

  • Initiateur de la discussion Initiateur de la discussion assniok
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

assniok

XLDnaute Occasionnel
Bonjour a tout le forum 🙂

j'ai besoin d'aide pour finaliser un bouton 😀

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
@+
 
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
 
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
 
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 ?
 
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
@+
 
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 ?
 
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...
 
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...
@+
 
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

@++
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
820
Réponses
5
Affichages
928
Retour