Vérifier en ajout nouveau onglet existe

Bonjour,

J'aimerais savoir comment faire en VBA pour vérifier si le nom d'onglet que je veux ajout existe déjà?

Sheets.Add After:=ThisWorkbook.Sheets(3)

Merci,

Shawi

Bonjour Shawi,

Je te propose d'essayer ce code VBA :

Option Explicit

Function FeuilExist(chn$)
  On Error Resume Next
  Dim FX As Worksheet: Set FX = Worksheets(chn)
  FeuilExist = Not FX Is Nothing
End Function

Sub Essai()
  Dim FX$
  FX = "Feuil1": MsgBox "La feuille """ & FX & """ existe ? " & FeuilExist(FX)
  FX = "Feuil9999": MsgBox "La feuille """ & FX & """ existe ? " & FeuilExist(FX)
End Sub

Merci de me dire si ça te convient.

dhany

Voici la routine que j'utilise

Private sub lstPeriode_Change()

Dim NumLigne as Integer

NumLigne = Me.lstPeriode.listIndex + 4 'Numéro de période

Me.TextBox1.Value = Sheets("Liste").Cells(Numligne, 9).Value ' Date 1

Me.TextBox2.Value = Sheets("Liste").Cells(Numligne, 10).Value 'Date 2

Sheets.Add After:=ThisWorkbook.Sheets(3)

With ActiveSheet

.Name ="Rapport P" & lstPeriode.ListIndex + 1 & "-" & Right (TextBox1.Value, 4)

End With

End sub

Donc mon nouveau nom d'onglet a le nom de "Rapport P1-2018"

Si le nom existe je veux que le nouveau ongler s'appelle "Rapport P1-2018-2"

Comment je fais pour intégrer ton code?

Et si je veux conserver les valeurs de Me.lstPeriode.listIndex, Me.TextBox1.Value et de Me.TextBox2.Value pour les transférer dans module 2 comment je fais.

Merci de me répondre, j'en suis à mes débuts en VBA.

Shawi

Ça serait plus sûr avec ton classeur, pour connaître toutes les feuilles qui y sont ; comme tu as utilisé :

Sheets.Add After:=ThisWorkbook.Sheets(3) c'est qu'il doit y avoir au moins 3 feuilles, et tu insères

la nouvelle feuille toujours après la 3ème feuille, même quand il y en aura bien plus.

Pour faire ta demande, je pense que c'est possible sans avoir à tester si une feuille existe ou non.

Essaye ce code VBA :

Private Sub lstPeriode_Change()

  Dim NumLigne As Integer, n As Integer, chn As String

  NumLigne = Me.lstPeriode.ListIndex + 4 'Numéro de période
  Me.TextBox1.Value = Sheets("Liste").Cells(NumLigne, 9).Value ' Date 1
  Me.TextBox2.Value = Sheets("Liste").Cells(NumLigne, 10).Value 'Date 2

  Sheets.Add After:=ThisWorkbook.Sheets(3): n = Worksheets.Count - 3

  chn = "Rapport P" & lstPeriode.ListIndex + 1 & "-" & Right(TextBox1.Value, 4)
  If n > 1 Then chn = chn & "-" & n

  ActiveSheet.Name = chn

End Sub

Si tu vois qu'une feuille Rapport ne se termine pas par le bon numéro,

ajuste le -3 de n = Worksheets.Count - 3

J'ai été long à te répondre car j'ai dû vérifier la logique de ton code VBA

pour y intégrer le mien (et en plus, je tape pas vite ! ).

N'oublie pas de me donner ton avis.

dhany

Merci beaucoup,

J'essaie ça.

Et comment faire pour transférer les informations de période et de date de mon Userform à mon module2?

Merci,

Shawi

Les informations d'un UserForm (période et date, ou autre) ne doivent pas être transférées dans un module !

elles doivent être transférées sur la feuille de calcul que tu choisis, par exemple "Feuil1".

Si tu veux utiliser Module2 pour écrire le code VBA qui va faire ce travail, c'est tout à fait possible !

dhany

@Shawi : j'avais mal formulé ma réponse précédente, donc je l'ai modifiée pour la rendre plus claire.

en même temps, je l'ai complétée avec la dernière phrase.

dhany

Merci beaucoup,

J'ai essayé le code pour que tu m'a transmis pour la création d'un nouvel onglet.

C'est pas tout à fait ça que je veux.

Je créer un rapport pour une période donnée de l'année (1 à 26 périodes pour 1 année) et je met l'année après la période.

Si j'essaie de créer un 2ième rapport dans la même période, je vais avoir le même nom d'onglet et ça va faire une erreur.

Donc pour éviter une erreur, je dois créer un nouvel onglet pour cette période en lui ajoutant "-2".

Donc onglet "Rapport P1-2018" pour la période 1 de l'année et si cet onglet existe créer un onglet "Rapport P1-2018-2" et ainsi éviter une erreur dans mon programme.

Merci,

Shawi

Merci pour la réponse.

Je dois prendre l'information de la période ( 1 à 26) et les dates qui ont été entrées dans le Userform et m'en servir pour faire un auto.filter dans ma base de données.

Alors je dois retourner à mon module 2 avec l'information pour me servir de la période et des dates comme critères pour créer mon auto.filter de ma base de données.

Alors comme faire pour conserver cette information du Userform vers mon module 2?

Merci,

Shawi

Tu peux avoir jusqu'à 26 périodes par an ; mais combien peut-il y avoir de rapports par période ? seulement 2 ou plus ?

dhany

J'viens d'lire ton message de 6:00, mais là, ça devient trop compliqué ! j'préfère laisser un autre intervenant te répondre, et t'auras plus de chances d'obtenir une réponse adéquate si tu transmets ton fichier (sans données confidentielles) ; pour cela, tu peux utiliser le bouton « Ajouter des fichiers » situé juste sous la fenêtre d'édition du post ; bonne chance pour la suite !

dhany

Rechercher des sujets similaires à "verifier ajout nouveau onglet existe"