XL 2013 Impossible d'accéder à un classeur ouvert

ericTA

XLDnaute Occasionnel
Bonjour à tous,
Voici mon problème, depuis Word j'ouvre un fichier excel "Devis.xlsm".
Quand je suis dans ce fichier Devis celui-ci ouvre un autre classeur "Tarif.xlsm" pour récupère des références et prix de produits que je copie dans Devis.
Quand j'ai fini, je ferme mon classeur Devis et mon fichier word, mais le classeur Tarif reste ouvert.
Quand je refais un autre devis, j'ouvre mon nouveau fichier excel Devis, qui fais appel au classeur Tarif mais celui-ci ne le voit pas, comme si il n'était pas ouvert, alors qu'il est bien dans la barre de tache.
Une petite explication ?

voici le code word pour ouvrir le fichier excel Devis :
Dim App As Object
' code
Set App = CreateObject("Excel.Application")
With App
.Workbooks.Open DocDevis.FichierExcel ' c'est la variable qui contient le nom du fichier Devis
.Visible = True
End With

Quand je regarde dans le gestionnaire de tache il y à 2 fois excel de lancé.

Et dans excel quand je test si le classeur Tarif est ouvert, pour lui il est fermé.
est quand je cherche à récupérer une valeur il plante (normal il ne le voit pas)
ex
DerniereLigne = Workbooks("Tarif.xlsm").Sheets(NomDeLAFeuilleExcel).Cells(65536, NumDeLaColonneRechercheDernierLigne).End(xlUp).Row + 1

Si vous avez une idée merci d'avance pour votre aide.
Cordialement
Eric
 

CHRIS1945

XLDnaute Occasionnel
Bonjour,
Tel que tu décris ton application, tu te retrouves avec 2 fois le logiciel Excel ouvert en mémoire :
une fois pour gérer le fichier tarif et une fois pour gérer le nouveau devis. L'Excel qui gère le nouveau devis n'a pas pu ouvrir le tarif car il a constaté qu'il était déjà occupé par un autre utilisateur (toi sur l'autre Excel ouvert). Donc ton Excel "Devis" ne peut pas accéder aux informations du fichier Tarif.
Comment faire : je ne sais pas comment tu arrêtes le déroulement de ton application mais c'est là où est le problème. Il faut que ton fichier Tarif se ferme. Si tu te contentes de fermer en cliquant sur fermer dans word et excel devis c'est normal que Tarif reste ouvert. Si tu veux rester en manuel (pas gérer par VBA) il faut que tu veilles à fermer ton classeur Tarif AVANT de lancer un nouveau devis. Je pense que cela devrait marcher. Si pas, il faudrait envoyer un extrait de tes fichiers (avec des informations bidons) pour que nous puissions mieux comprendre ce qui se passe
A+
Chris
 

ericTA

XLDnaute Occasionnel
Merci Chris,
J'ai bien pensé à cette solution, mais ce que je ne comprends pas, c'est que ça marché avant.
Même pire, pour palier au problème de savoir si le fichier Tarif était ouvert je l'ouvrait au lancement de Windows et quand je faisait appel à lui il le voyait bien!!!

Pour contourner le problème, il y a t il un moyen de lancer le nouveau fichier Devis dans l'Excel déjà ouvert qui contient le classeur Tarif si celui-ci est déjà ouvert, cela devrait résoudre le problème non ?

En deux mots détecter que Excel est déjà ouvert et lancer le fichier devis à partir de celui-ci.
Merci d'avance
Eric
 

ericTA

XLDnaute Occasionnel
En écrivant ma réponse,
je me suis dit, bizarre avant ça marché.
J'ai retrouvé un l'ancien code est j'ai trouvé la solution.

Dans la macro word il faut changer :
Set App = CreateObject("Excel.Application")
par
Set App = GetObject(, "Excel.Application")

et là, il ouvre le devis dans l'excel déjà ouvert.
Merci encore pour votre aide précieuse.
Cordialement
Eric
 

ericTA

XLDnaute Occasionnel
pour finir la discussion,
voici le code Word final qui test si Excel est déjà lancé sinon lance le devis (ou autre fichier Excel) dans une nouvelle instance Excel :

On Error Resume Next
Set App = GetObject(, "Excel.Application")
If Err.Number <> 0 Then Set App = CreateObject("Excel.Application")
Err.Clear

With App
.Workbooks.Open NomDuFichierExcelAOuvrir
.Visible = True
End With

et voici comment écrire des valeurs dans le ficher Excel qu'on vient d'ouvrir

App.Sheets("NomDeLaFeuille").Range("A4").Value = "Toto"

ou si la cellule à un nom

App.Sheets("NomDeLaFeuille").Range("NomDeLaCellule").Value = "Toto"

Set App = Nothing
 

Discussions similaires

Réponses
19
Affichages
549
Réponses
8
Affichages
453

Statistiques des forums

Discussions
312 206
Messages
2 086 201
Membres
103 156
dernier inscrit
Ludo94130