Mais si une valeur de la colonne A est en double, je ne veux pas qu'il ajoute l'onglet, je veux qu'il passe au suivant.
Bref, je n'arrive pas à intégrer ça dans mon code ...
Si vous aviez le petit bout de code qu'il me manque ... ca serait un plaisir
Merci !
je ne l'ai pas testé, mais avec un on error resume next ?
Code:
Private Sub CommandButton4_Click()
Dim z As Integer
Dim shessai2 As Worksheet
For z = 1 To Range("A65536").End(xlUp).Row
[B]On Error Resume Next[/B]
If Not IsEmpty(Cells(z, 1)) Then
Set shessai2 = Sheets.Add(After:=Sheets(Sheets.Count))
shessai2.Name = Cells(z, 1).Value
End If
Next z
End Sub
Il m'a bien créé mes onglets. Lorsqu'il y a un nom commun (doublon), il me créé une feuille classique nommée "feuill14" par exemple.
Lorsque je relance la macro, comme il ne faut pas créer un onglet du même nom, il me créé quand même des feuilles comme ceci : feuill15, feuill16, feuill17, feuill18, etc ...
Alors que je souhaite ne pas créer de feuille
Private Sub CommandButton4_Click()
Dim z&
For z = 1 To Me.Cells(Me.Rows.Count, 1).End(xlUp).Row
On Error Resume Next
If Not IsEmpty(Me.Cells(z, 1)) Then
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = Me.Cells(z, 1).Value
If Err.Number <> 0 Then
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End If
End If
Next z
End Sub
Ça n'est certainement pas meilleur, c'est juste différent.
ROGER2327 #4627
Dimanche 1er Sable 138 (Noces de Balkis et de Salomon, ST) 11 Frimaire An CCXIX 2010-W48-3T10:11:41Z
dans un but purement pedagogique concernant on error resume next (qui avait été proposé par dionys0s)
je modifierais ainsi le code de ROGER
VB:
Private Sub CommandButton4_Click()
Dim z&
For z = 1 To Me.Cells(Me.Rows.Count, 1).End(xlUp).Row
If Not IsEmpty(Me.Cells(z, 1)) Then
Sheets.Add After:=Sheets(Sheets.Count)
On Error Resume Next
ActiveSheet.Name = Me.Cells(z, 1).Value
If Err.Number <> 0 Then
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End If
On Error goto 0
End If
Next z
End Sub
Explication:
on error resume next juste avant la ligne susceptible de declencher une erreur
on error goto 0 obligatoire (dans ce cas particulier : pas de risque mais il faut le savoir)
[B]Private Sub CommandButton4_Click()
Dim z&
For z = 1 To Me.Cells(Me.Rows.Count, 1).End(xlUp).Row
On Error Resume Next
If Not IsEmpty(Me.Cells(z, 1)) Then
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = Me.Cells(z, 1).Value
If Err.Number <> 0 Then
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End If
End If
Next z
End Sub[/B]
Ça n'est certainement pas meilleur, c'est juste différent.
ROGER2327 #4627
Dimanche 1er Sable 138 (Noces de Balkis et de Salomon, ST) 11 Frimaire An CCXIX 2010-W48-3T10:11:41Z
Je cherche à faire exactement la même chose que Nashou, c'est à dire créer des onglets en fonction d'une liste.
J'ai testé avec le code de PierreJean mais ça ne marche pas, ça m'indique un problème avec le mot clé Me.
Je ne m'y connais pas du tout en VBA, j'ai esssayé de bidouiller pour arriver à faire ça mais je patauge un peu.
Si vous avez des conseils sur l'erreur de compilation que ça me donne je suis preneur.
Me: fait en fait référence à l'instance de l'objet en cours ., Pour le coup dans le zip fournit par PierreJean ainsi que le fichier fournit par le demandeur un peu plus haut permettent d'y voir plus clair.
Là et c'est dommage que tu n'ais pas joins un fichier contenant ton code .
Mais à 99.8 % de chance que ton code ne soit pas écrit au bon endroit.
Et oui , le code doit être dans le module de la feuille concernée
soit un fichier avec une feuil1 contenant un bouton4 de commande , il suffit de faire clic droit sur le nom de l'onglet dans la barre d'onglet , puis visualiser le code , et voilà tu es au bon endroit pour copier coller le code.
Si tu est dans les 0.02 % des cas restant, alors il faut absoluement que tu postes ton ficher .