Microsoft 365 activation de la dernière feuille créée selon son n° (pas sa position)

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

J'ai besoin de pouvoir activer la dernière feuille créée dans mon classeur
Par exemple ici j'ai créé les Feuile1 à 6

le code "Sheets(Sheets.Count).Select" fonctionne

mais active la dernière Feuille selon sa position dans le classeur
alors que c'est la dernière créé soit la Feuil6 que je souhaite activer.

Malgré mes recherches et essais, je n'ai pas trouvé comment coder.
Pourriez-vous m'aider sachant que mes feuilles sont créées depuis longtemps et donc antérieurement au code que vous m'aurez (je l'espère LOL) transmis.
Je joins un fichier test.

Avec mes remerciement,
Je vous souhaite à toutes et à tous une belle journée,
amicalement,
lionel,
 

Pièces jointes

  • derniere_Feuille.xlsm
    22.1 KB · Affichages: 10

job75

XLDnaute Barbatruc
Ceci est mieux car fonctionne sur toute version Excel :
VB:
Sub derniere_feuille()
Dim a(), i%
ReDim a(1 To Sheets.Count, 1 To 2)
For i = 1 To Sheets.Count
    a(i, 1) = Val(StrReverse(Sheets(i).CodeName))
    a(i, 2) = Sheets(i).Name
Next
i = Application.Max(Application.Index(a, , 1))
Sheets(Application.VLookup(i, a, 2, 0)).Activate
End Sub
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Gérard,
Ou je suis devenu complètement "gaga" ce qui est fort possible LOL ou ça ne me sélectionne pas la dernière feuille selon en fonction de son Codename.

Dans le fichier joint, j'ai créé 2 feuilles 10 et 11 et il me sélectionne la feuille 9 feuille en dernière position dans le classeur :)
lionel,
 

Pièces jointes

  • derniere_Feuille.xlsm
    29.7 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
re
bon ben pour le coup j'ai simplifier ta first version
on calcul plus on place les nom dans l'index du tableau correspondant au replace du codename
testé ca match
VB:
Sub test()
    Dim tbl()
    ReDim tbl(Sheets.Count)
    For Each sh In Worksheets
        tbl(Val(Replace(sh.CodeName, "Feuil", ""))) = sh.Name
    Next
    MsgBox Sheets(tbl(UBound(tbl))).Name
End Sub

autrement dit le sheets est toujours le dernier de l'array tbl qui en passant n'a qu'une dim
je garde ;)
 

patricktoulon

XLDnaute Barbatruc
re
hoh!!!!!!!!
et oui je pige mieux le soucis de Arthour
et ben avec cette méthode on est effectivement chocolat

CAR!!!

je suppose que Arthour a supprimer /ajouter a gogo pour ses essais
et effectivement si on a feuil1,feuil2,feuil3,feuil4,etc... et qu'on supprime par exemple feuil3 et que ensuite on ajoute un nouveau se sera feuil3 comme codename
je viens de tester ;)

ben la tout tombe a l'eau effectivement
c'est donc définitivement pas une bonne solution désolé job75

A ben mince Alors :confused:
 

job75

XLDnaute Barbatruc
Oui s'appuyer sur les CodeNames ne va pas du tout.

Je ne vois pas d'autre solution que de mémoriser la date/heure de création en cellule A1 (par exemple) des feuilles créées :
VB:
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh.[A1] = Now
End Sub

Sub derniere_feuille()
Dim i&, maxi#
ReDim a(1 To Worksheets.Count, 1 To 2)
For i = 1 To Worksheets.Count
    a(i, 1) = Worksheets(i).Cells(1).Value2
    a(i, 2) = Worksheets(i).Name
Next
maxi = Application.Max(a)
If maxi > 0 Then Sheets(Application.VLookup(maxi, a, 2, 0)).Activate Else MsgBox "Dates/heures inexistantes en A1..."
End Sub
 

patricktoulon

XLDnaute Barbatruc
Merci pour tout ce que tu fais Patrick.
Mais je ne peux pas utiliser cette solution car dans les classeurs ou je souhaite utiliser ce code, j'ai des dizaines de feuilles à ajouter et ce serait
trop fastidieux d'enregistrer, fermer et ré-ouvrir à chaque ajout de feuille. :)
lionel,
il est nullement question d'enregistrement a chaque ajout mais seulement enregistrer a la fermeture
de la même manière qu'avec une cellule comme te propose job75
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG