Fermeture automatique d'une MsgBox

panard01

XLDnaute Nouveau
Bonsoir à tous,
Voilà la situation : J'ai l'habitude de rédiger des macros pour ouvrir n'importe quel fichier Excel ordinaire et en retirer les éléments souhaités pour les transférer dans un autre classeur, mais là je suis confonter à un problème que je n'arrive pas à résoudre : le(s) fichier(s) que je dois ouvrir affiche(nt) une MsgBox issue du Workbook Open (une MsgBox vbOkonly) à l'ouverture, ce qui bloque ma macro tant que l'on n'appuie pas sur le bouton "OK". J'aimerais savoir s'il est possible d'ajouter une ligne (ou plusieurs...) à ma macro pour cliquer sur le bouton "OK" à la place de l'utilisateur ou carrément fermer cette MsgBox (équivalent du clic sur la croix de fermeture) qui m'emm..... ???
Merci d'avance à tous ceux qui auraient en stock un bout de code susceptible de me venir en aide !
 

panard01

XLDnaute Nouveau
Re : Fermeture automatique d'une MsgBox

Bon, Visiblement je n'ai pas été assez clair et je m'en excuse, alors je recommence :
Je reçois régulièrment divers fichiers Excel, provenant de diverses personnes qui utilisent un fichier source que l'on peut assimiler à un programme. Ces fichiers comportent de multiples donnnées réparties sur plusieurs feuilles du classeur et j'ai la charge de les compiler dans un classeur récapitulatif. Pour m'éviter les copier/coller qui sont fastidieux car il faut aller chercher les données dans tous les coins des fichiers que je reçois puis les trier dans mon classeur récapitulatif, j'ai souhaité réaliser une macro qui fasse tout ça pour moi. Mon seul problème, c'est que le concepteur du programme sous Excel à rédiger une Private Workbook Open générant donc des MsgBox (avec un unique bouton "OK") dès qu'on ouvre son fichier : si on ouvre le fichier source, le message est " Bonjour, pour ne pas écraser le programme source, vous devez enregistrer ce fichier sous un autre nom que xxx"; et si on ouvre un fichier contenant des données, le message est : Bonjour, vous venez d'ouvrir un fichier contenant déjà des données, pour enregistrer d'autres données, vous devez ouvrir le fichier xxx". Ce qui fait que ma macro, après avoir ouvert un fichier se retrouve bloquée par cette MsgBox qui attend que l'on clique sur le bouton "OK" pour activer le classeur ouvert. Je suis donc à la recherche du code qui me permettrait de fermer cette MsgBox sans que j'ai à le faire moi-même. Quelqu'un aurait-il cela en stock (en sachant que les SendKeys proposés par Eriiiic ne fonctionnent pas !) ?
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Fermeture automatique d'une MsgBox

Bonsoir le fil, bonsoir le forum,

Heu non c'est vrai tiens... Je m'étais même pas posé la question tellement je suis c... Il fait donc forcément parti du code dans le projet VBA du fichier... Il ne reste plus`qu'à le rechercher et à l'éliminer.
 

ledzepfred

XLDnaute Impliqué
Re : Fermeture automatique d'une MsgBox

re...

la méthode sendkeys ne marche pas parce que tu as plusieurs msgbox sans doute.

Essayes Application.EnableEvents=False et surtout ne pas oublier de repasser cette propriété à True en fin de code (c'est pas comme les displayalerts, il faut impérativement repasser cette propriété à True)

A+
 

Cousinhub

XLDnaute Barbatruc
Re : Fermeture automatique d'une MsgBox

Retranscrit, en un peu plus lisible...

Bon, Visiblement je n'ai pas été assez clair et je m'en excuse, alors je recommence :

Je reçois régulièrment divers fichiers Excel, provenant de diverses personnes qui utilisent un fichier source que l'on peut assimiler à un programme.

Ces fichiers comportent de multiples donnnées réparties sur plusieurs feuilles du classeur et j'ai la charge de les compiler dans un classeur récapitulatif.

Pour m'éviter les copier/coller qui sont fastidieux car il faut aller chercher les données dans tous les coins des fichiers que je reçois puis les trier dans mon classeur récapitulatif, j'ai souhaité réaliser une macro qui fasse tout ça pour moi.

Mon seul problème, c'est que le concepteur du programme sous Excel à rédiger une Private Workbook Open générant donc des MsgBox (avec un unique bouton "OK") dès qu'on ouvre son fichier :

si on ouvre le fichier source, le message est " Bonjour, pour ne pas écraser le programme source, vous devez enregistrer ce fichier sous un autre nom que xxx";

et si on ouvre un fichier contenant des données, le message est : Bonjour, vous venez d'ouvrir un fichier contenant déjà des données, pour enregistrer d'autres données, vous devez ouvrir le fichier xxx".

Ce qui fait que ma macro, après avoir ouvert un fichier se retrouve bloquée par cette MsgBox qui attend que l'on clique sur le bouton "OK" pour activer le classeur ouvert.

Je suis donc à la recherche du code qui me permettrait de fermer cette MsgBox sans que j'ai à le faire moi-même. Quelqu'un aurait-il cela en stock (en sachant que les SendKeys proposés par Eriiiic ne fonctionnent pas !) ?
 

ledzepfred

XLDnaute Impliqué
Re : Fermeture automatique d'une MsgBox

re...

résumons :

Application.displayalerts = False : fonctionne pas car Msgbox vba

sendkeys : fonctionne pas car plusieurs Msgbox

Application.EnableEvents : fonctionne pas (j'ai testé)

Recherche des lignes de codes Msgbox et suppression : je doute que cela fonctionne car dès ouverture du fichier la procédure du Workbook_open va supplanter la macro demandant l'ouverture du fichier

Seules solutions : forcer l'ouverture en désactivant les macros (mais je sais pas si c'est possible) ou piloter le(s) fichiers à ouvrir par ADO et là ça va pas être de la tarte...

A+
 

Cousinhub

XLDnaute Barbatruc
Re : Fermeture automatique d'une MsgBox

RE-,

SendKeys fonctionne...

pour peu qu'il soit placé AVANT la ligne Open...

Code:
SendKeys "~"
Workbooks.Open "C:\Test\essai.xls", 1

Nota, le 1, en fin de code, c'est pour mettre à jour les liaison, s'il y en a...
 

panard01

XLDnaute Nouveau
Re : Fermeture automatique d'une MsgBox

Si cela peut vous aider, voici le code de la Private Workbook Open des fichiers que je reçois :

Private Workbook Open()

If Range ("G4") > "" Then
MsgBox (" Bonjour, vous venez d'ouvrir un fichier contenant déjà des données, " & vbCr _
& "pour enregistrer d'autres données, vous devez ouvrir le fichier xxx",
vbOkOnly, "Message de ...")
End If

If Range ("E6") > "" Then
MsgBox (" Bonjour, vous venez d'ouvrir un fichier contenant déjà des données, " & vbCr _
& "pour enregistrer d'autres données, vous devez ouvrir le fichier xxx",
vbOkOnly, "Message de ...")
End If

a = MsgBox (" Bonjour, pour ne pas écraser le programme source, " & vbCr _
& "vous devez enregistrer ce fichier sous un autre nom que xxx",
vbOkOnly, "Message de ...")
Application.Dialogs(xlDialogSaveAs).Show

End Sub
 

job75

XLDnaute Barbatruc
Re : Fermeture automatique d'une MsgBox

Bonsoir (bonjour) ledzepfred

sendkeys : fonctionne pas car plusieurs Msgbox

Est-ce bien sûr panard01 ?

Il y a peut-être dans le code une boucle qui ouvre successivement plusieurs fichiers.

Le Sendkeys doit alors être dans la boucle (pas à l'extérieur) avant l'ordre d'ouverture du fichier.

Merci de vérifier si c'est le cas.

Edit : je traine pour envoyer mes posts, alors... Bon, au lit.

A+
 
Dernière édition:

ledzepfred

XLDnaute Impliqué
Re : Fermeture automatique d'une MsgBox

encore moi :

lien trouvé sur Excelabo Désactiver par VBA les macros d'un autre classeur | www.excelabo.net

bizarre car selon ce site et d'autres (notamment des posts sur XLD ou sur le site de fred Sigonneau), il semble que
Code:
 Application.EnableEvents = False  
Workbook.Open "C:\le_classeur.xls"  
Application.EnableEvents = True
fonctionne

le lien fourni propose une autre méthode (à tester)

'Procédure appelante

Code:
sub OuvrirFichierSansActiverLesMacros()
  OpenFileWithoutMacro "C:\Mes documents", "Classeuravecmacros.xls"
 end sub
Code:
sub OpenFileWithoutMacro(Chemin As String, Fichier As String)
 
 'Désactive complètement l'exécution des macros du fichier.
 'N'affecte pas le comportement des autres fichiers ouverts.
 'Cette procédure doit être appelée à partir de la feuille
 'de calcul et non de la fenêtre VBE à cause des commandes
 
 'Les 2 commandes suivantes s'assurent que
 'la fenêtre "Open" pointe vers le bon répertoire
 SendKeys "{esc}"
 Application.Dialogs(xlDialogOpen).Show Chemin
 
 'Ouvre le fichier en désactivant la macro. 
 SendKeys "%Fo" & Fichier & "%od" 
 
 
 end sub

Edit : job75, tu n'es pas le seul à être à la bourre, t'as raison, une tite tape sur les fesses et au lit
 
Dernière édition:

Statistiques des forums

Discussions
312 699
Messages
2 091 105
Membres
104 761
dernier inscrit
Dudus