Liaison de fichier

kiff77

XLDnaute Junior
Bonjour à tous,

J'ai cherché sur le forum mais je n'ai trouvé mon bonheur.
Voilà mon problème:

J'ai 15 fichiers
Fichier 1=fichier de compil global
Fichier 2 & Fichier 3=Compil d'un secteur
Fichier 4, fichier 5, fichier 6 et fichier 7 = Compil de groupe
Fichier 8, Fichier 9, Fichier 10, Fichier 11, Fichier 12, Fichier 13, Fichier 14, Fichier 15=Fichiers de saisie

Les fichiers compil de groupe sont liés (par recherchev()) avec les fichiers de saisies.
Les fichiers compil de secteur sont liés avec les fichiers de compil de groupes.
Le fichier de compil global est lié avec le fichier compil d'un secteur.

Je souhaiterai que les fichiers compil se mettent à jour sans que je sois obligé d'ouvrir les fichiers qui le mettent à jour.

Je pensais mettre une macro avant la fermeture des fichiers de saisies qui mettrait à jour tous les fichiers. Je ne vois pas comment mettre à jour des liaisons qui ne se trouvent pas dans le classeur ouvert.

Tous ces fichiers ne se trouvent pas le même répertoire.

Merci d'avance pour votre aide.
A+
Kiff
 

PMO2

XLDnaute Accro
Re : Liaison de fichier

Bonjour,

J'ai créé, sur ma machine, 4 classeurs nommés respectivement 1.xls, 2.xls, 3.xls, 4.xls qui correspondent aux 4 niveaux que vous décrivez (soit respectivement saisie, groupe, secteur, global).

J'ai disséminé ces classeurs dans différents dossiers
a) 1.xls sur le bureau
b) 2.xls dans C:
c) 3.xls dans C:\Program Files
d) 4.xls dans C:\WINDOWS

J'ai lié :
a) la cellule A1 de 4.xls à la cellule A1 de 3.xls
b) la cellule A1 de 3.xls à la cellule A1 de 2.xls
c) la cellule A1 de 2.xls à la cellule A1 de 1.xls

Dans 1.xls (classeur de saisies) j'ai tapé une valeur quelconque dans A1
et j'ai mis ce code dans ThisWorkbook
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim WB As Workbook
Dim classeurs
Dim i&

'--- Mettre les chemins des classeurs du plus bas niveau jusqu'au ---
'--- plus haut niveau(les groupes, les secteurs, le global)       ---
classeurs = Array("c:\2.xls", "c:\Program files\3.xls", "C:\WINDOWS\4.xls")
'--------------------------------------------------------------------

Application.ScreenUpdating = False
For i& = LBound(classeurs) To UBound(classeurs)
  Set WB = GetObject(classeurs(i&))
  WB.Windows(1).Visible = True
  WB.Save
  WB.Close
  Set WB = Nothing
Next i&
Application.ScreenUpdating = True
End Sub
Chaque fois que l'utilisateur sauvegardera le classeur tous les classeurs qui en dépendent
seront sauvegardés en cascade (du plus bas niveau au plus haut niveau - d'abord les classeurs
Groupe, ensuite les classeurs Secteur et enfin le classeur Global).

Faites le même test et si cela vous convient il n'y aura plus qu'à copier le code dans le ThisWorkbook de tous les classeurs de saisies en ayant, préalablement, adapté la variable Variant "classeurs".

Cordialement.

PMO
Patrick Morange
 

kiff77

XLDnaute Junior
Re : Liaison de fichier

Bonjour,

Merci pour ta réponse, ça marche nickel.

Par contre je pense que je ne pourrai pas utiliser ce code pour plusieurs raisons :
- le fichier met trop longtemps à se fermer
- problème de confidentialité (tous les fichiers compil s'ouvrent)
- tous mes fichiers sont protégé par mot de passe avec la macro ci-dessous (trouvée sur le forum):

Code:
Private Sub Workbook_Open()
ActiveWorkbook.Unprotect Password:="MDP"
Sheets("feuil1").Visible = True
Sheets("feuil2").Visible = False
ActiveWorkbook.Protect Password:="MDP"
Call mots_de_passe
Sheets(3).Select
Range("a5").Select
End Sub
____________________________________________
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Unprotect Password:="MDP"
Sheets("feuil1").Visible = True
Sheets("feuil2").Visible = False
ActiveWorkbook.Protect Password:="MDP"
ActiveWorkbook.Save
End Sub
_____________________________________________
Sub mots_de_passe()
ActiveWorkbook.Unprotect Password:="MDP"
Dim Password As String
     Dim feuille As Object
     Dim activeworksheet As Object
     Password = LCase(InputBox("Tapez votre mot de passe, ou exit pour sortir :", _
                              "Mot de Passe"))
                               Select Case Password
          Case "MDP1"
          
               For Each feuille In ActiveWorkbook.Sheets
                    feuille.Visible = True
                    Next
                    Case "MDP2"
                   Sheets("Feuil2").Visible = True
                   Sheets("feuil1").Visible = False
                                   
                    
                      Case "exit"
            Application.DisplayAlerts = False
            ActiveWorkbook.Close
            Application.DisplayAlerts = True
            Application.Quit          
          Case Else
               MsgBox "Mot de passe incorrect. Recommencez."
               'On boucle
               mots_de_passe
     End Select
     ActiveWorkbook.Protect Password:="MDP"

End Sub
______________________________________________
Je ne sais pas si il existe vraiment une solution à mon problème. Je pense qu'il faut que je revoit le déversement des fichiers saisies dans les fichiers compil.

Si il y a d'autres solutions, je suis preneur.

Encore merci
A+
Kiff
 

Discussions similaires

Réponses
7
Affichages
558

Statistiques des forums

Discussions
312 504
Messages
2 089 072
Membres
104 018
dernier inscrit
Mzghal