Mise à jour des liaisons et calcul (2 processeurs)
Bonjour bonjour,
c'est encore moi
Je viens vers vous car j'ai constitué un dossier qui dès l'ouverture demande à l'utilisateur son nom d'utilisateur et son mdp.
Cependant à l'ouverture se message apparait:
Ce classeur compoter des liaisons avec un autre classeur.
Si vous mettez les liaisons à jour, Excel tente de récupérer les dernières données.
Si vous ne mettez pas à jour, Excel utilise les informations précédentes....
Le problème étant que lorsque je met à jour, il y a un calcul( 2processeurs ) qui se met en place et cela est plutôt lent .... J'aimerais pouvoir faire une ouverture instantanée.
Surtout le gros problème est que ces messages s'ouvrent avant même la demande du mot de passe et en même temps l'utilisateurs a en arrière plan une feuille avec des données au lieu d'avoir la feuille "vierge" que j'utilise dans mon code ci-dessous.
Voici mon code pour la gestion des mdp : ( comme vous pouvez le voir j'ai tout tenté, application.EnableEvents / application.ScreenUpdating/ application.calculation, mais le résultat est toujours le même).
Private Sub Workbook_Open()
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
On Error Resume Next
'on defini un pointeur
Pointeur = 0
'on affiche la feuille Vierge
Sheets("Vierge").Visible = True
'on va dessus
Sheets("Vierge").Activate
'on planque toutes les autres
For x = 1 To ThisWorkbook.Sheets.Count
If Sheets(x).Name <> "Vierge" Then Sheets(x).Visible = xlSheetVeryHidden
Next
'on saisit le user
User = InputBox("Veuillez saisir votre nom d'utilisateur", "Utilisateur")
'on saisit le mot de passe
MDP = InputBox("Veuillez saisir votre mot de passe", "Mot de passe")
'Derniere ligne du tableau de la feuille DroitsUsers pour boucler dessus
DerLigne = Sheets("DroitsUsers").Range("A65536").End(xlUp).Row
'on boucle pour trouver les occurences, x=2 car je pars du principe que la premiere ligne contient les entetes de colonne
For x = 2 To DerLigne
'si ce qu'il y a dans la colonne1 (Colonne A : user) = le user saisi ET ce qu'il y a dans la colonne2 (Colonne B : mot de passe)
If Worksheets("DroitsUsers").Cells(x, 1) = User And Worksheets("DroitsUsers").Cells(x, 2) = MDP Then
'on affiche la feuille définié en colonne3 (Colonne C : Onglet autorisé)
'on affiche la feuille correspondante
FeuilleVisible = Worksheets("DroitsUsers").Cells(x, 3)
Sheets(FeuilleVisible).Visible = True
'on va dessus
Sheets(FeuilleVisible).Activate
'on se met un pointeur pour voir si on trouve quelque chose, si on trouve rien on quittera
Pointeur = Pointeur + 1
End If
Next x
'Si le pointeur est 0 on ferme le fichier
If Pointeur = 0 Then
MsgBox "Utilisateur ou mot de passe non valide" & vbCrLf & vbCrLf & "Le fichier va se fermer", vbCritical + vbOKOnly, "Sécurité"
ActiveWorkbook.Close SaveChanges:=False
End If
'on planque la feuille Vierge
Sheets("Vierge").Visible = 2
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End SubJ'utilise aussi un code comme celui-ci par feuille :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveSheet.Name <> "Feuil3" Then
ActiveSheet.Name = "Feuil3"
End If
End SubEt celui ci :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'on affiche la feuille Vierge3
Sheets("Vierge").Visible = True
'on planque toutes les autres feuilles sauf Vierge
For x = 1 To ThisWorkbook.Sheets.Count
If Sheets(x).Name <> "Vierge" Then Sheets(x).Visible = xlSheetVeryHidden
Next
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End SubJe vous remercie d'avance pour le temps consacré à mon petit soucis !