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