bloquer bouton macro si classeur déjà ouvert

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

stephane.quinquis

XLDnaute Junior
Bonjour le forum,

J'ai un classeur enregistrement des pertes et un classeur inventaire production.
Mon classeur enregistrement des pertes est un formulaire qui est rempli par 9 utilisateurs différents mais chaque utilisateur a son propre formulaire.
Ma base de donnée centrale est l'inventaire production

Des données vont être transféré des différents classeurs enregistrement vers la base de données centrales inventaire production.

Afin que cela fonctionne, dans ma macro transfert de données, j'ai déjà prévu que le classeur inventaire production soit sauvegardé et refermé immédiatement après le transfert de données.

Mais je ne souhaite prendre aucun risque et ce que je veux maintenant c'est qu' au cas où le classeur inventaire production soit ouvert par une personne X alors une personne Y ne pourra pas cliquer sur le bouton et une messagebox affichera"classeur déjà ouvert" par exemple.
Ce bout de macro doit être situé avant le démarrage de ma macro transfert de données.

J'ai oublié de notifier que ces fichiers seront partagés en réseau.

enregistrement des pertes
Cijoint.fr - Service gratuit de dépôt de fichiers

Merci
 

Pièces jointes

Re : bloquer bouton macro si classeur déjà ouvert

Bonjour Job75, Ubot303 et le fil

Encore merci pour les renseignements que vous apportez sur ce forum. Ils m'aident vraiment dans l'avancement de mon projet.
J'ai encore un problème à vous soumettre. J'ai une macro qui ne bugge pas mais qui ne continue pas son chemin.

Je m'explique. La dernière fois, je cherchais à incrémenter une base(inventaire production) à partir de plusieurs fichiers différents ce que j'ai réussi à faire.

Là où je bloque c'est pour la récupération de ces données. Je souhaite récupérer les données de l'inventaire production dans une autre base inventaire pasteurisation. Pour cela j'ai crée une macro dans inventaire pasteurisation avec une gestion des erreurs similaires à ce que m'avez donnée Job75.

Ma macro fonctionnait très bien jusqu'au jour où maintenant elle s'arrête à l'ouverture du fichier inventaire production . Quand j'ouvre mon inventaire production, elle ouvre les macros de l'inventaire, arrête la lecture de la macro en cours et reste bloquer sur les macros de l'inventaire production sans pour autant bugger.

Auriez vous une idée d'où cela peut bien venir??


Code:
Sub Copiercollerdanspasteurisation()
'
' Copiercollerdanspasteurisation Macro
' Macro enregistrée le 26/04/2010 par quinquis
On Error Resume Next
If IsError(Workbooks("inventaire production.xls").Name) Then GoTo 1
2 MsgBox "Le fichier 'inventaire production' est indisponible"
Exit Sub
1 On Error GoTo 0
Workbooks.Open "\\S110dvp02\chefeq\AUTOCONTROLE\Refontes\inventaire production.xls"
If ActiveWorkbook.ReadOnly Then ActiveWorkbook.Close False: GoTo 2
 Workbooks("inventaire production.xls").Activate 'active l'inventaire production'   
Selection.AutoFilter Field:=2, Criteria1:="<>" 'sélectionne les cellules non vides dans le critère poids'
    ActiveWindow.SmallScroll ToRight:=4
    Selection.AutoFilter Field:=14, Criteria1:="=" 'sélectionne les cellules vides dans le critère envoi vers pasteurisation'
    ActiveWindow.SmallScroll ToRight:=-4
    Range("A7:M1000").SpecialCells(xlCellTypeVisible).Select 'sélectionne les cellules visibles dans plage de données de A7 à M1000'
    Selection.Copy
    Workbooks("inventaire pasteurisation.xls").Activate
    Range("A65536").End(xlUp).Offset(1, 0).Select
    'Cells(65536, 1).End(xlUp).Select
    ActiveSheet.Paste
    Workbooks("inventaire production.xls").Activate 'sélectionne l'inventaire production'
    ActiveWindow.SmallScroll ToRight:=4 'désélectionne le filtre sur l'envoi vers pasto'
    Selection.AutoFilter Field:=14
    ActiveWindow.SmallScroll ToRight:=-4 'désélectionne le filtre sur le poids'
    Selection.AutoFilter Field:=2
    Range("B7:B1000").SpecialCells(xlCellTypeVisible).Select 'sélectionne les cellules visibles dans la colonne D'
    Application.CutCopyMode = False
    Selection.Copy 'fait une copie'
    ActiveWindow.SmallScroll ToRight:=5
    Range("N7").Select
    ActiveSheet.Paste 'collage à partir de la cellule N7'
    ActiveWorkbook.Save 'Sauve les données de l'inventaire production'
    ActiveWindow.Close 'ferme l'inventaire production'
End Sub

Inventaire pasteurisation exemple:
Cijoint.fr - Service gratuit de dépôt de fichiers


A noter que si j'effectue ma macro sur deux fichiers exemples, elle fonctionne parfaitement

Merci d'avance
 

Pièces jointes

Re : bloquer bouton macro si classeur déjà ouvert

Rebonjour à vous

En lisant une peu les différents postes, je me suis posé une question:
J'ai trois fichiers: enregistrement pertes, inventaire production et inventaire pasteurisation.
J'ai une macro évenemtielle situé dans le fichier enregistrement pertes qui me permet d'ouvrir le fichier inventaire production, d'ajouter des données ,d'enregistrer et de fermer
J'ai une autre macro evenementielle situé dans le fichier inventaire pasteurisation qui permet d'ouvrir fichier inventaire production, de récupérer des données d'enregistrer et de fermer.

J'ai lu que les macros évènementielles peuvent s'interférer et provoquer l'arrêt de la lecture d'une macro. Est-ce possible que deux macros situés dans deux fichiers différents peuvent s'interférer????
 
Re : bloquer bouton macro si classeur déjà ouvert

Bonjour stephane.quinquis,

J'ai lu que les macros évènementielles peuvent s'interférer et provoquer l'arrêt de la lecture d'une macro. Est-ce possible que deux macros situés dans deux fichiers différents peuvent s'interférer????

Bien sûr, une macro peut créer un évènement (par exemple Open, Activate, Close etc...) qui lance l'autre macro.

On peut désactiver l'action des évènement par Application.EnableEvents = False.

Essayez peut-être votre macro modifiée ainsi :

Code:
Sub Copiercollerdanspasteurisation()
'
' Copiercollerdanspasteurisation Macro
' Macro enregistrée le 26/04/2010 par quinquis
On Error Resume Next
If IsError(Workbooks("inventaire production.xls").Name) Then GoTo 1
2 MsgBox "Le fichier 'inventaire production' est indisponible"
[COLOR="red"]Application.EnableEvents = True[/COLOR]
Exit Sub
1 [COLOR="Red"]Application.EnableEvents = False[/COLOR]
Workbooks.Open "\\S110dvp02\chefeq\AUTOCONTROLE\Refontes\inventaire production.xls"
If ActiveWorkbook.ReadOnly Then ActiveWorkbook.Close False: GoTo 2
 Workbooks("inventaire production.xls").Activate 'active l'inventaire production'   
Selection.AutoFilter Field:=2, Criteria1:="<>" 'sélectionne les cellules non vides dans le critère poids'
    ActiveWindow.SmallScroll ToRight:=4
    Selection.AutoFilter Field:=14, Criteria1:="=" 'sélectionne les cellules vides dans le critère envoi vers pasteurisation'
    ActiveWindow.SmallScroll ToRight:=-4
    Range("A7:M1000").SpecialCells(xlCellTypeVisible).Select 'sélectionne les cellules visibles dans plage de données de A7 à M1000'
    Selection.Copy
    Workbooks("inventaire pasteurisation.xls").Activate
    Range("A65536").End(xlUp).Offset(1, 0).Select
    'Cells(65536, 1).End(xlUp).Select
    ActiveSheet.Paste
    Workbooks("inventaire production.xls").Activate 'sélectionne l'inventaire production'
    ActiveWindow.SmallScroll ToRight:=4 'désélectionne le filtre sur l'envoi vers pasto'
    Selection.AutoFilter Field:=14
    ActiveWindow.SmallScroll ToRight:=-4 'désélectionne le filtre sur le poids'
    Selection.AutoFilter Field:=2
    Range("B7:B1000").SpecialCells(xlCellTypeVisible).Select 'sélectionne les cellules visibles dans la colonne D'
    Application.CutCopyMode = False
    Selection.Copy 'fait une copie'
    ActiveWindow.SmallScroll ToRight:=5
    Range("N7").Select
    ActiveSheet.Paste 'collage à partir de la cellule N7'
    ActiveWorkbook.Save 'Sauve les données de l'inventaire production'
    ActiveWindow.Close 'ferme l'inventaire production'
    [COLOR="red"]Application.EnableEvents = True[/COLOR]
End Sub

Noter que par sécurité il n'y a plus de On Error GoTo 0.

A+
 
Re : bloquer bouton macro si classeur déjà ouvert

Merci encore pour ton aide Job75. Malheureusement il n'y a pas d'amélioration.

Ma macro s'éxécute jusqu'à l'ouverture du fichier et à ce moment là elle s'arrête sur un module de mon inventaire production sans continuer à lire la suite de la macro.
Je pense qu'il y a un lien avec l'autre macro où j'envoie des données dans l'inventaire production. Je vais essayer de chercher encore mais tu m'as donné une bonne piste avec la désactivation des évènements.
 
Re : bloquer bouton macro si classeur déjà ouvert

Bonjour Job75 bonjour le fil,


Pour info, j'ai trouvé d'où vient le problème.

Je dispose de filtre auto. J'avais envie qu'il soit surligné d'une autre couleur quand ils sont activés. J'ai donc utilisé la solution de boisgontier(que je remercie par ailleurs) avec le code suivant:

Function ChampActif(c)
Application.Volatile
ChampActif = Sheets(Application.Caller.Parent.Name).AutoFilter.Filters.Item(c.Column - Sheets(Application.Caller.Parent.Name).Range("_FilterDataBase").Column + 1).On
End Function
[/CODE]

Elle ne fonctionnait pas quand je l'ai placé dans thisworbook et dans une feuil. J'ai lu sur le forum qu'en la plaçant dans un module cela pouvait fonctionner et donc ça a fonctionné.

Par contre l'effet pervers est que ma macro d'importation de données ne fonctionnait plus. Quand je supprime la macro sur le filtre auto, elle fonctionne de nouveau. Donc c de là que vient le problème, d'une mise en forme conditionnelle.
Quelqu'un aurait-il une explication à cela?? Puis-je faire fonctionner la macro de boisgontier d'une autre façon???

Merci
 
Re : bloquer bouton macro si classeur déjà ouvert

Bonjour stephane.quinquis,

En effet les fonctions macros doivent être placées dans un Module si l'on veut les utiliser dans les feuilles de calcul.

Le problème vient donc peut-être du recalcul, alors essayez :

Code:
Sub Copiercollerdanspasteurisation()
'
' Copiercollerdanspasteurisation Macro
' Macro enregistrée le 26/04/2010 par quinquis
On Error Resume Next
If IsError(Workbooks("inventaire production.xls").Name) Then GoTo 1
2 MsgBox "Le fichier 'inventaire production' est indisponible"
[COLOR="red"]Application.Calculation = xlAutomatic[/COLOR]
Exit Sub
1 [COLOR="Red"]Application.Calculation = xlManual[/COLOR]
Workbooks.Open "\\S110dvp02\chefeq\AUTOCONTROLE\Refontes\inventaire production.xls"
If ActiveWorkbook.ReadOnly Then ActiveWorkbook.Close False: GoTo 2
 Workbooks("inventaire production.xls").Activate 'active l'inventaire production'   
Selection.AutoFilter Field:=2, Criteria1:="<>" 'sélectionne les cellules non vides dans le critère poids'
    ActiveWindow.SmallScroll ToRight:=4
    Selection.AutoFilter Field:=14, Criteria1:="=" 'sélectionne les cellules vides dans le critère envoi vers pasteurisation'
    ActiveWindow.SmallScroll ToRight:=-4
    Range("A7:M1000").SpecialCells(xlCellTypeVisible).Select 'sélectionne les cellules visibles dans plage de données de A7 à M1000'
    Selection.Copy
    Workbooks("inventaire pasteurisation.xls").Activate
    Range("A65536").End(xlUp).Offset(1, 0).Select
    'Cells(65536, 1).End(xlUp).Select
    ActiveSheet.Paste
    Workbooks("inventaire production.xls").Activate 'sélectionne l'inventaire production'
    ActiveWindow.SmallScroll ToRight:=4 'désélectionne le filtre sur l'envoi vers pasto'
    Selection.AutoFilter Field:=14
    ActiveWindow.SmallScroll ToRight:=-4 'désélectionne le filtre sur le poids'
    Selection.AutoFilter Field:=2
    Range("B7:B1000").SpecialCells(xlCellTypeVisible).Select 'sélectionne les cellules visibles dans la colonne D'
    Application.CutCopyMode = False
    Selection.Copy 'fait une copie'
    ActiveWindow.SmallScroll ToRight:=5
    Range("N7").Select
    ActiveSheet.Paste 'collage à partir de la cellule N7'
    ActiveWorkbook.Save 'Sauve les données de l'inventaire production'
    ActiveWindow.Close 'ferme l'inventaire production'
    [COLOR="red"]Application.Calculation = xlAutomatic[/COLOR]
End Sub

A+
 
Re : bloquer bouton macro si classeur déjà ouvert

Bonjour Job75

Encore merci pour ton aide. J'ai essayé de corriger la macro et de réintégrer la macro de boisgontier.
Malheureusement cela ne fonctionne toujours pas. Et là c'est encore plus bizarre. Si j'exécute la macro à l'aide du bouton, la macro ouvre le fichier inventaire production éxécute les différents filtres et fait comme si elle avait copier la zone demandé puis s'arrete là.
Par contre si je fais un pas à pas détaillé, la macro ouvre seulement le fichier comme précèdément et s'arrête sur les macros du fichier inventaire production.

Sinon qu'est ce que tu entends par recalcul??

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
754
Réponses
3
Affichages
952
Retour