Code VBA pour copier un onglet et le renommer avec une boîte de dialogue

Bonjour le forum,

J'ai un classeur Excel comprenant 2 onglets : un onglet "Matrice" et un onglet "Local 1".

J'aurais voulu au moyen d'une macro commandée par un bouton faire une copie de l'onglet "Matrice", le renommer au moyen d'une boîte de dialogue et placer la copie en dernier (à la suite des autres onglets)

88exemple.xlsx (47.65 Ko)

Ce qui serait sympa c'est aussi d'avoir un message d'alerte, si le nom qu'on saisit dans la boîte de dialogue est déjà attribué à un onglet.

Merci d'avance pour votre aide.

Bonjour,

Voici une proposition avec un test d'existence et un test de validité du nom (à améliorer car je ne suis pas allé regarder les caractères interdits ou autres contraintes). J'ai juste exclu les chaines vides, certains caractères spéciaux et les titres de plus de 30 caractères.

sub test()

nom$ = inputbox("Entrez le nom du nouvel onglet")
for each ws in worksheets
    if ws.name = nom then msgbox "La feuille existe déjà": exit sub
next ws
if nom = "" or nom like "*[-./\#[?!()']*" or len(nom) > 30 then
    msgbox "le nom n'est pas valide": exit sub
end if
sheets("Matrice").copy after:=sheets(sheets.count)
sheets(sheets.count).name = nom

end sub

Cdlt,

Bonjour 3GB,

Merci beaucoup.

Est-il possible, lorsque le nom saisi correspond à un onglet existant, plutôt que d'arrêter la macro (if ws.name = nom then msgbox "La feuille existe déjà": exit sub) de revenir à l'inputbox ""Entrez le nom du nouvel onglet".

Merci.

Bonjour,

Voici un essai :

sub test()

do
    reprendre = false
    nom$ = inputbox("Entrez le nom du nouvel onglet")
    for each ws in worksheets
        if ws.name = nom then msgbox "La feuille existe déjà": reprendre = true
    next ws
    if nom like "*[-./\#[?!()']*" or len(nom) > 30 then
        msgbox "le nom n'est pas valide": reprendre = true
    end if
loop until reprendre = false
if nom = "" then exit sub
sheets("Matrice").copy after:=sheets(sheets.count)
sheets(sheets.count).name = nom

end sub

Cdlt,

Merci beaucoup 3GB.

C'est super.

Bonne journée.

Re-bonjour 3GB,

Désolé de te solliciter à nouveau, mais pourrais-tu me donner le code à ajouter, si l'onglet "Matrice" est masqué, pour avoir la copie créée visible.

Merci

Salut Sergio,

Pour rendre le nouvel onglet visible :

sub test()

do
    reprendre = false
    nom$ = inputbox("Entrez le nom du nouvel onglet")
    for each ws in worksheets
        if ws.name = nom then msgbox "La feuille existe déjà": reprendre = true
    next ws
    if nom like "*[-./\#[?!()']*" or len(nom) > 30 then
        msgbox "le nom n'est pas valide": reprendre = true
    end if
loop until reprendre = false
if nom = "" then exit sub
sheets("Matrice").copy after:=sheets(sheets.count)
with sheets(sheets.count)
    .name = nom
    .visible = true
end with

end sub

Cdlt,

Rechercher des sujets similaires à "code vba copier onglet renommer boite dialogue"