OVH Cloud OVH Cloud

problème de fermeture d'un classeur

5 réponses
Avatar
bob
Bonjour,

j'ai un problème pour fermer un classeur à l'aide de VBA

Voilà mon code
****************************************************************************
*****
fichier_source = Application.GetOpenFilename(filefilter:="Classeur Excel
(*.xls),*.xls", filterindex:=2, _
Title:="Fichier source pour l'import", MultiSelect:=False)

' on teste si le classeur est déjà ouvert
If IsFileOpen(fichier_source) Then
MsgBox "Le classeur demandé est en cours d'utilisation"
Else
MsgBox "Le classeur demandé n'est pas encoure ouvert"
Workbooks.Open fichier_source
ThisWorkbook.Activate

End If
.......
' A la fin on ferme le classeur source
MsgBox "on ferme le classeur source : " & fichier_source

Workbooks(fichier_source).Close SaveChanges:=False
****************************************************************************
******

En fait l'ouverture d'un classeur se fait correctement, mais la dernière
partie ne marche (fermeture du classeur ouvert).

J'ai un message "l'indice n'appartient à la sélection" et c'est le bout de
code
Workbooks(fichier_source).Close SaveChanges:=False
quui est incriminé.

Quelqu'un aurait-il une idée?

Merci d'avance et bonne année !

5 réponses

Avatar
John Fuss
ta variable fichier_source contient le chemin, Excel n'en veux pas via
Workbooks() donc il faut t'en debarassé, je regarde si j'ai encore ma
fonction.....


Public Enum FileInfo 'Constantes pour spécifier les infos à obtenir d'un nom
de fichier
Chemin = 0
Nom = 1
Extension = 2
NomComplet = 3
End Enum

Public Function GetFileInfo(fichier As String, InfoNeeded As FileInfo,
Optional AvecSlash As Boolean = True) As String
Dim poz As Integer, ext As String, name As String, Path As String
Dim i As Integer
On Error Resume Next

ext = ""
For i = Len(fichier) To 1 Step -1
If Mid(fichier, i, 1) = "." And ext = "" Then
poz = i
ext = Right(fichier, Len(fichier) - i)
ElseIf Mid(fichier, i, 1) = "" Then
name = Mid(fichier, i + 1, Len(fichier) - i - Len(ext) - 1)
If AvecSlash Then
Path = Left(fichier, i)
Else
Path = Left(fichier, i - 1)
End If
Exit For
End If
Next
If name = "" Then name = Left(fichier, Len(fichier) - Len(ext) - 1)
Select Case InfoNeeded
Case Chemin
GetFileInfo = Path
Case Nom
GetFileInfo = name
Case Extension
GetFileInfo = ext
Case NomComplet
GetFileInfo = name & "." & ext
End Select
End Function

Voili-voilou

John



"bob" a écrit dans le message de
news:bsuc9g$ldv$
Bonjour,

j'ai un problème pour fermer un classeur à l'aide de VBA

Voilà mon code

****************************************************************************

*****
fichier_source = Application.GetOpenFilename(filefilter:="Classeur Excel
(*.xls),*.xls", filterindex:=2, _
Title:="Fichier source pour l'import", MultiSelect:úlse)

' on teste si le classeur est déjà ouvert
If IsFileOpen(fichier_source) Then
MsgBox "Le classeur demandé est en cours d'utilisation"
Else
MsgBox "Le classeur demandé n'est pas encoure ouvert"
Workbooks.Open fichier_source
ThisWorkbook.Activate

End If
.......
' A la fin on ferme le classeur source
MsgBox "on ferme le classeur source : " & fichier_source

Workbooks(fichier_source).Close SaveChanges:úlse

****************************************************************************

******

En fait l'ouverture d'un classeur se fait correctement, mais la dernière
partie ne marche (fermeture du classeur ouvert).

J'ai un message "l'indice n'appartient à la sélection" et c'est le bout de
code
Workbooks(fichier_source).Close SaveChanges:úlse
quui est incriminé.

Quelqu'un aurait-il une idée?

Merci d'avance et bonne année !




Avatar
bob
Merci de ta réponse, mais je ne comprends pas tout.
Question bête, comment tu l'utilise cette fonction?
Aurais tu un exemple d'application? (plus particulièrement avec la méthode
close de Workbooks)

"John Fuss" a écrit dans le message news:
bsucjm$ljh$
ta variable fichier_source contient le chemin, Excel n'en veux pas via
Workbooks() donc il faut t'en debarassé, je regarde si j'ai encore ma
fonction.....


Public Enum FileInfo 'Constantes pour spécifier les infos à obtenir d'un
nom

de fichier
Chemin = 0
Nom = 1
Extension = 2
NomComplet = 3
End Enum

Public Function GetFileInfo(fichier As String, InfoNeeded As FileInfo,
Optional AvecSlash As Boolean = True) As String
Dim poz As Integer, ext As String, name As String, Path As String
Dim i As Integer
On Error Resume Next

ext = ""
For i = Len(fichier) To 1 Step -1
If Mid(fichier, i, 1) = "." And ext = "" Then
poz = i
ext = Right(fichier, Len(fichier) - i)
ElseIf Mid(fichier, i, 1) = "" Then
name = Mid(fichier, i + 1, Len(fichier) - i - Len(ext) - 1)
If AvecSlash Then
Path = Left(fichier, i)
Else
Path = Left(fichier, i - 1)
End If
Exit For
End If
Next
If name = "" Then name = Left(fichier, Len(fichier) - Len(ext) - 1)
Select Case InfoNeeded
Case Chemin
GetFileInfo = Path
Case Nom
GetFileInfo = name
Case Extension
GetFileInfo = ext
Case NomComplet
GetFileInfo = name & "." & ext
End Select
End Function

Voili-voilou

John



"bob" a écrit dans le message de
news:bsuc9g$ldv$
Bonjour,

j'ai un problème pour fermer un classeur à l'aide de VBA

Voilà mon code



****************************************************************************

*****
fichier_source = Application.GetOpenFilename(filefilter:="Classeur Excel
(*.xls),*.xls", filterindex:=2, _
Title:="Fichier source pour l'import", MultiSelect:úlse)

' on teste si le classeur est déjà ouvert
If IsFileOpen(fichier_source) Then
MsgBox "Le classeur demandé est en cours d'utilisation"
Else
MsgBox "Le classeur demandé n'est pas encoure ouvert"
Workbooks.Open fichier_source
ThisWorkbook.Activate

End If
.......
' A la fin on ferme le classeur source
MsgBox "on ferme le classeur source : " & fichier_source

Workbooks(fichier_source).Close SaveChanges:úlse



****************************************************************************

******

En fait l'ouverture d'un classeur se fait correctement, mais la dernière
partie ne marche (fermeture du classeur ouvert).

J'ai un message "l'indice n'appartient à la sélection" et c'est le bout
de


code
Workbooks(fichier_source).Close SaveChanges:úlse
quui est incriminé.

Quelqu'un aurait-il une idée?

Merci d'avance et bonne année !








Avatar
bob
Autant pour moi, je viens de trouver. En fait faut lui indiquer le nom
complet, je viens d'essayer et ça marche, c'est cool.
Merci beaucoup de ton aide John, et peut être à l'année prochaine :)

"bob" a écrit dans le message news:
bsug1a$ng9$
Merci de ta réponse, mais je ne comprends pas tout.
Question bête, comment tu l'utilise cette fonction?
Aurais tu un exemple d'application? (plus particulièrement avec la méthode
close de Workbooks)

"John Fuss" a écrit dans le message news:
bsucjm$ljh$
ta variable fichier_source contient le chemin, Excel n'en veux pas via
Workbooks() donc il faut t'en debarassé, je regarde si j'ai encore ma
fonction.....


Public Enum FileInfo 'Constantes pour spécifier les infos à obtenir d'un
nom

de fichier
Chemin = 0
Nom = 1
Extension = 2
NomComplet = 3
End Enum

Public Function GetFileInfo(fichier As String, InfoNeeded As FileInfo,
Optional AvecSlash As Boolean = True) As String
Dim poz As Integer, ext As String, name As String, Path As String
Dim i As Integer
On Error Resume Next

ext = ""
For i = Len(fichier) To 1 Step -1
If Mid(fichier, i, 1) = "." And ext = "" Then
poz = i
ext = Right(fichier, Len(fichier) - i)
ElseIf Mid(fichier, i, 1) = "" Then
name = Mid(fichier, i + 1, Len(fichier) - i - Len(ext) - 1)
If AvecSlash Then
Path = Left(fichier, i)
Else
Path = Left(fichier, i - 1)
End If
Exit For
End If
Next
If name = "" Then name = Left(fichier, Len(fichier) - Len(ext) - 1)
Select Case InfoNeeded
Case Chemin
GetFileInfo = Path
Case Nom
GetFileInfo = name
Case Extension
GetFileInfo = ext
Case NomComplet
GetFileInfo = name & "." & ext
End Select
End Function

Voili-voilou

John



"bob" a écrit dans le message de
news:bsuc9g$ldv$
Bonjour,

j'ai un problème pour fermer un classeur à l'aide de VBA

Voilà mon code





****************************************************************************

*****
fichier_source = Application.GetOpenFilename(filefilter:="Classeur
Excel



(*.xls),*.xls", filterindex:=2, _
Title:="Fichier source pour l'import", MultiSelect:úlse)

' on teste si le classeur est déjà ouvert
If IsFileOpen(fichier_source) Then
MsgBox "Le classeur demandé est en cours d'utilisation"
Else
MsgBox "Le classeur demandé n'est pas encoure ouvert"
Workbooks.Open fichier_source
ThisWorkbook.Activate

End If
.......
' A la fin on ferme le classeur source
MsgBox "on ferme le classeur source : " & fichier_source

Workbooks(fichier_source).Close SaveChanges:úlse





****************************************************************************

******

En fait l'ouverture d'un classeur se fait correctement, mais la
dernière



partie ne marche (fermeture du classeur ouvert).

J'ai un message "l'indice n'appartient à la sélection" et c'est le
bout



de
code
Workbooks(fichier_source).Close SaveChanges:úlse
quui est incriminé.

Quelqu'un aurait-il une idée?

Merci d'avance et bonne année !












Avatar
Pascal Engelmajer
salut,
une petite précision pour le futur...
comme le fichier est actif ...
AciveWorkbook.Close ... doit suffire
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"bob" a écrit dans le message de news:
bsuc9g$ldv$
Bonjour,

j'ai un problème pour fermer un classeur à l'aide de VBA

Voilà mon code

****************************************************************************

*****
fichier_source = Application.GetOpenFilename(filefilter:="Classeur Excel
(*.xls),*.xls", filterindex:=2, _
Title:="Fichier source pour l'import", MultiSelect:úlse)

' on teste si le classeur est déjà ouvert
If IsFileOpen(fichier_source) Then
MsgBox "Le classeur demandé est en cours d'utilisation"
Else
MsgBox "Le classeur demandé n'est pas encoure ouvert"
Workbooks.Open fichier_source
ThisWorkbook.Activate

End If
.......
' A la fin on ferme le classeur source
MsgBox "on ferme le classeur source : " & fichier_source

Workbooks(fichier_source).Close SaveChanges:úlse

****************************************************************************

******

En fait l'ouverture d'un classeur se fait correctement, mais la dernière
partie ne marche (fermeture du classeur ouvert).

J'ai un message "l'indice n'appartient à la sélection" et c'est le bout de
code
Workbooks(fichier_source).Close SaveChanges:úlse
quui est incriminé.

Quelqu'un aurait-il une idée?

Merci d'avance et bonne année !




Avatar
Frédéric Sigonneau
Bonsoir,

Autre solution possible, en une ligne de code également :

Remplace
Workbooks(fichier_source).Close SaveChanges:úlse

Par
Workbooks(Dir(fichier_source)).Close SaveChanges:úlse

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

j'ai un problème pour fermer un classeur à l'aide de VBA

Voilà mon code
****************************************************************************
*****
fichier_source = Application.GetOpenFilename(filefilter:="Classeur Excel
(*.xls),*.xls", filterindex:=2, _
Title:="Fichier source pour l'import", MultiSelect:úlse)

' on teste si le classeur est déjà ouvert
If IsFileOpen(fichier_source) Then
MsgBox "Le classeur demandé est en cours d'utilisation"
Else
MsgBox "Le classeur demandé n'est pas encoure ouvert"
Workbooks.Open fichier_source
ThisWorkbook.Activate

End If
.......
' A la fin on ferme le classeur source
MsgBox "on ferme le classeur source : " & fichier_source

Workbooks(fichier_source).Close SaveChanges:úlse
****************************************************************************
******

En fait l'ouverture d'un classeur se fait correctement, mais la dernière
partie ne marche (fermeture du classeur ouvert).

J'ai un message "l'indice n'appartient à la sélection" et c'est le bout de
code
Workbooks(fichier_source).Close SaveChanges:úlse
quui est incriminé.

Quelqu'un aurait-il une idée?

Merci d'avance et bonne année !