Ouvrir un classeur en arrière plan

benoua

XLDnaute Occasionnel
Bonjour à tous.

Je développe actuellement un petit système comportant plusieurs fichiers et je voudrai centraliser les macros dans un seul classeur. Pour cela j'avais d'abord pensé à un système qui permette, depuis le fichier principal par l'intermédiaire d'un menu déroulant, de sélectionner le fichier que l'on souhaite ouvrir, comme cela le classeur principal reste ouvert. Cela implique juste de toujours passer par le classeur principal pour ouvrir les autres fichiers. Pas de problème, la macro fonctionne, sauf que la macro plante régulièrement, sans raison, elle affiche un message "Problème Accès Chemin/Fichier" sans raison particulière et Excel plante puis redémarre ensuite mais cette fois si sans charger les macros...

Bref après une tentative de sauvetage de ce système, j'envisage désormais de placer une petite ligne de commande dans Workbook_Open pour lancer ce classeur en arrière plan et qu'ainsi les macros se chargent. Sauf que je ne connais pas cette commande alors je sollicite votre aide!:)
Je souhaiterai ouvrir ce classeur au lancement d'un autre fichier, mais qu'il ne s'affiche pas.

Merci d'avance!;)

P.S. : j'ajoute que je n'ai trouvé aucun système permettant d'afficher une fenêtre d'explorateur de dossiers via une macro, si quelqu'un sait comment m'aider pour cela, je susi tout à fait preneur!

P.S. 2 : Mon système actuel fonctionnait de la manière suivante :
Une liste des fichiers dans une feuille, "Liste_Affaire" (Row Source)
Une liste déroulante qui reprend cette liste dans une UF.
Une cellule Affaire_Choisie dans laquelle est renvoyée le fichier choisi. (Controle Source)
Une constante "Chemin" qui désigne le répertoire où se trouvent tout ces fichiers.
Un bouton qui lance la macro :
OpenFile = Range("AFFAIRE_Choisie")
ChDir (Chemin)
Workbooks.Open (OpenFile)
si vous voyez un truc qui pourrait provoquer ce bugue, je suis à l'écoute également. ;)
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Ouvrir un classeur en arrière plan

Bonjour benoua,

1 -
Je souhaiterai ouvrir ce classeur au lancement d'un autre fichier, mais qu'il ne s'affiche pas
une solution serait peut-être de transformer ton classeur central en macro complémentaire (fichier .xla). Il serait toujours chargé dans Excel mais tu pourrais faire un test sur le nom du fichier ouvert pour lancer ou non tes macros...

2-
j'ajoute que je n'ai trouvé aucun système permettant d'afficher une fenêtre d'explorateur de dossiers via une macro, si quelqu'un sait comment m'aider pour cela, je susi tout à fait preneur!

Dim FD as filedialog
set FD= Application.FileDialog(msoFileDialogFolderPicker)
FD.allowMultiSelect = False
if FD.Show <> 0 then
Msgbox FD.selectedItems(1)
end if

3-
si vous voyez un truc qui pourrait provoquer ce bugue
Peut-être :
Workbooks.Open (Chemin & "\" & OpenFile)
 

benoua

XLDnaute Occasionnel
Re : Ouvrir un classeur en arrière plan

Alors ça si c'est pas de la réponse de folie, qu'est ce que c'est!! :D
Merci beaucoup, j'vais essayer les 2 dernières en priorité car plus de mon niveau mais j'reviendrai peut etre te poser des questions sur les .xla que je ne connais pas!
Merci pour tout encore!
 

lermite

XLDnaute Nouveau
Re : Ouvrir un classeur en arrière plan

Bonjour le fil,
Reste juste que si tu met tes macros dans le fichier xla, il mémorise aussi toutes les barres d'outils.
Tu devra éventuellement mettre ton fichier xla sur les postes qui serront déservit par ton appli. et s'ils ont, par exemple ajouter des barres d'outils elles ne seront plus disponnibles vu que tu auras remplacer leurs fichier xla.
Solution valable si tu est le seul à utiliser cette appli.
Une autre façon d'ouvrir un fichier.
Code:
Sub OuvrirFichier()
    Dim F
    F = Application.GetOpenFilename("Fichiers Excel (*.xls), *.xls")
    If VarType(F) = vbBoolean Then
        MsgBox "Opération annulée"
    Else
        Workbooks.OpenText F 'Préciser ici les parametres de l'importation
    End If
    
End Sub
Autre remarque,
OpenFile = Range("AFFAIRE_Choisie")
ChDir (Chemin)
Workbooks.Open (OpenFile)
Si le chdir est sur un autre DD tu doit précéder ton ChDir de..
ChDrive ("D:\") par exemple.
Cordialement
 
Dernière édition:

benoua

XLDnaute Occasionnel
Re : Ouvrir un classeur en arrière plan

Re tous!
Tout d'abord merci poru vos réponses!
Je pense que je vais éviter le xla, parce que ce fichier est destiné à servir pour plusieurs postes et j'ose pas trop tenter quelque chose surtotu qu'ils ont déjà une macro complémentaire... Je vais rester dans ce que je sais faire, c'est plus prudent! :)
Autrement, la solution 3 proposée par tototiti a fonctionné... sauf que désormais le fichier plante dès l'ouverture... Je ne peux plus rien faire, même pas accéder aux macros... :/
J'avais fait une sauvegarde il n'y a pas longtemps donc l'incident est minime mais je ne comprends pas pourquoi ce système plante! A noter que sur Excel 2007 il tourne parfaitement que ce soit avec la nouvelle ou l'ancienne méthode! (au passage merci pour la précision lermite mais pas de souci à ce niveau là, il n'y a pas de changement de disque ;))

Je pense que je vais m'orienter vers la solution 2 de tototiti et la fenetre d'explorateur de fichier, l'idéal aurait été de pouvoir choisir le répértoire par défaut mais là j'pense que j'en demande trop! :D

Sinon pour ma question de base, il existe une commande qui pourrait marcher dans Workbook_Open pour lancer un autre classeur en arrière plan à l'execution? Je vais peut être m'orienté vers ca plus tard j'aimerai avoir lacommande s'il existe! :)

Merci à tous encore une fois,

++

ben
 

tototiti2008

XLDnaute Barbatruc
Re : Ouvrir un classeur en arrière plan

Bonjour à tous,

Choix du dossier par défaut :

Dim FD as filedialog
set FD= Application.FileDialog(msoFileDialogFolderPicker)
FD.allowMultiSelect = False
FD.InitialFileName = "C:\Temp"
if FD.Show <> 0 then
Msgbox FD.selectedItems(1)
end if

Concernant les macros complémentaires, quelques précisions :
Un fichier .xla peut trés bien se trouver sur un disque réseau, de manière à ce que chaque poste pointe sur le même fichier. Ainsi les futures modifications seront répercutées pour chaque utilisateur.
On peut charger plusieurs macros complémentaires dans Excel, le seul risque étant d'allourdir le lancement d'Excel (sauf cas trés spécifique).


il existe une commande qui pourrait marcher dans Workbook_Open pour lancer un autre classeur en arrière plan à l'execution?

En général ça demande d'ouvrir le classeur concerné, ce qui semble justement poser problème chez toi actuellement... j'ignore pourquoi.
 

tototiti2008

XLDnaute Barbatruc
Re : Ouvrir un classeur en arrière plan

je croyais que tu voulais explorer les dossiers, pas les fichiers...

pour choisir un fichier, remplace
set FD= Application.FileDialog(msoFileDialogFolderPicker)

par

set FD= Application.FileDialog(msoFileDialogFilePicker)
 

benoua

XLDnaute Occasionnel
Re : Ouvrir un classeur en arrière plan

Je viens d'essayer de créer un fichier xla, ca marceh niquel, il se lance bien au démarrage de n'importe quel classeur. pas de souci a priori s'il se lance pour n'importe quel classeur pour les futurs utilisateurs, même ceux qui n'auront pas besoin des macros présentes.
Pour le problème du partage, a priori ca devrait être bon également, ils ont un disque de partage qu'ils utilisent tous, ca devrait pour coller. Je vais peut être finalemetn opter pour cette solution :)
Mon seul souci c'est que je ne sais pas comment associer un bouton ou autre à une macro qui est dans ce classeur... j'ai placé une macro test() dans mon classeur test.xla et quand créé un bouton dans un nouveau classeur je n'arrive pas à faire en sorte que ce bouton lance la macro test()... Comment faire?
 

benoua

XLDnaute Occasionnel
Re : Ouvrir un classeur en arrière plan

je croyais que tu voulais explorer les dossiers, pas les fichiers...

pour choisir un fichier, remplace
set FD= Application.FileDialog(msoFileDialogFolderPicker)

par

set FD= Application.FileDialog(msoFileDialogFilePicker)

ah oui autant pour moi j'm'étais mal expliqué!;)
Et si j'avais lu un peu plus attentivement le code j'aurai pu trouver la réponse tout seul..:eek:
Merci pour ton aide en tout cas!:)
 

tototiti2008

XLDnaute Barbatruc
Re : Ouvrir un classeur en arrière plan

Le mieux :
dans ta macro complémentaire (dans l'éditeur Visual Basic)
Propriétés du projet : à la place de VBAProject, donne un nom particulier au projet (par exemple VBMonProjet)
Module contenant les macros : à la place de Module1, donne des noms reconnaissables aux modules (Par exemple ModPerso)

Pour affecter un bouton à la macro test, pour ton bouton, dans Affecter une macro, écris :
VBMonProjet.ModPerso.test
 

tototiti2008

XLDnaute Barbatruc
Re : Ouvrir un classeur en arrière plan

ahh, une petite remarque tant que j'y pense : lorsque tu "installes" une macro complémentaire située sur le réseau sur différents postes, il te demandera quelque chose du type "Copier la macro complémentaire dans la bibliothèque...". Il faut répondre Non, sinon il te fait une copie du .xla en local sur le poste et ça ne suivra pas tes modifications futures.
 

Discussions similaires

Réponses
19
Affichages
637

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 413
Messages
2 088 199
Membres
103 763
dernier inscrit
p.michaux