VBA Ouverture et fermeture fichier sous condition

Egruat

XLDnaute Occasionnel
Bonjour,

Dans un fichier Excel, je dois exécuter une macro indiquant:
- d'ouvrir et de fermer 4 fichiers Excel, qui me servent de base de données, à des emplacements différents sur le C:\
- si l'un des 4 fichiers est déjà ouvert, de ne pas l'ouvrir à nouveau

Pourriez-vous m'aider ?

Cordialement.:cool:
 
Dernière édition:

Vorens

XLDnaute Occasionnel
Re : VBA Ouverture et fermeture fichier sous condition

Hello,

A adapter a ta solution.

Code:
If FileSourceOpen = False Then
Application.DisplayAlerts = False

Set OPSourceFile = Workbooks.Open(PathSource)

    FileSourceOpen = True

End If

et bien sur, lorsque tu referme ton fichier ne pas oublier de reset la variable a false

Code:
FileSourceOpen = False


Après, si quelqu'un à mieux, toujours curieux d’apprendre.

Meilleures salutations

Vorens
 

Vorens

XLDnaute Occasionnel
Re : VBA Ouverture et fermeture fichier sous condition

Hello,


FileSourceOpen est une variable de type Booléenne qui est mise a VRAI lorsque tu ouvre pour la première fois ton ficher. Apres avec le test IF tu contrôle l'état de cette variable. Si elle est a VRAI cela signifie que ton fichier est déjà ouvert.

Cette variable est ensuite remise a FAUX lorsque tu exécute le code qui ferme ton classeur afin de ne pas bloquer la réouverture.

Etant donner que nous n'avons pas de fichier exemple, il faut ensuite adapter cette proposition à ton problème.
 

Egruat

XLDnaute Occasionnel
Re : VBA Ouverture et fermeture fichier sous condition

Ton code fonctionne bien ! Mais, si un fichier source (base de donnée) est déjà ouvert, je n'arrive pas à annuler cette manipulation Ouverture / Fermeture pour le laisser ouvert:

If FileSourceOpen = False Then
Application.DisplayAlerts = False
Set OPSourceFile = Workbooks.Open("C:\dossier\base1.xls")
ActiveWorkbook.Close
Set OPSourceFile = Workbooks.Open("C:\dossier\base2.xls")
ActiveWorkbook.Close
FileSourceOpen = True
Else
End If
FileSourceOpen = False


Comme je ne comprends pas bien tout le code, j'ai un peu de difficulté... Désolé.
 

Vorens

XLDnaute Occasionnel
Re : VBA Ouverture et fermeture fichier sous condition

Re,

Déjà, tu ouvre un fichier, et tu le referme directe avec le code comme sa.

Code:
Set OPSourceFile = Workbooks.Open("C:\dossier\base1.xls") 'ouvre
ActiveWorkbook.Close 'ferme

Etant donné que tu débute, sépart bien les opération d'ouverture et de fermeture des fichiers. De plus y'a un Else dans ton test If qui sers a rien.

Efface les ActiveWorkbooks.close.

Place les a la fin de ta procédure ou alors et effectue la fermeture après un clic sur bouton ou autre chose. C'est assez dur de savoir tes objectifs car tu donne pas d'indication sur "quand un classeur doit être ouvert" et sur "a quel moment ou pour quelle raison on le referme"
 
Dernière édition:

francedemo

XLDnaute Occasionnel
Re : VBA Ouverture et fermeture fichier sous condition

bonjour à tous,

perso, j'utilise une autre façon de faire:
Code:
On Error Resume Next
    Set Wb = Workbooks("nom_du_fichier.xls")
If Err <> 0 Then Workbooks.Open Filename:="chemin_complet" & "nom_du_fichier_.xls", UpdateLinks:=1   ', ReadOnly=1 (uniquement pour l'avoir en lecture seule)

et fait, avec "set", j'essaye d'activer le fichier, si il n'est pas déjà ouvert (error=0), je l'ouvre, sinon, c'est ok

à+
 

Egruat

XLDnaute Occasionnel
Re : VBA Ouverture et fermeture fichier sous condition

Hmm, je ne suis pas loin je crois:

Application.DisplayAlerts = False
Set OPSourceFile = Workbooks.Open("C:\dossier\base1.xls")
ActiveWorkbook.Close

Set OPSourceFile = Workbooks.Open("C:\dossier\base2.xls")
ActiveWorkbook.Close

Set OPSourceFile = Workbooks.Open("C:\dossier\base3.xls")
ActiveWorkbook.Close

If FileSourceOpen = False Then



MAIS: si l'un des fichiers de base de données est ouvert, je voudrais le conserver ouvert. Et ça, je n'y arrive pas...
 

Vorens

XLDnaute Occasionnel
Re : VBA Ouverture et fermeture fichier sous condition

Re,


Nan mais, il faut bien comprendre que ce ligne ActiveWorkbook.Close va te fermer le classeur au premier plan ouvert. Donc avec le code tel que tu le montre ici. Tu referme systématiquement le classeur juste après l'avoir ouvert.¨

Enlève les ActiveWorkbook.Close et tes classeurs resterons ouvert.

Après tu peux aussi spécifier le classeur que tu veux fermer, sa évite le Activeworkbooks. Tu met "nomduclasseur".close
 

Egruat

XLDnaute Occasionnel
Re : VBA Ouverture et fermeture fichier sous condition

J'ai essaye cela mais le Woorbooks ("nom fichier").close ne fonctionne pas...


Set OPSourceFile = Workbooks.Open("c:\dossier\base1.xls")
Workbooks("c:\dossier\base1.xls").Close

If FileSourceOpen = False Then
FileSourceOpen = True
Else
End If
FileSourceOpen = False

Set OPSourceFile = Workbooks.Open("c:\dossier\base2.xls")
Workbooks("c:\dossier\base2.xls").Close

If FileSourceOpen = False Then
FileSourceOpen = True
Else
End If
FileSourceOpen = False
 

Egruat

XLDnaute Occasionnel
Re : VBA Ouverture et fermeture fichier sous condition

Bonjour francedemo,

Ton code est intéressant mais dans le cas où le fichier peut s'ouvrir (c'est-à-dire que le test "Le fichier est-il déjà ouvert avant de l'ouvrir ? Si oui, ne pas l'ouvrir. Sinon l'ouvrir et le refermer"), je dois le refermer impérativement.

Or avec ton code le fichier base donnée ne se referme pas...
 

Vorens

XLDnaute Occasionnel
Re : VBA Ouverture et fermeture fichier sous condition

Re,


Et je comprend pas trop ce que tu essais de faire avec ton code la mais c'est pas trop logique ^^

Code:
If FileSourceOpen = False Then 'Si le fichier est fermé alors on l'ouvre
Set OPSourceFile = Workbooks.Open("c:\dossier\base1.xls")
FileSourceOpen = True
Else 'Si non on le ferme
Workbooks("base1.xls").Close
FileSourceOpen = False
End If

'Pareil pour l'autre

If FileSourceOpen2 = False Then
Set OPSourceFile2 = Workbooks.Open("c:\dossier\base2.xls")
FileSourceOpen2 = True
Else
Workbooks("base2.xls").Close
FileSourceOpen2 = False
End If

Essais ce code ( j'ai pas testé c'est fiat sur le tas )
 

Egruat

XLDnaute Occasionnel
Re : VBA Ouverture et fermeture fichier sous condition

Okay merci, ce problème est résolu. En revanche, si un fichier de base de donnée est déjà ouvert, la macro ne permet pas de le conserver ouvert. Serait-ce un problème au niveau du Set OPSourceFile = Workbooks.Open("c:\dossier\base1.xls") ? Ne faudrait-il pas définir un fichier sans l'ouvrir et lui donner une condition ?

voici où en est rendu le code:

Set OPSourceFile = Workbooks.Open("c:\dossier\base1.xls")
Workbooks("base1.xls").Close

If FileSourceOpen = False Then
FileSourceOpen = True
End If
FileSourceOpen = False

Set OPSourceFile = Workbooks.Open("c:\dossier\base2.xls")
Workbooks("base2.xls").Close

If FileSourceOpen = False Then
FileSourceOpen = True
End If
FileSourceOpen = False
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin