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

arthour973

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,
 

Fichiers joints

Roblochon

XLDnaute Accro
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.
 

arthour973

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 Impliqué
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
 

arthour973

XLDnaute Barbatruc
Supporter XLD
Bonjour Patrick,

Merci à toi, je teste et je te dis :)

"je donnerais bien une autre solution qui elle serait invisible
mais c'est comment dire heu... astuce a la patricktoulon
"
Combien tu veux pour me donner ton astuce ? LOL :)
lionel,
 

Roblochon

XLDnaute Accro
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
 

Fichiers joints

Roblochon

XLDnaute Accro
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 Impliqué
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
 

arthour973

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,
 

arthour973

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 Impliqué
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
 

Fichiers joints

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+
 

patricktoulon

XLDnaute Impliqué
re
bien vu job75
rien a dire c'est parfait

on peut aussi le determiner comme ca (et ca dédouane de l’opération index pour 2 dim TO 1 dim)
i = WorksheetFunction.Large(a, 1)
 
Dernière édition:

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
 

patricktoulon

XLDnaute Impliqué
re
heu.. non!!
a(i, 1) = Val(StrReverse(Sheets(i).CodeName))
le Feuil10 va donner 1 par la réduction du zéro

le premier par le replace était très bien
et pour i
i = WorksheetFunction.Large(a, 1)
 

arthour973

XLDnaute Barbatruc
Supporter XLD
Bonjour Gérard :)

Merci d'être là encore une fois et merci pour ce code.
Evidemment ça fonctionne.
Mais mon souci est qu'il m'active la dernière feuille en fonction de sa position dans le classeur
mais pas en fonction de son Codename.
lionel,
 

Discussions similaires


Haut Bas