Ouvrir un classeur s'il n'es pas déjà ouvert

Bonjour, et bon année à tous.

Je suis nouveau dans les forums, alors excusez moi si je n'ai pas tout les codes de communication.

J'ai un problème sur le quel je butte, malgré mes nombreuses recherches sur les différents forums, et ceux malgré que plusieurs abordent plus ou moins mon sujet. Mais il doit y avoir un truc que je comprend pas.

Je souhaite dans mon fichier "Essais 1" lorsque je vais sur la feuille "Feuil3" qu'une macro se lance

pour m'ouvrir le fichier "Carnet_de_commande en cours.xlsx" (en lecture seule ou pas, qu'il soit déjà ouvert ou pas sur un autre ordinateur du réseau). je veux juste l'ouvrir sur mon ordinateur pour activer les liens entre les deux fichier. Mais s'il est déjà ouvert, il n'a rien à faire.

J'ai écrit le code suivant :

Private Sub Worksheet_Activate() Workbooks.Open Filename:="C:\SIE\SBT\Feuille de temps\Carnet_de_commande en cours.xlsx" Windows("Essais 1.xlsm").Activate Range("D10").Select End Sub

dans la Feuil3 de Microsoft Excel Objets

Cela marche très bien quand le fichier carnet de commande n'est pas ouvert, mais cela pente dès que le carnet de commande est déjà ouvert. il faudrait que je fasse une macro avec une condition qui ne fasse rien si le fichier est déjà ouvert mais c'est la que ça ne marche plus du tout.

J'espère avoir été clair

Merci d'avance pour votre aide

Bonjour Sylvain12,

Ajoute au début de ton code ceci:

Dim WB as Workbook
For Each WB In Workbooks
if WB.Name = "Carnet_de_commande en cours.xlsx" then _
MsgBox ("Classeur déjà ouvert"):Exit Sub

Puis laisse le reste de ton code tel quel.

Bons tests, bonne continuation et bonne année.

Suite,

Le Next en fin de l'ajout n'apparaissait pas. Je réitère mon post

Dim WB as Workbook
For Each WB In Workbooks
if WB.Name = "Carnet_de_commande en cours.xlsx" then _
MsgBox ("Classeur déjà ouvert"):Exit Sub
Next

Merci pour ta réponse rapide.

J'ai compris qu'il fallait écrire le code comme suit:

Private Sub Worksheet_Activate()

Dim ?? As Workbook

For Each ?? In Workbooks

If ??.Name = "Carnet_de_commande en cours.xlsx" Then _

MsgBox ("Classeur déjà ouvert"): Exit Sub

Next

Workbooks.Open Filename:="C:\SIE\SBT\Feuille de temps\Carnet_de_commande en cours.xlsx"

Windows("Essais 1.xlsx").Activate

Range("D10").Select

End Sub

Lorsque le fichier est déjà ouvert ça marche

mais si le fichier n'est pas ouvert j'ai maintenant:

"Erreur d’exécution '9': L'indice n'appartient pas à la sélection."

Quand ça veux pas ça veut pas

PS: j'ai dû dans la formule remplacer WB par ?? car il semble qu'il me faut avoir plus de10 message pour pouvoir joindre ce lien.

C'est quoi d'ailleurs WB As et WB in

Cordialement

A nouveau,

Il faut laisser WB car c'est une variable dimensionné (DIM) comme étant un classeur (Workbook).

Donc il y a une boucle ensuite qui recherche par le nom du classeur un fichier ouvert qui contient exactement ce nom.

Si la recherche est concluante alors c'est que le classeur est ouvert. Donc il n'y a pas besoin de l'ouvrir et Exit Sub après le message d'avertissement permet de sortir du programme.

Si la recherche est infructueuse alors c'est ton code qui prend la suite. Afin d'ouvrir le classeur.

Oui tu as raison c'est le non du fichier que j'avais changé.

Merci pour tout.

Dernière question

n'y a t-il pas un moyen de ne pas mettre le message MsgBox. De rien faire si le fichier Carnet de commande est déjà ouvert.

Bonjour Sylvain12,

Si tu souhaites ne pas avoir l'affichage du message. Il faut ôter Msgbox ("classeur déjà ouvert" ). Mais laisser Exit sub.

Bonne continuation.

OK

Parfait

Merci pour tout

Rechercher des sujets similaires à "ouvrir classeur pas deja ouvert"