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

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Ah ben celle-là (la question) a le mérite d'être originale. Jamais vu avant pour ma part. Par contre, je ne sais s'il y a une réponse pour des feuilles qui ont déjà été créées. Le classeur n'a pas de Propriété LastSheetCreated ou LastCreatedSheet ou autre anglaiserie sur laquelle se baser.

Pour les nouvelles feuilles on peut s'appuyer sur lévènement de classeur 'Workbook_NewSheet' et une variable public LastCreatedSheetCodeName de type String. Mais là encore si la feuille est supprimée entre temps ? comment retrouver la précédente créée ?

Je crois qu'il y a là moyen de faire une belle usine à gaz :) .

Bon continuation.
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Roblochon,

LOL, j'ai toujours des questions particulières (mais ne sommes nous pas tous particuliers ? LOL)

Par contre, ta réponse m'a donné une idée et je pense que le fait d'utiliser un code pour afficher la nouvelle feuille créée (après l'insertion du code) va me servir.
Alors si il y a, je suis preneur :)
lionel,
 

patricktoulon

XLDnaute Barbatruc
bonjour

dans le thisworkbook tu met
VB:
Private Sub Workbook_NewSheet(ByVal Sh As Object)
    ActiveWorkbook.Names.Add Name:="LastcreatedSheet", RefersTo:=Sh.Index
End Sub




on va tester dans un module
on ajoute un sheets pas forcement a la fin on le nomme "toto"
Code:
Sub test()
    Set Sh = Sheets.Add(after:=Sheets(3))
    Sh.Name = "toto"
End Sub

maintenant on teste si on a bien le dernier sheets ajouté ou qu'il soit
Code:
Sub test2()
    'MsgBox Names("LastcreatedSheet")
    Index = Val(Replace(Names("LastcreatedSheet"), "=", ""))
    MsgBox Sheets(Index).Name
End Sub

;)
il est évident que le classeur doit être enregistré a la fermeture pour garder le name "LastcreatedSheet"pour un éventuel besoins

je donnerais bien une autre solution qui elle serait invisible
mais c'est comment dire heu... astuce a la patricktoulon :p
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Eh bien voici une ébauche en pièce jointe. Je n'irai pas plus loin car tout ceci est bien fragile....
N'est valable que pour la session en cours du classeur.

Cordialement
 

Pièces jointes

  • derniere_Feuille.xlsm
    22.6 KB · Affichages: 4

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour Roblochon :)

merci pour le retour fichier.
J'ai créée une feuille et un message d'erreur :
Sans titre.jpg


je me demande bien Pkoi LOL
lionel,
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Désolé, mais chez moi cela fonctionne. Ouvrir le classeur créer une feuille et revenir sur base et cliquer sur le bouton.

Mais comme dit précédemment tout ceci va mener directement à une usine à gaz à la construction de laquelle je ne veux pas participer (surtout pour quelqu'un qui semble ne faire aucun effort pour comprendre ce qu'il lui est communiqué.)

A une prochaine.
 

patricktoulon

XLDnaute Barbatruc
bonjour Roblochon
tu fait bien de parler de session du classeur
ps j'ai bien precisé qu'il fallait que le fichier soit sauver en fermeture sinon le names est perdus

mais revenons a mon astuce patricktoulonnaise

savez vous ajouter une commandbar popup??

et vous vous dites c'est bon on a perdu le toulonnais
mais non!!!!
quand on fait un commandbars.add("nom de la bar",.....)
et que l'on ferme le fichier
ben je vous le donne dans le mille la commandbar elle RESTE!!!! car c'est au niveau supérieur au workbook que l'on travaille (l'application)
la j'ai tout dis, le reste se devine tout seul
et pour le coup c'est invisible :p ;)
je fait un exemple ou tout le monde a compris

donc a moins de faire un commandbars.reset ou supprimer la bar ben c'est jamais perdu
je précise pour ceux qui se perdraient dans mes idées loufoques qu'il n'est nullement question ici de faire un show sur la barre
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Roblochon,
Je précise que bien évidemment, je suis revenu sur la feuille base après création de la nouvelle feuille.
Dans le cas contraire, comment pourrais-je cliquer sur le bouton ? :)

Patrick :
"ps j'ai bien précisé qu'il fallait que le fichier soit sauver en fermeture sinon le names est perdus ".

J'ai bien sauvegardé et fermé après création de la feuille ... à la ré-ouverture ça n'a pas fonctionné.
Mais, 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,
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
bonjour Roblochon
tu fait bien de parler de session du classeur
ps j'ai bien precisé qu'il fallait que le fichier soit sauver en fermeture sinon le names est perdus

mais revenons a mon astuce patricktoulonnaise

savez vous ajouter une commandbar popup??

et vous vous dites c'est bon on a perdu le toulonnais
mais non!!!!
quand on fait un commandbars.add("nom de la bar",.....)
et que l'on ferme le fichier
ben je vous le donne dans le mille la commandbar elle RESTE!!!! car c'est au niveau supérieur au workbook que l'on travaille (l'application)
la j'ai tout dis, le reste se devine tout seul
et pour le coup c'est invisible :p ;)
je fait un exemple ou tout le monde a compris

donc a moins de faire un commandbars.reset ou supprimer la bar ben c'est jamais perdu
je précise pour ceux qui se perdraient dans mes idées loufoques qu'il n'est nullement question ici de faire un show sur la barre

Re-patrick : vu mon niveau en vba un exemple serait sympa :)
lionel,
 

patricktoulon

XLDnaute Barbatruc
re
ouvre le fichier
lance la sub test
le msgbox va te dire "pas de sheets mémorisé"
ajoute un sheets et sauve pour garder ton sheets
ferme
ré ouvre et relance la sub test
je t'ai mis aussi la sub pour supprimer la bar memo si besoins
 

Pièces jointes

  • nextSheetInMemo.xlsm
    20.8 KB · Affichages: 3

job75

XLDnaute Barbatruc
Bonjour Lionel, Roblochon, patricktoulon,

Sauf si l'on tripote les CodeNames, les feuilles créées ont des CodeNames numérotés dans l'ordre de création : Feuil1 Feul2...Feuil10...

Donc cette macro devrait faire l'affaire :
VB:
Sub derniere_feuille()
Dim txt$, a(), i%
txt = "Feuil" 'début des CodeNames à adapter suivant la version Excel
ReDim a(1 To Sheets.Count, 1 To 2)
For i = 1 To Sheets.Count
    a(i, 1) = Val(Replace(Sheets(i).CodeName, txt, ""))
    a(i, 2) = Sheets(i).Name
Next
i = Application.Max(Application.Index(a, , 1))
Sheets(Application.VLookup(i, a, 2, 0)).Activate
End Sub
A+
 

Discussions similaires