Créer un onglet sous condition VBA

Résolu
Signaler
Messages postés
8
Date d'inscription
jeudi 26 février 2009
Statut
Membre
Dernière intervention
14 décembre 2011
-
Messages postés
8
Date d'inscription
jeudi 26 février 2009
Statut
Membre
Dernière intervention
14 décembre 2011
-
Bonjour,
J'ai un pb sous VBA que je n'arrive pas à résoudre:
1.Je dispose d'une colonne de noms (appelée "plage") dans un onglet Excel
2.Je souhaite créer une macro qui screenerait cette colonne de noms et qui me créerait un nouvel onglet si et seulement si l'on trouve dans la plage une valeur dont le nom n'a pas encore été créée en onglet

Ex: j'ai 2 onglets dans mon fichier: "bidule" et "machin" et dans ma plage je dispose de 3 noms : "bidule", "machin" et "truc"
>>>la macro devrait me créer un nouvel onglet "truc" dans mon fichier Excel (de préférence après tous les autres onglets)

Merci bcp pour votre aide !

8 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bien ...
Moi je veux bien (tu sais ce que tu fais là, j'espère, hein !)
Dim toto As Worksheet, machin As Variant, tablo
  With Sheets("input")
    derlig = .Range("A" & Rows.Count).End(xlUp).Row
    tablo = .Range("A1:A" & derlig)
    For Each machin In tablo
      If machin <> "" Then
        On Error Resume Next
        Set toto = Worksheets(machin)
        If Err > 0 Then
          Set dest = Worksheets.Add(after:=Worksheets(Worksheets.Count))
          dest.Name = machin
        End If
        On Error GoTo 0
      End If
    Next
  End With

J'ai traité avec on error resume next pour ne pas te forcer à utiliser un objet (Dictionnary) supplémentaire.
Je te laisse entièrement responsable du "volume" que va prendre ton classeur.
Bonne suit.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonjour,

1) VBA n'est pas VB6 !
Nous te serions reconnaissant de bien vouloir dorénavant apporter le plus grand soin au choix de la section dans laquelle tu ouvre une discussion (c'est important)

2) je ne comprends pas
une macro qui screenerait cette colonne de noms


3) montre-nous le code que tu as au moins tenté d'écrire, s'il te plait

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
8
Date d'inscription
jeudi 26 février 2009
Statut
Membre
Dernière intervention
14 décembre 2011

Bonjour,

Cela fait un moment que je ne suis pas allé sur le forum,pardon pour l'erreur.

Voilà le code que j'ai tenté:
Sub testbis()

Dim NomsFeuilles() As String
Dim B As Boolean
ReDim NomsFeuilles(1 To Worksheets.Count)
For Nb = 1 To Worksheets.Count
NomsFeuilles(Nb) = Worksheets(Nb).Name
Next Nb
'For Z = 1 To Worksheets.Count
For i = 4 To 24
If Worksheets("d").Range("J" & i).Value = NomsFeuilles(Z) Then
B = True
Exit For
End If
Next i
Next Z
If Not B Then WSheets.Add.Move After:=Sheets(Sheets.Count)

End Sub

Merci pour votre aide !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bon !
ce code ne fait finalement rien ....
sauf déclencher une erreur sur cette ligne :
If Not B Then WSheets.Add.Move After:=Sheets(Sheets.Count) 

(à moins que tu n'aies déclaré ... mais où ? et initialisé ... mais où ?....... wsheets...)
et si tu nous exposais alors un peu plus clairement et précisément les tenants et aboutissants (à commencer par le verbe "screener") ? On y verrait alors peut-être un peu plus clair, non ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
8
Date d'inscription
jeudi 26 février 2009
Statut
Membre
Dernière intervention
14 décembre 2011

Et bien pour prendre un exemple un peu plus précis, mettons qu'il existe 3 onglets dans mon fichier Excel:
1)Un onglet nommé "bidule" et un autre "machin" et un onglet "input"
2) Dans mon onglet "input", j'ai en colonne A une liste de noms (ex: 3 noms)
3) je dispose par exemple des 3 noms suivants : "bidule", "machin" et "truc" or je constate en regardant ces 3 noms que l'onglet "truc" n'existe pas dans mon fichier Excel
4) j'aimerais donc que la macro détecte cela en passant en revu l'ensemble de mes valeurs en colonne A de mon onglet "input" et me crée les onglets portant le nom de la cellule s'ils n'existent pas (par exemple, la macro devrait me créer un nouvel onglet "truc" dans mon fichier Excel)

Je précise également que dans ma colonne d'inputs, j'ai bien plus de 3 valeurs (environ 200) et que j'ai bien plus de 3 onglets au total dans mon fichier (peut etre une cinquantaine)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
He bien voilà !
Au bout du compte :
Tu veux :
1) parcourir toutes les cellules de l colonne A d'une feuille (pas un "onglet", hein ...) nommée "Input"
2) pour chaque valeur d'une cellule ainsi lue ===>> créer une feuille avec, pour nom, cette valeur, si elle n'existe pas déjà !
C'est celà ?

Mais dis-voir ...
Je précise également que dans ma colonne d'inputs, j'ai bien plus de 3 valeurs (environ 200)

tu comptes vraiment créer jusqu'à 200 feuilles, si par exemples 2010 valeurs différentes ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
8
Date d'inscription
jeudi 26 février 2009
Statut
Membre
Dernière intervention
14 décembre 2011

Oui c'est bien ça
Messages postés
8
Date d'inscription
jeudi 26 février 2009
Statut
Membre
Dernière intervention
14 décembre 2011

Merci bcp ucfoutu, ça fonctionne très bien et ça m'aura épargné pas mal de temps !