Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
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.
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".
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.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD