VBA Copier un onglet avec InputBox et éviter les doublons de noms

mikael2403

XLDnaute Junior
Bonjour,

Je cherche de l'aide concernant un code VBA.
J'ai trouvé différents échanges sur le forum mais pas de solutions.

J'ai une feuille Active avec un Bouton qui active la macro ci-dessous.
Le but est de copier en dernier une feuille masquée nomée "TRAME_PERIODE" en changeant le nom mais de vérifier que le nom entré dans l'inputbox n'est pas une feuille déjà existante.
J'ai un message d'erreur qui m'indique "Erreur d'exécution '424' : Objet requis et me souligne la ligne suivante : ActiveSheets.Name = periode

Code:
Private Sub CREER_PERIODE_Click()

    Dim periode As String
    Dim WS As Worksheet
    Dim WSname As String
    
    periode = InputBox("Veuillez entrer le nom de votre Période")
    
    For Each WS In Worksheets
    If WS.Name = periode Then
    MsgBox ("Cette période existe déjà, merci d'entrer un autre nom")
    Exit Sub
    End If
    Next
    Sheets("TRAME_PERIODE").Visible = True
    Sheets("TRAME_PERIODE").Copy after:=Sheets(Sheets.Count)
    ActiveSheets.Name = periode
    ActiveSheet.Unprotect
    Selection.OnAction = "ACCUEIL"
    Range("A3").Select
End Sub

Avez-vous une solution ou une modification de mon code ?

Je vous remercie de votre aide.

Mikael
 

vgendron

XLDnaute Barbatruc
Re : VBA Copier un onglet avec InputBox et éviter les doublons de noms

Hello

Essaie ce code
Code:
Private Sub CREER_PERIODE_Click()

    Dim periode As String
    Dim WS As Worksheet
    Dim WSname As String
    
    periode = InputBox("Veuillez entrer le nom de votre Période")
    
    For Each WS In Worksheets
        If WS.Name = periode Then
            MsgBox ("Cette période existe déjà, merci d'entrer un autre nom")
            Exit Sub
        End If
    Next
    Sheets("TRAME_PERIODE").Visible = True
    With Sheets("TRAME_PERIODE")
        .Copy After:=Sheets(Sheets.Count)
        .Name = periode
        .Unprotect
    End With
    Selection.OnAction = "ACCUEIL"
    Range("A3").Select
End Sub
 

vgendron

XLDnaute Barbatruc
Re : VBA Copier un onglet avec InputBox et éviter les doublons de noms

ha non m....

ca renomme la feuille source..

et en fait. c'est bien plus simple que tu ne le penses...
Code:
ActiveSheets.Name = periode
Code:
ActiveSheet.Name = periode

c'est un jeu des 7 erreurs. sauf qu'il n'y en a qu'une..


Hello René du 06 ;-)
 
Dernière édition:

mikael2403

XLDnaute Junior
Re : VBA Copier un onglet avec InputBox et éviter les doublons de noms

Bonjour vgendron,

Je te remercie pour ta réponse rapide.

J'ai essayé ton code, en modifiant également l'erreur du "s" dans activesheets mais j'ai un message d'erreur qui perdure.

Erreur d'exécution '438'
Propriété ou méthode non gérée par cet objet

Est-ce que la synthaxe est correcte ? Impossible de trouver la solution :-(

Je vous remercie pour votre aide.

Cdt,
Mikael2403

ha non m....

ca renomme la feuille source..

et en fait. c'est bien plus simple que tu ne le penses...
Code:
ActiveSheets.Name = periode
Code:
ActiveSheet.Name = periode

c'est un jeu des 7 erreurs. sauf qu'il n'y en a qu'une..


Hello René du 06 ;-)
 

mikael2403

XLDnaute Junior
Re : VBA Copier un onglet avec InputBox et éviter les doublons de noms

Hello

je pense que ton erreur vient sans doute de la
Selection.OnAction = "ACCUEIL"
Range("A3").Select

mais comme le dit René.. sans ton fichier exemple...

Même en le supprimant ça bloque.
J'ai un autre message d'erreur.

Voici le fichier en question

Merci vraiment de votre aide.

Cdt,
Mikael2403
 

Pièces jointes

  • SUIVI DOSSIERS KARAVEL1.xlsm
    103.5 KB · Affichages: 46

néné06

XLDnaute Accro
Re : VBA Copier un onglet avec InputBox et éviter les doublons de noms

Bonjour mikael,Salut Vgendron


Tu as tapé
ActiveSheet.Name = periode

cette instruction est fausse!
Si tu place:
ActiveSheet.Name = "periode" cela poursuivra le programme en remplçant le nom de la feuille active par (periode).

Est-ce cela que tu désire ?

A+
René
 

vgendron

XLDnaute Barbatruc
Re : VBA Copier un onglet avec InputBox et éviter les doublons de noms

chez moi. ce code fonctionne sans message d'erreur

Code:
Private Sub CREER_PERIODE_Click()

    Dim periode As String
    Dim WS As Worksheet
    Dim WSname As String
    
    periode = InputBox("Veuillez entrer le nom de votre Période")
    
    For Each WS In Worksheets
        If WS.Name = periode Then
            MsgBox ("Cette période existe déjà, merci d'entrer un autre nom")
            Exit Sub
        End If
    Next
    Sheets("TRAME_PERIODE").Visible = True
    Sheets("TRAME_PERIODE").Copy after:=Sheets(Sheets.Count)
    ActiveSheet.Name = periode
    ActiveSheet.Unprotect
    'Selection.OnAction = "ACCUEIL"
    'Range("A3").Select
    Sheets("TRAME_PERIODE").Visible = False
End Sub
après. si tu souhaites retourner à la page d'acceuil
il suffit de rajoutter
Sheets("ACCEUIL").activate
 

Discussions similaires

Statistiques des forums

Discussions
311 711
Messages
2 081 789
Membres
101 817
dernier inscrit
carvajal