Contrôle noms de feuilles existantes

Bonjour le forum,

Je suis confronté à un problème que je n'arrive à résoudre :

J'ai commencé à créer un UsF qui va venir m'ajouter une feuille avec des données à chaque fois que je ferai "Valider".

Cette feuille qui sera ajoutée à chaque fois aura le nom pris dans 4 Combobox :

Jour

Mois

Zone

Période

Jusque là, tout va bien !

Ce que je n'arrive pas à faire, c'est soit d'écraser la feuille, soit de la supprimer si elle a déjà le même nom.

voici le code :

Private Sub CommandButton3_Click()

Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
For Each CTRL In Me.Controls 'boucle sur touts les contrôles de l'UserForm en cours
    'condition 1 : si le contrôle est une Combobox ou une TextBox
    If TypeOf CTRL Is MSForms.ComboBox Or TypeOf CTRL Is MSForms.TextBox Then
        If CTRL.Value = "" Then 'condition 2 : si le contrôle est vide
            MsgBox "Champ non renseigné !", vbExclamation
            CTRL.SetFocus 'place le curseur dans le controle
            Exit Sub 'sort de la procédure
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next CTRL 'prochain contrôle de la boucle

If Me.ComboBox1 = "" Then Exit Sub
If Me.ComboBox2 = "" Then Exit Sub
If Me.ComboBox4 = "" Then Exit Sub
If Me.ComboBox5 = "" Then Exit Sub
On Error Resume Next

Sheets(Me.ComboBox1.Text & _
Me.ComboBox2.Text & _
Me.ComboBox4.Text & _
Me.ComboBox5.Text).Visible = True

Sheets.Add after:=Sheets(Sheets.Count)

ActiveSheet.name = _
Me.ComboBox1 & " " & _
Me.ComboBox2 & " " & _
Me.ComboBox4 & " " & _
Me.ComboBox5

End Sub
forum

J'espère que vous n'aurez pas besoin de mon fichier (contenant des données sensibles).

Si jamais, il va me falloir le modifier pour le poster ici

Je vous remercie, d'avance, de vous pencher sur mon sujet

bonjour,

essaie ceci

non testé

    On Error Resume Next
    Set sh = Nothing
    Set sh = Sheets(Me.ComboBox1.Text & _
    Me.ComboBox2.Text & _
    Me.ComboBox4.Text & _
    Me.ComboBox5.Text)
    On Error GoTo 0
    If sh = Nothing Then 'la feuille n'existe pas
        Sheets.Add after:=Sheets(Sheets.Count)
        Set sh = ActiveSheet
        sh.Name = _
        Me.ComboBox1 & " " & _
        Me.ComboBox2 & " " & _
        Me.ComboBox4 & " " & _
        Me.ComboBox5
    Else 'la feuille existe
        sh.Visible = True
    End If

Bonjour,

vous pouvez vous servir de la gestion des erreurs pour faire le test de l'existence ou pas de la feuille.

Pour simplifier le nom de la feuille recherchée est "Feuille" mais pour vous ce sera la concaténation de vos divers combobox :

Sub Test()
    Dim Feuille As String
    Feuille = "LRD"
    ' on met en marche la gestion des erreurs
    On Error Resume Next
        ' on active la feuille du nom de Feuille
        Sheets(Feuille).Activate
        If Err > 1 Then ' la feuille n'existe pas on la crée
            Sheets.Add after:=Sheets(Sheets.Count)
            ActiveSheet.Name = Feuille
        Else ' elle existe
            ' on la supprime
            Application.DisplayAlerts = False
                ActiveSheet.Delete
            Application.DisplayAlerts = True
            ' on en crée une nouvelle qui porte le nom choisi
            Sheets.Add after:=Sheets(Sheets.Count)
            ActiveSheet.Name = Feuille
        End If
    ' on arrête la gestion des erreurs
    On Error GoTo 0
End Sub

Le fichier en correspondance :

@bientôt

LouReeD

Bonjour h2so4 !

Décidément en ce moment j'ai toujours un temps de retard !

Je prend note du "SET" qui évite d'activer la feuille, c'est un test plus "silencieux" dans le fonctionnement de la gestion d'erreur, car si l'on veut tester sans activer, c'est mieux !

@ bientôt

LouReeD

Merci à vous,

h2so4 : "l'indice n'appartient pas à la sélection"

LouReed : je dois concaténer après Feuille = ?

De quelle manière avec mes ("ComboBox1") , ("ComboBox2") , ("ComboBox4") , ("ComboBox5") ?

Désolé, je ne maîtrise pas encore assez le langage VBA, merci pour votre patience

h2so4 :

Private Sub CommandButton3_Click()

Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
For Each CTRL In Me.Controls 'boucle sur touts les contrôles de l'UserForm en cours
    'condition 1 : si le contrôle est une Combobox ou une TextBox
    If TypeOf CTRL Is MSForms.ComboBox Or TypeOf CTRL Is MSForms.TextBox Then
        If CTRL.Value = "" Then 'condition 2 : si le contrôle est vide
            MsgBox "Champ non renseigné !", vbExclamation
            CTRL.SetFocus 'place le curseur dans le controle
            Exit Sub 'sort de la procédure
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next CTRL 'prochain contrôle de la boucle

 On Error Resume Next
    Set sh = Nothing
    Set sh = Sheets(Me.ComboBox1.Text & _
    Me.ComboBox2.Text & _
    Me.ComboBox4.Text & _
    Me.ComboBox5.Text)
    On Error GoTo 0
    If sh = Nothing Then 'la feuille n'existe pas
        Sheets.Add after:=Sheets(Sheets.Count)
        Set sh = ActiveSheet
        sh.name = _
        Me.ComboBox1 & " " & _
        Me.ComboBox2 & " " & _
        Me.ComboBox4 & " " & _
        Me.ComboBox5
    Else 'la feuille existe
        sh.Visible = True
    End If

End Sub
forum2

Au lieu de :

Feuille = "LRD"

écrire :

Feuille = Me.ComboBox1.Text & Me.ComboBox2.Text & Me.ComboBox4.Text & Me.ComboBox5.Text

Attention ! Il vous faut intégrer le code dans le votre ou bien vous faites juste un appel à celui-ci en donnant feuille en paramètre :

Call Test(Me.ComboBox1.Text & Me.ComboBox2.Text & Me.ComboBox4.Text & Me.ComboBox5.Text)

et plus loin :

Sub Test(Feuille As String)
    ' on met en marche la gestion des erreurs
    On Error Resume Next
        ' on active la feuille du nom de Feuille
        Sheets(Feuille).Activate
        If Err > 1 Then ' la feuille n'existe pas on la crée
            Sheets.Add after:=Sheets(Sheets.Count)
            ActiveSheet.Name = Feuille
        Else ' elle existe
            ' on la supprime
            Application.DisplayAlerts = False
                ActiveSheet.Delete
            Application.DisplayAlerts = True
            ' on en crée une nouvelle qui porte le nom choisi
            Sheets.Add after:=Sheets(Sheets.Count)
            ActiveSheet.Name = Feuille
        End If
    ' on arrête la gestion des erreurs
    On Error GoTo 0
End Sub

@ bientôt

LouReeD

Concaténer comme en Fx dans une cellule (ou presque), bien évidemment !!!

Au final :

Feuille = Me.ComboBox1.Text & " " & Me.ComboBox2.Text & " " & Me.ComboBox4.Text & " " & Me.ComboBox5.Text

Ajouter à votre code et c'est parfait, exactement ce que je voulais

Merci à vous 2, vraiment !

Bonne soirée.

Bonjour,

pour corriger l'erreur sur cette instruction

If sh = Nothing Then 'la feuille n'existe pas

remplacer par

If sh is Nothing Then 'la feuille n'existe pas

Bonne soirée @ vous également, et @ vous h2so4 !

Je n'avais même pas relevé l'erreur !

@ bientôt

LouReeD

Rechercher des sujets similaires à "controle noms feuilles existantes"