XL 2016 Macro Lente

WTF

XLDnaute Impliqué
Bonjour le forum,

J'ai intégré une macro à un fichier Excel dans le but d'incrémenter automatiquement le nom de l'onglet en fonction de la cellule A1.

Ma macro fonctionne bien, le seul problème est qu'elle ralentie énormément mon fichier. Dès que je change un élément dans n'importe quelle cellule, il y a un recalcul qui dure entre 5 et 10 sec.


Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
On Error Resume Next
For Each sht In ActiveWorkbook.Worksheets
Sheets(sht.Name).Name = Sheets(sht.Name).[A1]
Next
End Sub



Si vous avez des idées je suis preneur.

Merci à tous
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Pourquoi faites vous ce traitement sur toutes les feuilles à chaque sélection d'une cellule quelconque dans une seule feuille ?
Il me semblerait plus logique de le faire seulement à la modification de la cellule A1 de n'importe quelle feuille, et seulement pour cette feuille là.
Donc dans une WorkBook_SheetChange du module ThisWorkbook.
Édition: Sheets(sht.Name) c'est idiot: c'est la même chose que sht tout simplement, mais en trop compliqué.
 

WTF

XLDnaute Impliqué
Bonjour Dranreb.

Merci de votre réponse.

J'ai donc mis le code suivant dans le module ThisWorkbook :

Private Sub WorkBook_SheetChange(ByVal Target As Excel.Range)
On Error Resume Next
For Each sht In ActiveWorkbook.Worksheets
Sheets(sht.Name).Name = Sheets(sht.Name).[A1]
Next
End Sub

Mais j'ai un message d'erreur "Erreur de compilation : La déclaration de la procédure ne correspond pas à la description de événementiel ou de la procédure de même nom".

J'avoue être très limité en VBA. Je n'ai peut être pas fait exactement la manip que vous me proposiez ?

Merci
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Pour éviter ce genre de mésaventure, implantez toujours vos modèles de procédures évènement à l'aide des deux listes déroulantes qui surmontent la fenêtre de code. Dans celle de gauche sélectionnez "Workbook" dans celle de droite "SheetChange"
Vous verrez qu'il manquait un 1er paramètre Byval Sh As Object.
Et ne faites pas de boucle: juste If Not Target Is Nothing Then if Target.Address = "$A$1" Then Sh.Name = Target.Value
 

Discussions similaires

Réponses
3
Affichages
569
Réponses
8
Affichages
473

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa