Création onglet vba à partir d'une liste

Nashou

XLDnaute Junior
Bonjour à tous,

Mon projet est le suivant :
Je souhaite créer des onglets en fonction d'une liste (bon ça je sais faire)
Exemple qui fonctionne :
Private Sub CommandButton4_Click()

Dim z As Integer
Dim shessai2 As Worksheet

For z = 1 To Range("A65536").End(xlUp).Row

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

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 !
 

Pièces jointes

  • Macro création feuille.xls
    45 KB · Affichages: 366

dionys0s

XLDnaute Impliqué
Re : Création onglet vba à partir d'une liste

Bonsoir Nashou

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

Je n'en suis pas certain mais à tester.
 

Nashou

XLDnaute Junior
Re : Création onglet vba à partir d'une liste

re,

J'ai testé avec le On Error Resume Next.

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
 

dionys0s

XLDnaute Impliqué
Re : Création onglet vba à partir d'une liste

Bonjour Nashou, bonjour pierrejean

Ca devrait lui convenir. Pierrejean est-ce possible d'avoir une explication ? Je ne comprends pas "If Not exist_f(Cells(z, 1)) Then"

Si je ne dis pas de bêtise c'est la seule ligne rajoutée (avec le End If). Que représente exist_f ?
 

pierrejean

XLDnaute Barbatruc
Re : Création onglet vba à partir d'une liste

Re

Non dionys0s ,ce n'est pas le seul ajout
Il y a egalement une fonction (exist_f) dont le code est

VB:
Function exist_f(feuille)
For Each sh In Sheets
If sh.Name = feuille Then
exist_f = True
Exit Function
End If
Next
exist_f = False
End Function

cette fonction a pour argument un nom de feuille et le resultat est True si une feuille de ce nom existe et False si elle n'existe pas
 

ROGER2327

XLDnaute Barbatruc
Re : Création onglet vba à partir d'une liste

Bonjour à tous
Autre proposition :
Code:
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
 
Dernière édition:

dionys0s

XLDnaute Impliqué
Re : Création onglet vba à partir d'une liste

Re

Non dionys0s ,ce n'est pas le seul ajout
Il y a egalement une fonction (exist_f) dont le code est

VB:
Function exist_f(feuille)
For Each sh In Sheets
If sh.Name = feuille Then
exist_f = True
Exit Function
End If
Next
exist_f = False
End Function

cette fonction a pour argument un nom de feuille et le resultat est True si une feuille de ce nom existe et False si elle n'existe pas

Re

Merci pierrejean je comprends mieux !
 

pierrejean

XLDnaute Barbatruc
Re : Création onglet vba à partir d'une liste

Re

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)
 
Dernière édition:

Nashou

XLDnaute Junior
Re : Création onglet vba à partir d'une liste

Bonjour à tous
Autre proposition :
Code:
[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

C'est exactement ce qu'il me fallait ! Merci ROGER !!
Merci aussi à Pierre Jean pour les précisions :)
Par contre, je ne comprends pas le
Je ne sais pas comment cela fonctionne. Si vous pouviez m'éclairer

Cdt
 

ROGER2327

XLDnaute Barbatruc
Re : Création onglet vba à partir d'une liste

Re...
(...)
Par contre, je ne comprends pas le
Je ne sais pas comment cela fonctionne. Si vous pouviez m'éclairer

Cdt
Ce n'est pas Dimz& mais Dim z&

C'est une déclaration de variable (z) comme Entier long, qui équivaut à
Code:
Dim z As Long
Voilà...
ROGER2327
#4632


Dimanche 1er Sable 138 (Noces de Balkis et de Salomon, ST)
11 Frimaire An CCXIX
2010-W48-3T18:05:32Z
 
Dernière édition:

Mat_

XLDnaute Nouveau
Re : Création onglet vba à partir d'une liste

Bonsoir à tous,

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.

Merci.
 

camarchepas

XLDnaute Barbatruc
Re : Création onglet vba à partir d'une liste

Bonjour au demandeur initial , à tous les contributeurs et à tous ceux passant par là par hasard ou pas

Hello Mat,

mais ça ne marche pas

OK je suis là , lol

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 .
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Création onglet vba à partir d'une liste

Bonjour à tous, bonjour camarchepas.


D'accord avec les explications de camarchepas.

Mais je doute qu'elles soient utiles car pierrejean n'utilise pas Me dans le code qu'il propose...​


Bonne journée.


ℝOGER2327
#7682


Samedi 14 As 142 (Saint Pierre Bonnard, peintre des Phynances - fête Suprême Quarte)
26 Brumaire An CCXXIII, 4,4330h - pistache
2014-W46-7T10:38:21Z
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 899
Membres
103 982
dernier inscrit
krakencolas