Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ouverture conditionnelle d'un classeur

9 réponses
Avatar
Serge Nazarian
Bonjour,

J'ai écrit le code suivant (comme partie d'une plus grosse macro).
Le but est d'ouvrir le classeur G:\Mes documents\nazarian.xls, s'il n'est
pas déjà ouvert, et de sélectionner une cellule donnée.

*******************
Dim Worbk As Workbook
On Error Resume Next
Set Worbk = Workbooks("nazarian.xls")
If Err <> 0 Then
Workbooks.Open Filename:="G:\Mes documents\nazarian.xls"
Else
Set Worbk = Nothing
Windows("nazarian.xls").Activate
End If
Range("A2").Select
*******************


Si le classeur n'est pas déjà ouvert, cela fonctionne parfaitement.
Par contre, s'il est déjà ouvert, apparaît le message :

nazarian.xls est déjà ouvert. Si vous l'ouvrez à nouveau, toutes vos
modifications seront perdues.
Voulez-vous rouvrir nazarian.xls?
OUI NON

Comment éviter cette perte des modifications antérieures ?

Merci pour toute aide.
Cordialement,
--
Serge Nazarian

9 réponses

Avatar
Daniel.C
Bonjour.
Mets :

Dim Worbk As Workbook
On Error Resume Next
Set Worbk = Workbooks("nazarian.xls")
If Err.Number <> 0 Then
Workbooks.Open Filename:="G:Mes documentsnazarian.xls"
Err.Clear
On Error GoTo 0
Else
Set Worbk = Nothing
Windows("nazarian.xls").Activate
End If
Range("A2").Select

Daniel

Bonjour,

J'ai écrit le code suivant (comme partie d'une plus grosse macro).
Le but est d'ouvrir le classeur G:Mes documentsnazarian.xls, s'il n'est pas
déjà ouvert, et de sélectionner une cellule donnée.

*******************
Dim Worbk As Workbook
On Error Resume Next
Set Worbk = Workbooks("nazarian.xls")
If Err <> 0 Then
Workbooks.Open Filename:="G:Mes documentsnazarian.xls"
Else
Set Worbk = Nothing
Windows("nazarian.xls").Activate
End If
Range("A2").Select
*******************


Si le classeur n'est pas déjà ouvert, cela fonctionne parfaitement.
Par contre, s'il est déjà ouvert, apparaît le message :

nazarian.xls est déjà ouvert. Si vous l'ouvrez à nouveau, toutes vos
modifications seront perdues.
Voulez-vous rouvrir nazarian.xls?
OUI NON

Comment éviter cette perte des modifications antérieures ?

Merci pour toute aide.
Cordialement,
Avatar
Serge Nazarian
Dans le message :OX%,
Daniel.C a écrit :
Bonjour.
Mets :

Dim Worbk As Workbook
On Error Resume Next
Set Worbk = Workbooks("nazarian.xls")
If Err.Number <> 0 Then
Workbooks.Open Filename:="G:Mes documentsnazarian.xls"
Err.Clear
On Error GoTo 0
Else
Set Worbk = Nothing
Windows("nazarian.xls").Activate
End If
Range("A2").Select

Daniel

Bonjour,

J'ai écrit le code suivant (comme partie d'une plus grosse macro).
Le but est d'ouvrir le classeur G:Mes documentsnazarian.xls, s'il
n'est pas déjà ouvert, et de sélectionner une cellule donnée.

*******************
Dim Worbk As Workbook
On Error Resume Next
Set Worbk = Workbooks("nazarian.xls")
If Err <> 0 Then
Workbooks.Open Filename:="G:Mes documentsnazarian.xls"
Else
Set Worbk = Nothing
Windows("nazarian.xls").Activate
End If
Range("A2").Select
*******************


Si le classeur n'est pas déjà ouvert, cela fonctionne parfaitement.
Par contre, s'il est déjà ouvert, apparaît le message :

nazarian.xls est déjà ouvert. Si vous l'ouvrez à nouveau, toutes vos
modifications seront perdues.
Voulez-vous rouvrir nazarian.xls?
OUI NON

Comment éviter cette perte des modifications antérieures ?

Merci pour toute aide.
Cordialement,





Merci pour cette prompte réponse.
Malheureusement, mais cela ne marche pas.

Cordialement,
--
Serge Nazarian
Avatar
Daniel.C
Peux-tu préciser "ce qui ne marche pas", quelle ligne, quelle erreur...
Daniel

Dans le message :OX%,
Daniel.C a écrit :
Bonjour.
Mets :

Dim Worbk As Workbook
On Error Resume Next
Set Worbk = Workbooks("nazarian.xls")
If Err.Number <> 0 Then
Workbooks.Open Filename:="G:Mes documentsnazarian.xls"
Err.Clear
On Error GoTo 0
Else
Set Worbk = Nothing
Windows("nazarian.xls").Activate
End If
Range("A2").Select

Daniel

Bonjour,

J'ai écrit le code suivant (comme partie d'une plus grosse macro).
Le but est d'ouvrir le classeur G:Mes documentsnazarian.xls, s'il
n'est pas déjà ouvert, et de sélectionner une cellule donnée.

*******************
Dim Worbk As Workbook
On Error Resume Next
Set Worbk = Workbooks("nazarian.xls")
If Err <> 0 Then
Workbooks.Open Filename:="G:Mes documentsnazarian.xls"
Else
Set Worbk = Nothing
Windows("nazarian.xls").Activate
End If
Range("A2").Select
*******************


Si le classeur n'est pas déjà ouvert, cela fonctionne parfaitement.
Par contre, s'il est déjà ouvert, apparaît le message :

nazarian.xls est déjà ouvert. Si vous l'ouvrez à nouveau, toutes vos
modifications seront perdues.
Voulez-vous rouvrir nazarian.xls?
OUI NON

Comment éviter cette perte des modifications antérieures ?

Merci pour toute aide.
Cordialement,





Merci pour cette prompte réponse.
Malheureusement, mais cela ne marche pas.

Cordialement,
Avatar
Serge Nazarian
Dans le message :u%,
Daniel.C a écrit :
Peux-tu préciser "ce qui ne marche pas", quelle ligne, quelle
erreur... Daniel



La ligne

Workbooks.Open Filename:="G:Mes documentsnazarian.xls"

conduit au message :
nazarian.xls est déjà ouvert. Si vous l'ouvrez à nouveau, toutes vos
modifications seront perdues.
Voulez-vous rouvrir nazarian.xls?
OUI NON

C'est à dire que la modification proposée ne modifie pas le comportement de
la macro.

Cordialement,
--
Serge Nazarian
Avatar
Serge Nazarian
Dans le message :u%,
Daniel.C a écrit :
Peux-tu préciser "ce qui ne marche pas", quelle ligne, quelle
erreur... Daniel



En réalité, que le fichier soit ouvert ou non, on passe toujours par le Then
[ Workbooks.Open Filename:="G:Mes documentsnazarian.xls" ]
et jamais par le Else
[ Set Worbk = Nothing
Windows("snazarian_mvt_pea.xls").Activate ]

Cordialement,
--
Serge Nazarian
Avatar
Daniel.C
Plutôt :
If Err.Number <> 0 Then
Daniel

par

Set Worbk = Workbooks("nazarian.xls")
If Worbk Is Nothing Then


Dans le message :u%,
Daniel.C a écrit :
Peux-tu préciser "ce qui ne marche pas", quelle ligne, quelle
erreur... Daniel



En réalité, que le fichier soit ouvert ou non, on passe toujours par le Then
[ Workbooks.Open Filename:="G:Mes documentsnazarian.xls" ]
et jamais par le Else
[ Set Worbk = Nothing
Windows("snazarian_mvt_pea.xls").Activate ]

Cordialement,
Avatar
Daniel.C
Le copier/coller fou a encore frappé; lire :
Plutôt :
If Err.Number <> 0 Then
Daniel


Plutôt :
If Err.Number <> 0 Then
Daniel

par

Set Worbk = Workbooks("nazarian.xls")
If Worbk Is Nothing Then


Dans le message :u%,
Daniel.C a écrit :
Peux-tu préciser "ce qui ne marche pas", quelle ligne, quelle
erreur... Daniel



En réalité, que le fichier soit ouvert ou non, on passe toujours par le
Then
[ Workbooks.Open Filename:="G:Mes documentsnazarian.xls" ]
et jamais par le Else
[ Set Worbk = Nothing
Windows("snazarian_mvt_pea.xls").Activate ]

Cordialement,
Avatar
michdenis
Bonjour,

Une autre façon de faire :

Une façon de faire, utiliser une fonction personnalisé :

Exemple:
'-------------------------------------
Sub test()

Dim Fichier As String, Chemin As String
Dim Wk As Workbook

Fichier = "NomDuFichier.xls"
Chemin = "C:Chemin où est le fichier"

If OpenFile(Fichier) = False Then
Set Wk = Workbooks.Open(Chemin & Fichier)
Else
Set Wk = Workbooks(Fichier)
End If

'pour le reste du code, tu utilise la variable
'Wk pour faire référence à ce classeur comme dans :
x = Wk.Worksheets("Feuil1").Range("A1")
End Sub
'-------------------------------------
Function OpenFile(Fichier As String) As Boolean
On Error Resume Next
Set File = Workbooks(Fichier)
If Err = 0 Then OpenFile = True
End Function
'-------------------------------------





"Serge Nazarian" a écrit dans le message de groupe de discussion :
4bebb0bf$0$21957$
Bonjour,

J'ai écrit le code suivant (comme partie d'une plus grosse macro).
Le but est d'ouvrir le classeur G:Mes documentsnazarian.xls, s'il n'est
pas déjà ouvert, et de sélectionner une cellule donnée.

*******************
Dim Worbk As Workbook
On Error Resume Next
Set Worbk = Workbooks("nazarian.xls")
If Err <> 0 Then
Workbooks.Open Filename:="G:Mes documentsnazarian.xls"
Else
Set Worbk = Nothing
Windows("nazarian.xls").Activate
End If
Range("A2").Select
*******************


Si le classeur n'est pas déjà ouvert, cela fonctionne parfaitement.
Par contre, s'il est déjà ouvert, apparaît le message :

nazarian.xls est déjà ouvert. Si vous l'ouvrez à nouveau, toutes vos
modifications seront perdues.
Voulez-vous rouvrir nazarian.xls?
OUI NON

Comment éviter cette perte des modifications antérieures ?

Merci pour toute aide.
Cordialement,
--
Serge Nazarian
Avatar
Serge Nazarian
Dans le message :4bebb0bf$0$21957$,
Serge Nazarian a écrit :
Bonjour,

J'ai écrit le code suivant (comme partie d'une plus grosse macro).
Le but est d'ouvrir le classeur G:Mes documentsnazarian.xls, s'il
n'est pas déjà ouvert, et de sélectionner une cellule donnée.

*******************
Dim Worbk As Workbook
On Error Resume Next
Set Worbk = Workbooks("nazarian.xls")
If Err <> 0 Then
Workbooks.Open Filename:="G:Mes documentsnazarian.xls"
Else
Set Worbk = Nothing
Windows("nazarian.xls").Activate
End If
Range("A2").Select
*******************


Si le classeur n'est pas déjà ouvert, cela fonctionne parfaitement.
Par contre, s'il est déjà ouvert, apparaît le message :

nazarian.xls est déjà ouvert. Si vous l'ouvrez à nouveau, toutes vos
modifications seront perdues.
Voulez-vous rouvrir nazarian.xls?
OUI NON

Comment éviter cette perte des modifications antérieures ?

Merci pour toute aide.
Cordialement,



Merci à tous ceux qui m'ont répondu.
J'ai finalement opté pour le code suivant (test inversé) qui fonctionne,
mais d'autres solutions sont possibles, dont celle de michdenis,
certainement plus propre.

On Error Resume Next
Windows("nazarian.xls").Activate
If Err.Number <> 0 Then
Workbooks.Open Filename:="G:Mes documentsnazarian.xls"
Err.Clear
Else
Set Worbk = Nothing
End If

Cordialement,
--
Serge Nazarian