Bonsoir,
Je m'excuse de revenir après avoir laisser gmb prendre le relais
Ci dessous ma proposition pour quelques procédure du USF au sujet de la création de feuille :
Sub NouvelOnglet()
' vu que le test d'existance est fait lors de la saisie on peut créer la feuille en toute quiétude
ActiveWorkbook.Sheets.Add after:=ActiveWorkbook.Sheets("CREATION")
' on lui donne le nom des deux combobox
ActiveSheet.Name = ComboBox4 & " " & ComboBox5
' on lance le classement
Call ClassOnglet
End Sub
Private Sub ClassOnglet()
Dim I, J, NbFeuille As Integer
'on récupère le nombre de feuille existante
NbFeuille = ComboBox7.ListCount
' si c'est égale à 0 ou moins on quitte la procédure de classement
If NbFeuille <= 0 Then Exit Sub
' on masque ce que l'on va faire
Application.ScreenUpdating = False
'On classe les onglets
For I = 2 To NbFeuille + 1
For J = I + 1 To NbFeuille + 1
' on compare ce qui ressemble à une date de l'onglet de gauche par rapport à celui de droite
' si la date est plus grande on déplace la feuille à droite de celle de droite
If CDate(Worksheets(I).Name) > CDate(Worksheets(J).Name) Then Worksheets(J).Move Sheets(I)
Next J
Next I
' on efface les données de la combobox 7
ComboBox7.Clear
' et on ré inscrit ces dernières en apportant les modifications
For I = 2 To NbFeuille + 1
ComboBox7.AddItem Sheets(I).Name
Next I
Sheets("CREATION").Activate
End Sub
Function TestF(Partie1 As String, Partie2 As String) As Boolean
Dim Cel As Range
' on passe le test à VRAI par défaut
TestF = True
' gestion des erreurs
On Error GoTo YaErreur
' on attribue à Cel l'objet range de la feuille testée :
' si la feuille n'existe pas il y a une erreur sinon le test est VRAI
Set Cel = Sheets(Partie1 & " " & Partie2).Range("A1")
Exit Function
' il y a une erreur, c'est que la feuille n'existe pas
YaErreur:
' le test est FAUX
TestF = False
End Function
Private Sub ComboBox4_Change()
' ici on test l'existance de la feuille au moment de la sélection des deux parties qui la compose
' si les deux combobox sont différenets de rien
If ComboBox4.ListIndex <> -1 And ComboBox5.ListIndex <> -1 Then
' si le test d'existance est VRAI
If TestF(ComboBox4, ComboBox5) = True Then
' alors on affiche le message d'avertissement
MsgBox ("La feuille en cours de création existe déjà"), 16
' on efface la dernière donnée saisie
ComboBox4.ListIndex = -1
End If
End If
End Sub
Private Sub ComboBox5_Change()
' ici on test l'existance de la feuille au moment de la sélection des deux parties qui la compose
' si les deux combobox sont différenets de rien
If ComboBox4.ListIndex <> -1 And ComboBox5.ListIndex <> -1 Then
' si le test d'existance est VRAI
If TestF(ComboBox4, ComboBox5) = True Then
' alors on affiche le message d'avertissement
MsgBox ("La feuille en cours de création existe déjà"), 16
' on efface la dernière donnée saisie
ComboBox5.ListIndex = -1
End If
End If
End Sub
Private Sub CommandButton2_Click()
If ComboBox4.ListIndex = -1 Then ' vérifie si la saisie est vide (valeur -1 si combobox = vide)
MsgBox ("Veuillez choisir un MOIS"), 16
Exit Sub
ElseIf ComboBox5.ListIndex = -1 Then ' vérifie si la saisie est vide (valeur -1 si combobox = vide)
MsgBox ("Veuillez sélectionner une ANNEE"), 16
Exit Sub
ElseIf ComboBox6.ListIndex = -1 Then ' vérifie si la saisie est vide (valeur -1 si combobox = vide)
MsgBox ("Veuillez sélectionner une EQUIPE DE GARDE"), 16
Exit Sub
ElseIf TextBox1 = "" Then ' vérifie si la saisie est vide (valeur -1 si combobox = vide)
MsgBox ("Veuillez sasir une DATE LIMITE DE RETOUR"), 16
Exit Sub
End If
Call NouvelOnglet
End Sub
Il y a la Sub de "validation" avec les test de complétude d'information.
J'ai ajouté les deux Sub des ComboBox 4 et 5 en Change afin de tester dès la saisie si la feuille existe ou pas.
Une fonction TestF pour savoir si la feuille existe ou pas.
La Sub de "NouvelOnglet" afin de créer la nouvelle feuille à la suite de celle de CREATION.
Et pour finir la Sub de classement par date des onglets. J'ai pris le parti de les trier par "leur date" ce qui fait qu'une double boucle suffit.
Voilà, j'ai mis quelques commentaires pour les explications.
@ bientôt
LouReeD