Ralentissements dans les boutons valider

Bonjour,

Je suis devant une difficulté majeure. J'ai beaucoup avancé sur le développement d'une automatisation de planning.

Je vous propose de le tester pour vous rendre compte de ce qu'il fait. Aujourd'hui je suis face à une difficulté. J'ai l'impression que l'exécution des codes est trop lourde. Est-ce que vous pensez qu'il y a possibilité de l'alléger.

Lorsque je clique sur les boutons valider des Userform du fichier généré il se passe un délai long. Trop long pour que le travail fourni puisse être accepté et acceptable. A l'origine ça marchait bien (sauf pour le petit Userform pour lequel c'était déjà ralenti).

Merci de votre aide!

15testeur.xlsm (105.71 Ko)

Bonjour,

Aucun "ralentissement" ... le tout en moins d'une seconde ...

Bonjour James007,

As-tu testé les Userform (clic sur la ligne au-dessus de la ligne rose puis clic sur la case jaune)? Et ce une fois avoir enregistré le fichier généré?

J'ai beau tester, fermer les programmes etc. le bouton valider prend au mieux 2-3 secondes. Pour une macro relativement petite. Est-ce Satisfaisant (suis-je trop exigeant?) ?

Bonjour,

Personnellement ... il y a plusieurs choses que je modifierais dans ta feuille de base ...

1. Supprimer les lignes 76 à 87 ...

2. Supprimer les lignes cachées ...

3. Supprimer toutes les cellules fusionnées ...

Re,

Pour la suppression des lignes vides d'accord, la "défusion" des cellules c'est fait, par contre pour la suppression des lignes sur laTRAME c'est impossible parce que nécessaire (sauf si tu as d'autres astuces).

Je vais voir si je peux tenter une macro (pas gagné) pour les feuilles de mois.

Merci du conseil.

Bonjour,

On pourrait ajouter également supprimer les évènementielle Worksheet_Change et SélectionChange qui me semblent une absurdité dans ces conditions.

Pour la suppression des lignes vides, c'est tout à fait possible dans le classeur que je t'ai envoyé. Il va surement falloir qu'un jour tu révises tes priorités entre ce qui est possible ou impossible mais nécessaire... Sinon pas la peine de demander des conseils !

A+

J'ai ténu compte de vos suggestions d'allègement et ai mis en place une macro de suppression de code (celui de l'effacement des lignes une fois les plannings mensuels générés. De cette façon le fichier est vraiment beaucoup plus léger.

Mais le fait qu'il y ait un certain délai entre le clic sur valider et son effet final est-il lié à excel ou à la puissance du pc?

Bonjour,

Le problème est qu'il faudrait supprimer cette macro avant la copie car c'est elle qui prend la main à chaque copie.

Comme signalé dans développez.com si on maintient cette macro avant la copie il faut utiliser la routine fournie (avec EnableEvents...) ou quelques chose de similaire. (sauf que tu ne peux pas vu que tu veux que cette macro s'exécute...)

Ben oui ... ça prends quelques instant ! (c'est lié à l'appel récurent à Worksheet-Change) le masquage ligne par ligne prend du temps même avec screenUpdating et xlCalculationManual, il faut bien que le travail se fasse à un moment donné...

De plus dans ce genre de situation on s'arrange pour supprimer toutes les macros (Worksheet_Change et SélectionChange) et on les remplace par une macro unique dans ThisWorkbook.

Texte de la macro de remplacement (à mettre dans ThisWorkbook)

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Count = 1 Then
   If Sh.Name = MonthName(Sh.Index) Then
       If Trim(Cells(Target.Row, 1)) = "Motif" And Target.Value = "" Then
         L = Target.Row
         C = Target.Column
         MOTIF.Show
       End If
       If Target.Interior.ColorIndex = 6 And Target.Value = "" Then
         L = Target.Row
         C = Target.Column
         Rempla.Show
       End If
   End If
End If
End Sub

Nota ; Moi je supprimerai les L,C, comme fait dans ma démo

Nota2 : Il est indispensable de modifier la macro Sub Copies_Feuil() comme suit :

Sub Copies_Feuil()
Dim i%
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
    For i = 1 To 12
        Sheets("TRAME").Copy before:=Sheets("TRAME")
'...la suite sans changement

Nota3 : Idéalement il faudrait mettre en place une routine qui assure que les feuilles janvier à Décembre ne changent jamais de place...

A+

Merci pour toutes ces suggestion je les applique à la lettre et il est vrai que d'appliquer au classeur entier des choses qui vont être utiles à la plupart des feuilles c'est mieux que de le copier pour chaque feuille car beaucoup plus léger.

Connaissez vous un moyen de trouver un genre de manuel pour les différentes commandes?

Parce que bloquer le mouvement des feuilles entre elles je veux bien mais je ne sais pas comment (à part des forums) arriver à trouver... Donc s'il existe un genre de dictionnaire des commandes je suis open.

Merci en Tout cas!

bonsoir,

Non pas d'ouvrage de ce genre... la prog est une incessante curiosité et un long perfectionnement.

Cette macro replace les feuilles si nécessaire :

Sub WsSort()
Dim i%
For i = 1 To 12
If Sheets(MonthName(i)).Index > i Then Sheets(MonthName(i)).Move Before:=Sheets(i)
Next
End Sub

Dans ce cas il convient de modifier la :

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Count = 1 Then
WsSort
   If Sh.Name = MonthName(Sh.Index) Then
'...la suite sans changement

A+

Rechercher des sujets similaires à "ralentissements boutons valider"