nettoyage de macro (execution trop longue)

chac-attack

XLDnaute Nouveau
Bonjour le forum,

j'ai une petite requète pour vous, j'ai une macro qui est un peu longuette et je souhaiterai qu'a l'ouverture ainsi qu'a la fermeture, elle prenne moins de temps. Pourriez-vous y jetter un oeil afin de la nettoyer un peu?

Dans Thisworkbook

Option Explicit
Dim mafeuil As Worksheet
Dim personneloguee As String
Dim personneutilisatrice As String

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet barre menu
Dim cbar As CommandBar
Dim i As Byte
'
For Each cbar In Application.CommandBars
If cbar.BuiltIn = True Then
If cbar.Enabled = False Then cbar.Enabled = True
End If
Next cbar
ActiveWindow.DisplayHeadings = True
Range("a1:p51").Select
ActiveWindow.Zoom = False
'
With Application
.DisplayFullScreen = False
.DisplayStatusBar = True
.DisplayFormulaBar = True
End With

'
Application.ScreenUpdating = False
Sheets("menu").Activate
With Application
.CommandBars(1).Enabled = True
.DisplayFullScreen = False
End With
With ActiveWindow
.DisplayHeadings = True
.DisplayOutline = True
.DisplayWorkbookTabs = True
.DisplayHorizontalScrollBar = True
.DisplayVerticalScrollBar = True
End With
fermeture_fichier

ThisWorkbook.Save

End Sub


Private Sub Workbook_Open()
'enlève barre de menu
Dim cbar As CommandBar
Dim i As Byte
'
For Each cbar In Application.CommandBars
If cbar.BuiltIn = True Then
If cbar.Enabled = False Then cbar.Enabled = True
End If
Next cbar
ActiveWindow.DisplayHeadings = False
Range("a1:p51").Select
ActiveWindow.Zoom = True
'
With Application
.DisplayFullScreen = True
.DisplayStatusBar = False
.DisplayFormulaBar = False
With .CommandBars("worksheet menu bar")
.Enabled = False
.Visible = True
End With
With .CommandBars("cell")
.Enabled = False
End With
End With
'
Application.ScreenUpdating = False
Sheets("menu").Activate
With Application
.CommandBars(1).Enabled = False
.DisplayFullScreen = True
End With
With ActiveWindow
.DisplayHeadings = False
.DisplayOutline = False
.DisplayWorkbookTabs = False
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
End With
Application.ScreenUpdating = True
Sheets("menu (2)").Select
Sheets("menu").Select

'accès administrateur

Application.ScreenUpdating = False
personneloguee = Environ("username")
personneutilisatrice = Application.UserName
'
If personneloguee = "Administrateur" Then
For Each mafeuil In Worksheets
mafeuil.Visible = True
mafeuil.Select
ActiveSheet.Unprotect Password:="admin"
Next mafeuil
Sheets("menu").Select
Else
On Error Resume Next
Sheets("création de liste").Visible = True
Sheets("menu").Activate
Sheets("renseignements brh").Visible = False
Sheets("suivi médical recrue").Visible = False
Sheets("prêt bsp").Visible = True
Sheets("liste de section").Visible = True
End If
End Sub

Function fermeture_fichier()
For Each mafeuil In Worksheets
mafeuil.Visible = True
mafeuil.Select
ActiveSheet.Protect Password:="admin"
Next mafeuil
End Function

ensuite dans chaques feuille j'ai cette macro:

Private Sub Worksheet_Activate()

Dim cbar As CommandBar
Dim i As Byte
'
For Each cbar In Application.CommandBars
If cbar.BuiltIn = True Then
If cbar.Enabled = False Then cbar.Enabled = True
End If
Next cbar
ActiveWindow.DisplayHeadings = False
Range("a1:p51").Select
ActiveWindow.Zoom = True
'
With Application
.DisplayFullScreen = True
.DisplayStatusBar = False
.DisplayFormulaBar = False
With .CommandBars("worksheet menu bar")
.Enabled = False
.Visible = True
End With
With .CommandBars("cell")
.Enabled = False
End With
End With
'
Application.ScreenUpdating = False
Sheets("menu (6)").Activate
With Application
.CommandBars(1).Enabled = False
.DisplayFullScreen = True
End With
With ActiveWindow
.DisplayHeadings = False
.DisplayOutline = False
.DisplayWorkbookTabs = False
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
End With
Application.ScreenUpdating = True

End Sub

Voilà j'ai regardé différents fil mais je ne comprends pas comment remplacer les .select etc...

merci d'avance

Chac-attack;)
 

vbacrumble

XLDnaute Accro
Re : nettoyage de macro (execution trop longue)

Bonsoir


Un peti exemple pour te montrer comment éviter un Select

A la place de
Code:
If personneloguee = "Administrateur" Then
For Each mafeuil In Worksheets
mafeuil.Visible = True
mafeuil.Select
ActiveSheet.Unprotect Password:="admin"
Next mafeuil
Sheets("menu").Select
Else

je verrais bien (avec en début de code au préalable )
Dim i as Long

Code:
If personneloguee = "Administrateur" Then
For i=1 to Worksheets.count
with sheets(i)
.Visible = True
.Unprotect Password:="admin"
End with
Next i
Sheets("menu").Select
Else
 

chac-attack

XLDnaute Nouveau
Re : nettoyage de macro (execution trop longue)

Bonsoir vbacrumble,

ton code fonctionne très bien, j'essais de le comprendre mais là je tic un peu car je débute. J'arrive facilement à adapter des codes mais pas encore à en creer. Donc tout est bon à prendre. Cette macro à du mal à la fermeture surtout lors de l'enregistrement, as-tu une solution?

merci

Chac-attack
 

vbacrumble

XLDnaute Accro
Re : nettoyage de macro (execution trop longue)

Re

Pourquoi veux-tu à ce point modifier l'interface d'Excel ?

Tu vas au devant de gros problèmes potentiels (car débutant dis-tu)

Heureusement qu'il existe la macro RemiseEnPlaceExcel
(situé dans la FAQ du forum)
!

Avis personnel
L'utilisateur final doit pouvoir être maitre de son confort de travail sur Excel non?

Aussi, je t'engage à explorer une autre voix pour éviter les erreurs de saisie ou les erreurs de manipulation d'un fichier Excel par un utilisateur lambda.

(En utilisant en premier lieu, les fonctionnalités natives d'Excel
-> Protection de la feuille, du classeur, vérouillage/masquage des formules)

Pour ce qui est de VBA, si tu ne maitrises pas le code que tu inclus dans tes classeurs, comment feras-tu pour dépanner rapidement un utilisateur qui se retrouve avec un Excel amputé des ses menus et barre d'outils ?

(Sache enfin qu'un utilisateur plus averti prendra l'habitude d'ouvrir un classeur trop restrictif en simplement désactivant les macros à l'ouverture du classeur)

PS: Si tu veux, je t'envoie en MP un code VBA hautement dangereux
pour te prouver ce que je viens d'écrire plus haut.

Ensuite je répondrai sur le champ pour te rendre un Excel digne ce nom.
 

chac-attack

XLDnaute Nouveau
Re : nettoyage de macro (execution trop longue)

tu m'as convaincu, en fait s'est pour le boulot je veux éviter certaines erreur de mes camarades s'est vrai qu'il y a plus simple que les macros. Sinon j'arrive encore à depanner les codes qui merdouille mais t'as raison là s'est quand même complexe et risqué.
En tout cas merci pour tes précieux conseils.

a bientôt sur un nouveau fil.

chac-attack
 

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 812
dernier inscrit
abdouami