Nouvel onglet par macro avec 2 ComboBox

Bonjour le forum !

Je me suis inspiré d'un sujet déjà abordé, "creation d'un nouvel onglet par macro", que Banzai64 avait brillamment résolu (comme dab), mais je l'ai adapté à mes besoins. Je m'explique : j'ai un userform qui propose deux combobox, une pour le jour (menu déroulant de 1 à 31) et l'autre pour les mois (même chose avec les 12 mois), ceci afin que les utilisateurs désirant créer un nouvel onglet de production ne saisisse pas à la main dans différents formats. La création du nouvel onglet est une copie d'un onglet "modèle" caché qui est alors rendu visible pour la saisie de données. Je me suis même permis d'ajouter un espace (" ") entre le résultat des 2 combo box, ceci afin que l'onglet créé soit du type JJ MM (exemple : 24 septembre).

La création des nouveaux onglets de production fonctionnent très bien, mais en cas de choix dans les combobox d'une date d'onglet déjà existante, la macro ne va pas jusqu'à la ligne MsgBox "Feuille déjà existante !". J'obtiens le message d'erreur suivant :

"Erreur d'exécution '1004' : Impossible de renommer une feuille comme une autre feuille, une bibliothèque d'objets référencé par Visual Basic." avec une option de débogage qui, activée, me met en surbrillance la ligne "ActiveSheet.Name = Me.ComboBox1 & " " & Me.ComboBox2". Il semble donc que "Faute = Err.Number" ne voit pas d'erreur alors qu'il y en a une ...

Je joins mon code :

Private Sub CommandButton1_Click()

Dim Faute As Long
  If Me.ComboBox1 = "" Or Me.ComboBox2 = "" Then Exit Sub ' Si le jour et le mois non renseigné, sortir du Sub
  On Error Resume Next
  Sheets(Me.ComboBox1.Text).Visible = True & " " & Sheets(Me.ComboBox2.Text).Visible = True ' Combine le Jour + "espace" + le mois
  Faute = Err.Number
  On Error GoTo 0
  If Faute > 0 Then
    Sheets("Modèle").Copy After:=Sheets(Sheets.Count) ' Copie l'onglet modèlé caché
    ActiveSheet.Name = Me.ComboBox1 & " " & Me.ComboBox2 ' Renomme le nouvel onglet
    ActiveSheet.Visible = True ' Rend le nouvel onglet visible
  Else
    MsgBox "Feuille déjà existante !" 'Annule la création de l'onglet si déjà existant
  End If

End Sub

Au fait, si je désire un nom d'onglet avec un espace entre le jour et le mois, c'est que je compte réutiliser cette valeur en tant que date pour uen macro dans mon onglet modèle.

Merci par avance à ceux qui peuvent m'aider. Si notre génie Banzai64 est dans le coin, je suis preneur ...

Bonjour

A tester

Remplaces ta macro par celle-ci et rajoute la fonction

Private Sub CommandButton1_Click()

  If Me.ComboBox1.ListIndex = -1 Or Me.ComboBox2.ListIndex = -1 Then Exit Sub ' Si le jour et le mois non renseigné, sortir du Sub
  If FeuilleExiste(Me.ComboBox1 & " " & Me.ComboBox2) = False Then
    Sheets("Modèle").Copy After:=Sheets(Sheets.Count) ' Copie l'onglet modèlé caché
    ActiveSheet.Name = Me.ComboBox1 & " " & Me.ComboBox2 ' Renomme le nouvel onglet
    ActiveSheet.Visible = True ' Rend le nouvel onglet visible
  Else
    MsgBox "Feuille déjà existante !" 'Annule la création de l'onglet si déjà existant
 End If
End Sub

Function FeuilleExiste(Nom As String) As Boolean
  On Error Resume Next
  FeuilleExiste = Sheets(Nom).Name <> ""
  On Error GoTo 0
End Function

Superbe, rien à dire, cela fonctionne parfaitement ... Je n'ai pas eu l'idée d'utiliser une "Function" à part, c'est très ingénieux !

Dernière question : j'aurais un fichier de production par mois, donc quand un nouveau mois commencera, il n'y aura aucun onglet de production de créé (sachant que mon userform s'affichera à l'ouverture du fichier Excel). Le userform permet, à l'heure actuelle, soit de créer un nouvel onglet de production, soit d'annuler la demande et d'afficher le dernier onglet de prod en cours. Donc si aucun onglet de prod n'existe au début du mois, comment forcer l'utilisateur à en créer un, sans quoi impossible pour lui d'ouvrir quelque onglet que ce soit (les onglets de base étant réservés aux imports de données par macro ) ?

Bonjour

Sans ton fichier pas évident

Une piste : Compte le nombre de feuille et si celui-ci correspond au fichier initial ==> pas de feuille prod crée ==> bloquer toute action sauf la création de la feuille

Rebonjour,

J'ai réussi à la faire avec le code qui suit. Le "CommandButton2" de mon UserForm correspond au bouton "annuler" (contrairement au CommandButton1 qui permet la création de feuillet avec le code que tu m'as donné plus haut). Ca marche impec mais je voudrais également empêcher l'utilisateur de fermer le UserForm pour la croix en haut à droite car cela lui permet de rester dans le fichier Excel alors qu'il n'a rien à y faire sans un seul onglet de production ...

Private Sub CommandButton2_Click()

ActionCommandButton2 = True
If FeuilleExiste(Me.ComboBox1 & " " & Me.ComboBox2) = False Then
    MsgBox "Il n'y a pas d'onglet de production pour le mois en cours, veuillez en créer un ..."
Else
    Unload Userform1
End If

End Sub

La solution serait elle avec le UserForm_QueryClose ?

Merci encore de ton aide !

Bonjour

A tester

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  If CloseMode = vbFormControlMenu Then
    MsgBox "Suite à des travaux importants cette sortie est interdite" & vbCr & "Veuillez utiliser le bouton prévu à cet effet"
    Cancel = True
  End If
End Sub

Bonjour Banzai64,

J'ai finalement modifié le "Private Sub CommandButton2_Click()" en me basant sur la position du 1er onglet de données qui est en 1ere position avant la création d'un éventuel onglet de production par le userform et ça marche très bien :

ActionCommandButton2 = True
If Sheets(3).Name = "Données_S" Then
    MsgBox "Il n'y a pas d'onglet de production pour le mois en cours" & vbCr & " Veuillez en créer un ..."
Else
    Unload Userform1
End If

Quand au "Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)", je l'ai modifié tel suit :

If CloseMode = vbFormControlMenu Then

If Sheets(1).Name = "Données_S" Then

Application.DisplayAlerts = False

Application.Quit

Else

Unload Userform1

End If

End If

Toute cette partie là est nickel grâce à toi, merci de tout coeur. Mon fichier de production avance maintenant à grands pas, il me reste encore à empêcher une création manuelle d'un nouvel onglet, de copier automatiquement le nom de chaque nouvel onglet créé dans une cellule de l'onglet créé, etc .....Ca va encore m'occuper un moment !

Rechercher des sujets similaires à "nouvel onglet macro combobox"