Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
Applications Excel de Franck
12 juin 2023

Onglets selon dates

Bonjour à tous,

Suite à une demande assez courante d'avoir des onglets qui soient nommés des dates d'une période, voilà les étapes de la macro à l'ouverture du fichier:

image

FONCTIONNEMENT DE LA MACRO SUR EXCEL

1- Un onglet "Acceuil" ou on inscrit les dates

image

2-A l'ouverture du fichier les dates se reportent automatiquement sur les onglets.

3-Les onglets sont classés dans l'ordre de celles de l'acceuil, même si on passe du 30 au 1er du mois.

4-l'onglet de la date du jour est sélectionné si l'on est dans le mois en cours.

Il faudra changer les dates pour vérifier son fonctionnement complet.

EXPLICATION DES MACROS (Avec les commentaires en vert)

'Pour avoir le nom des onglets (voir macros pagestirages)
Function TestOnglet(zz As String) As Boolean 'fonction Test
On Error Resume Next
TestOnglet = Sheets(zz).Name <> ""
On Error GoTo 0
End Function
Private Sub Workbook_Open()
Dim i As Byte, ws As Worksheet, cpt%, drn%, dat$
Set ws = ActiveSheet
Set ws1 = Sheets("Acceuil")
Application.ScreenUpdating = False
'nom onglets suivant dates en acceuil
drn = ws1.Range("A1").End(xlDown).Row 'derniere ligne
'Boucle de test sur l'existence en noms d'onglet des noms des cellules, par la fonction testOnglet
For i = 2 To drn
dat = Day(ws1.Range("A" & i).Value)
If TestOnglet(dat) = False Then
Sheets.Add after:=Sheets("Acceuil")
ActiveSheet.Name = dat
End If
Next i
'Tri onglets dans l'ordre des cellules
cpt = 2
For i = 2 To drn
'Dans l'ordre
If CSng(Application.Sheets(cpt).Name) = CSng(Day(ws1.Range("A" & i).Value)) Then
cpt = cpt + 1
'Pas dans l'ordre
ElseIf CSng(Application.Sheets(cpt).Name) <> CSng(Day(ws1.Range("A" & i).Value)) Then
For j = cpt To Application.Sheets.Count
If Application.Sheets(j).Name = CSng(Day(ws1.Range("A" & i).Value)) Then
Application.Sheets(j).Move after:=Application.Sheets(i - 1)
End If
Next j
End If
Next i
'Positionnement sur l'onglet du jour
drn = ws1.Range("A1").End(xlDown).Row 'derniere ligne
For i = 2 To drn
For j = 2 To Application.Sheets.Count
If Format(ws1.Range("A" & i).Value, "dd/mm/yyyy") = Format(Now(), "dd/mm/yyyy") And _
Day(Now()) = CSng(Application.Sheets(j).Name) Then
Application.Sheets(j).Select
End If
Next j
Next i
Application.ScreenUpdating = True
End Sub

J'ai remarqué que même la manipulation des fichiers était impossible (pour moi) si on utilisait pas une page Excel.

En espérant que ce tuto fasse pas doublon, mais j'ai vu des variantes:

- Un tri des onglets avec du texte, par ordre alphabétique, plus simple.

- Un tri avec du texte et des chiffres, et un tri beaucoup plus complexe.

Cdt

Publicité
Publicité
Commentaires
Pages
Publicité
Applications Excel de Franck
Archives
Derniers commentaires

4

Visiteurs
Depuis la création 3 720
Publicité