Passer d'1 classeur à 1 autre

Thierry37

XLDnaute Junior
Bonjour comme mon fichier macro ne passait pas (contrôle antivirus du réseau) et que ça a planté, je reposte...

Bonjour,

Voilà, j'ai essayé de faire une macro directement par un code vba mais je ne suis que débutant et je ne comprends pas tout de ce langage et de sa logique.

Question : existe t-il un bouquin clair, précis et facile à comprendre pour un peu mieux maîtriser le VBA ?

J'ai donc bidouiller ceci :

Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 26/10/2005 par Thierry-00430
'
Range(A1).Select
If Workbook('principal.xls').Open Then
Workbook('principal.xls').Select
Range(A1).Select
Next
Workbook('secondaire.xls').Close

'
End Sub

Mon problème à l'origine : fichier principal trop lourd et trop complexe générant des erreurs mémoires que j'ai solutionné en le scindant en 2.

Problème : comment passer de l'un à l'autre ? J'ai solutionné le truc en faisant des liens hypertextes entre les deux fichiers qui sont sur le réseau.

Ok, j'ai fais des liens mais problème : lorsque je passe du principal pour aller au secondaire puis du secondaire vers le principal, le secondaire reste ouvert... et j'aimerais qu'il se ferme.

Mon objectif :

Passer du secondaire au principal tout en fermant le secondaire (sans qu'il me demande de sauvegarder : les utilisateurs sont en lecture seule). Comme ça je n'ai que le principal comme fichier actif.

Problème : il faut vérifier que le principal soit ouvert, s''il ne l'est pas alors il faut l'ouvrir et fermer le secondaire. Je précise que les fichiers étant sur le réseau le secondaire peut être ouvert avant le principal même s'il n'ont pas tout à faire le même nom).

J'espère avoir bien expliqué je que je souhaitais faire.
Merci de me dire ce que je n'ai pas bien fait dans ma macro et encore merci d'avance pour votre aide.
bonne journée à tous,

Thierry
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Thierry, bonjour le forum,

Inutile de multiplier tes posts pour obtenir une réponse. Avec un peu de patience tu y arrives aussi, la preuve je t'avais apporté une possibilité
Lien supprimé. Si tu as un moment regarde la charte du forum (c'est le premier ou second fil de la liste...).
 

Thierry37

XLDnaute Junior
Bonjour Robert,

Merci pour ton aide Robert, mais non je n'ai pas voulu faire preuve d'impatience, c'est juste que le post de mon premier message à caffouillé et je me suis retrouvé visiteur...

Donc mille excuses, en tout cas je sais bien que la patience est de mise avec Excel... ;-)

J'ai regardé la macro mais je ne l'ai pas essayée.
Toutefois, j'ai une interrogation :

le Workbooks.open (principal.xls) ouvre le classeur mais si celui-ci est déjà ouvert ?
Peut-ton faire un test et s'il est fermé l'ouvrir.

Sinon peut-on ouvrir puis choisir la cellule A1.
Ne faut pas que j'inverse les lignes ?

workbooks.open ('principal.xls')
range ('A1').select (du classeur principal)

Merci pour ton éclairage.
A+

Thierry
 

Thierry37

XLDnaute Junior
Re-bonjour Robert mais aussi tous les autres xlnautes !

Je viens d'essayer la macro proposée, elle fonctionne à merveille entre mes 2 fichiers de test (Principal et secondaire) mais en l’adaptant à mon fichier de travail, j'ai rencontré quelques problèmes :
J'ai donc saisie la macro suivante :

Sub Retour_accueil()
Workbooks.Open ('F:\\Tableau de bord\\TBP 2005.xls') >>> à priori ça fonctionne, le fichier s’ouvreRange('A1').Select
Workbooks('F:\\Tableau de bord\\TBP 2005 psp.xls').Close >>> problème « erreur d’exécution n°9 »end sub

J’ai eu aussi le message suivant :

'le TBP 2005 est déjà ouvert , si vous l'ouvrez à nouveau...'

Si non, j’ai une erreur d’exécution n°9 et la macro ne ferme pas le fichier « TBP 2005 psp ».
Si je sélectionne oui, rien ne se passe. J’accède quand même au fichier TBP 2005.

J’ai fait la manip suivante :

Tous les fichiers sont fermés.
J’ouvre le TBP 2005.
Je clique sur le lien hypertexte qui m’envoie vers le fichier TBP 2005 psp qui s’ouvre.
Je clique sur le bouton et bingo, j’ai l’erreur d’exécution 1004 :
« la méthode open de l’objet workbooks a échoué »

Y aurait-il un problème de chemin d’accès ?
Merci pour votre aide car je n’y comprends plus rien…
A+

Thierry
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour cher homonyme, Rober, le Forum

Ah doublon de Fil, ce n'est pas bien ça Thierry !

Sinon pour une première base, je te conseille d'analyser ce code :

Option Explicit

Private Function TestWorkBook(WBString As String) As Boolean
Dim WB As Workbook
On Error Resume Next
Set WB = Workbooks(WBString)
   
If Err.Number <> 0 Then
&nbsp; &nbsp; &nbsp; &nbsp; TestWorkBook =
False
&nbsp; &nbsp;
Else
&nbsp; &nbsp; &nbsp; &nbsp; TestWorkBook =
True
&nbsp; &nbsp;
End If
End Function


Sub TestIfWorkBookIsOpen()
Dim WBString As String
WBString = 'principal.xls'

MsgBox 'Le Classeur ' & WBString & ' est il ouvert ? : ' & TestWorkBook(WBString)

End Sub

En effet, plus au moins inspiré de la méthode d'un très grand Thierry (Ti_) de ce Forum, la Function 'TestWorkBook' te permettra de savoir si ton Classeur 'principal.xls' est déjà ouvert ou pas...

Le retour d'information est une Boolean (Valeur Vraie ou Fausse).

Le concept est assez simple, on essaie de faire un Set d'Object sur le Classeur Principal.xls, si il est ouvert, la Boolean sera 'Vraie' puisqu'il n'y aura pas d'erreur (Err.Number = 0) par contre si il n'est pas ouvert la Boolean sera Fausse il y aura une erreur qui aura un numéro (Err.Number <> 0)...

A partir de là on sait si le Classeur est ouvert ou non...

Revoici la même procédure, implémentée pour correspondre un peu plus à ton besoin :

Option Explicit
Const ThePath As String = 'C:\Documents and Settings\TE\Local Settings\Temp\'

Private Function TestWorkBook(WBString As String) As Boolean
Dim WB As Workbook
On Error Resume Next
Set WB = Workbooks(WBString)
&nbsp; &nbsp;
If Err.Number <> 0 Then
&nbsp; &nbsp; &nbsp; &nbsp; TestWorkBook =
False
&nbsp; &nbsp;
Else
&nbsp; &nbsp; &nbsp; &nbsp; TestWorkBook =
True
&nbsp; &nbsp;
End If
End Function


Sub TestIfWorkBookIsOpen()
Dim WBString As String

WBString = 'USF_ADO_Calculs_Collector_V01_03.xls'

&nbsp; &nbsp;
If TestWorkBook(WBString) = False Then
&nbsp; &nbsp; &nbsp; &nbsp; Workbooks.Open ThePath & WBString
&nbsp; &nbsp;
Else
&nbsp; &nbsp; &nbsp; &nbsp; Workbooks(WBString).Activate
&nbsp; &nbsp;
End If

End Sub

Bon Aprèm
[ol]@+Thierry[/ol]
 

Thierry37

XLDnaute Junior
Bonjour Thierry

Je viens d'ouvrir le message, et j'avoue de prime abord que je n'ai pas tout compris.
J'pensais pas qu'ça pouvait être tout compliqué comme ça mon truc !!!

Peut-être me suis-je pas bien expliqué, mais je souhaite que la vérification, pour savoir si mon fichier principal est ouvert ,se fasse de façon transparente.
C'est à Excel de le savoir et si le fichier n'est pas ouvert la macro l'ouvre pour que l'utilisateur puisse revenir sur le fichier principal (chez moi : TBP 2005).
hé, hop, ni vu ni connu ! l'utilisateur ne s'aperçoit pas que le fichier secondaire s'est refermé.
Et s'il veut y revenir, il se retrouve sur la page d'accueil du fichier principal ou il y a un menu avec tous les liens hypertextes.

Donc la box qui pose la question n'est pas forcément obligatoire.
Je pensais qu'une formule avec un if then else pouvait faire l'affaire.
Ceci dit je vais essayé la macro pour voir comment elle fonctionne.
Je te tiens informé de ce formidable feuilleton !!! ;-)
Bonne fin d'après-midi,
A+

Thierry (gloups... !)
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 914
Membres
103 983
dernier inscrit
AlbertCouillard