Volatile ? Oui mais un peu trop !
Bonjour,
Avec l'aide de BrunoM45 (merci encore), j'étais arrivé à ceci :
Code:
1 2 3 4 5 6 7
| Function NomFeuilPrec() As String
Dim NomF As String
Application.Volatile 'Exécute la fonction lors de tout recalcul
NomF = Application.Caller.Worksheet.Name 'Récupère le nom de la feuille qui appelle la fonction
If Not ActiveSheet.Index = 1 Then NomFeuilPrec = Worksheets(Sheets(NomF).Index - 1).Name 'Détermine la feuille précédente
End Function |
Notre contributeur évoquait d'éventuels "effets de bord" ; je crois comprendre ce qu'il voulais dire.
Je lis ici : https://silkyroad.developpez.com/vba/fonctions/
Citation:
Ajoutez la ligne d'instruction Application.volatile en début de fonction lorsque celle-ci est utilisée dans la feuille et doit être recalculée automatiquement à chaque fois qu'une modification ou un calcul est effectué dans une cellule quelconque du classeur.
Dans la feuille ?
J'ai mis cette fonction dans un module standard puisque le calcul concerne toutes les feuilles mais je me demande si je n'ai pas fait une erreur car le re-calcul me paraît intempestif.
Il y a une erreur dans le code suivant (module standard) mais je n'arrive pas à l'exécuter pas à pas car ça boucle sur Function NomFeuilPrec() :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| Private Sub Rec_Onglets() 'Workbook_NewSheet(ByVal Sh As Object)
Dim ws As Worksheet, i As Integer
i = 2
Sheets("synthèse").Rows(2).ClearContents
For Each ws In Application.Worksheets
If ws.Name <> "synthèse" Then
Sheets("synthèse").Range(i & 1) = ws.Name
i = i + 1
End If
Next ws
End Sub |
J'imagine que c'est l'arbre qui cache la forêt et que cette fonction volatile a d'autres effets indésirables que je ne "maîtrise" manifestement pas du tout.
En vous remerciant par avance pour votre aide.
Cordialement,
PS : la cellule $F$2 contient une date (qui peut être modifiée manuellement) et qui renomme l'onglet de ladite feuille. C'est donc cette date qui détermine la feuille actuelle et donc la précédente.