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+
- Messages
- 4'092
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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
- Messages
- 4'092
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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
- Messages
- 4'092
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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
- Messages
- 4'092
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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é
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.