Ouvrir feuille avec nom a partir d'un bouton dans le userform

Bonjour, mon code qui marchait, refuse de fonctionner, on me met une erreur d'execution 9 (l'indice n'appartient pas a la selection)

et l'erreur se met a la ligne de If ThisWorkbook.Sheets(i).Name = Nom Then Verif = False

le but est de pouvoir ouvrir une feuille dans le classeur, j'arrive avec le meme code a ouvrir pour l'autre classeur et je fais ce codage pour le classeur principale mais on me met une erreur

merci de bien vouloir m'aider

Private Sub CommandButton8_Click()
Dim Nom As String, i As Byte, Verif As Boolean, myMonth As Integer, myYear As Integer, myDate As Date, ee As String, a As Long
 myDate = Date ' enregistre la date d'aujourd'hui dans la variable myDate

myMonth = (Month(myDate))  ' No du mois précédent
myYear = Year(Date) 'No année
ee = ""
recom:
Verif = False
Nom = InputBox("Définissez le nom du nouveau client svp", "Ajout nouveau client") & "" & (myMonth) & " - " & myYear

If Nom = "" Then Exit Sub

For i = 1 To Sheets.Count
    If ThisWorkbook.Sheets(i).Name = Nom Then Verif = False
Next

If Verif = True Then
    MsgBox "la feuille " & Nom & " existe déjà, veuillez choisir un autre nom"
    GoTo recom
End If
ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)).Name = Nom

Unload Me
UserForm1.Show
End Sub

Bonjour,

le but est de pouvoir ouvrir une feuille dans le classeur...

Heu.... Non...

Le code présenté permet après une saisie de créer une nouvelle feuille (dont le nom est basé sur cette saisie) en vérifiant que son nom n'existe pas déjà;

Pas rencontré l'erreur citée, mais quelques anomalies. Une proposition de correction:

Private Sub CommandButton1_Click()
Dim Nom As String, i As Byte, Verif As Boolean, myMonth As Integer, myYear As Integer, myDate As Date, ee As String, a As Long
Dim InBox As String
 myDate = Date ' enregistre la date d'aujourd'hui dans la variable myDate

myMonth = (Month(myDate))  ' No du mois précédent
myYear = Year(Date) 'No année

Do
    Verif = False
    InBox = InputBox("Définissez le nom du nouveau client svp", "Ajout nouveau client")
    If InBox = "" Then Exit Sub
    Nom = InBox & "" & (myMonth) & " - " & myYear

    For i = 1 To Sheets.Count
        If ThisWorkbook.Sheets(i).Name = Nom Then
            Verif = True
            Exit For
        End If
    Next

    If Verif = True Then
        MsgBox "la feuille " & Nom & " existe déjà, veuillez choisir un autre nom"
        Nom = ""
    End If
Loop Until Verif = False

ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)).Name = Nom

Unload Me
UserForm1.Show

End Sub

A+

Bonjour,

For i = 1 To Sheets.Count
    If ThisWorkbook.Sheets(i).Name = Nom Then Verif = False
Next

Votre Sheets.Count correspond au classeur actif, votre instruction complète est donc :

  For i = 1 To ActiveWorkBook.Sheets.Count
    If ThisWorkbook.Sheets(i).Name = Nom Then Verif = False
Next

ThisWorkBook représente le classeur où s'exécute le code et n'est donc pas forcément le classeur actif. Autrement dit, votre nombre de feuilles qui n'est pas forcément celui de ThisWorkBook peut être trop important, ce qui provoque l'erreur.

il faut dire que j'ai deux classeurs ici, votre formule marche mais je dois adapter un a mon classeur principal qui est AVIONS et a mon deuxieme classeur qui est C-CLIENT

du coup que me proposez vous

il faut dire que j'ai deux classeurs ici, votre formule marche mais je dois adapter un a mon classeur principal qui est AVIONS et a mon deuxieme classeur qui est C-CLIENT

du coup que me proposez vous

Votre classeur principal "AVIONS" est donc le classeur où s'exécute la macro ?

Apparemment, le classeur où vous rajoutez des feuilles est C-CLIENT, donc je suppose que c'est votre classeur actif.

La programmation de votre boucle est à éviter. Il faut rester dans une programmation structurée. Je vous invite donc à reprendre la programmation proposée par AlgoPlus.

Alors votre code devrait être :

Private Sub CommandButton1_Click()
Dim Nom As String, i As Byte, Verif As Boolean, myMonth As Integer, myYear As Integer, myDate As Date, ee As String, a As Long
Dim InBox As String
 myDate = Date ' enregistre la date d'aujourd'hui dans la variable myDate

myMonth = (Month(myDate))  ' No du mois précédent
myYear = Year(Date) 'No année

Do
    Verif = False
    InBox = InputBox("Définissez le nom du nouveau client svp", "Ajout nouveau client")
    If InBox = "" Then Exit Sub
    Nom = InBox & "" & (myMonth) & " - " & myYear

    For i = 1 To Sheets.Count
        If Sheets(i).Name = Nom Then
            Verif = True
            Exit For
        End If
    Next

    If Verif = True Then
        MsgBox "la feuille " & Nom & " existe déjà, veuillez choisir un autre nom"
        Nom = ""
    End If
Loop Until Verif = False

Sheets.Add(After:=Sheets(Sheets.Count)).Name = Nom

Unload Me
UserForm1.Show
End Sub
 

ok c'est bien compris et merci pour ce code

mais comme je vous ai dit j'ai deux boutons qui doivent ouvrir deux nouvelles feuilles dans differents classeurs

le code que vous avez envoyé un pour un seul classeur qui est le classeur principal (AVION)

Quand au code que j'ai envoyé, lorsque le classeurs client est ouvert juste derriere le userform, il crée la page sans probleme mais quand je decide de créer une feuille dans le classeur principal qui est avion et que je reviens pour essayer de recréer une feuille dans CLIENT, ça me met un code d'errer, j'ai remarqué que c'est parce que le classeur avion est actif juste apres le userform

Bonjour,

Il faudrait joindre des fichiers représentatifs de votre problématique pour aller plus loin dans l'aide apportée.

je vous joind mes deux fichier ?

Bonjour

voici mes fichiers

le userform se trouve dans AVIONS

lorsquon ouvre avion, il ouvre directement l'autre chiffier

15avions.xlsm (338.78 Ko)
13c-client.xlsm (11.88 Ko)

Bonjour,

Tout d'abord, je vous recommande de définir 2 variables objets relatives à votre classeur, au niveau du module de votre UserForm1, comme ci-dessous :

Dim wb_avions As Workbook
Dim wb_clients As Workbook

Private Sub Userform_Initialize()
    Dim sh As Worksheet

    Set wb_avions = ThisWorkbook  '<--- AVION
    Set wb_clients = Workbooks("C-CLIENT.xlsm")

    For Each sh In wb_avions.Sheets
        Me.ComboBox2.AddItem sh.Name
    Next sh

    For Each sh In wb_clients.Sheets
        Me.ComboBox1.AddItem sh.Name
    Next sh
End Sub

Ensuite ci-dessous code simplifié pour ajout de vos feuilles :

Private Sub CommandButton9_Click()
    Dim Nom As String, i As Byte, Verif As Boolean, myMonth As Integer, myYear As Integer, myDate As Date, ee As String, a As Long
    Dim sh_new As Worksheet

    myDate = Date ' enregistre la date d'aujourd'hui dans la variable myDate
    myMonth = (Month(myDate))  ' No du mois précédent
    myYear = Year(Date) 'No année
    ee = ""

    Verif = False
    While Not Verif
        Nom = InputBox("Définissez le nom du nouveau svp", "Ajout nouveau ")
        If Nom = "" Then
            If Not sh_new Is Nothing Then Application.DisplayAlerts = False: sh_new.Delete
            Exit Sub
        End If

        If sh_new Is Nothing Then
            With wb_clients
                .Sheets(1).Copy After:=.Sheets(.Sheets.Count): Set sh_new = ActiveSheet
            End With
        End If

        On Error Resume Next
        sh_new.Name = Nom & "" & (myMonth) & " - " & myYear
        If Err Then MsgBox "la feuille " & Nom & " existe déjà, veuillez choisir un autre nom" _
        Else Verif = True
    Wend

    Unload Me
    UserForm1.Show
End Sub

ci-joint votre classeur modifié

19avions-1.xlsm (331.41 Ko)

vous avez résolu mon probleme.

Grand merci a vous...

j'ouvre une nouvelle discutions au niveau du boutons valider les informations parce que lorsque je ne rentre rien et que je clique, ça met une erreur

Grand merci.

Rechercher des sujets similaires à "ouvrir feuille nom partir bouton userform"