[Catégorie modifiée .Net -> VBA] Création automatique de feuille Excel

Résolu
Keviin91 Messages postés 9 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 25 avril 2012 - 30 mars 2011 à 11:50
Keviin91 Messages postés 9 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 25 avril 2012 - 31 mars 2011 à 08:35
Bonjour,
je possède une colonne sous excel qui compore plusieurs noms, je souhaite créer automatiquement pour chaque nom de la colonne une feuille ("onglet") qui comporte ce nom.
J'ai trouvé un code qui fonctionne, le problème et que si j'ajoute des nom à la suite de la colonne et que je lance la macro le programme bug car elle ne peut pas crée des feuilles ("onglet") déjà crée, ce qui est logique. Comment dois-je modifier mon code, pour que elle crée seulement les feuilles ("onglet") des noms que j'ai rentré à la suite de ma colonne et qu'elle conserve les autres feuilles.
Merci

Mon code :

Sub Ajout_Feuil()
Dim cel As Range, plg As Range

Sheets("test").Range("A5").Select
Set plg = Range("A5", Range("A5").End(xlDown))

Application.ScreenUpdating = False

For Each cel In plg.Cells
If cel <> "" Then
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = cel.Value
End If
Next
Application.ScreenUpdating = True

End Sub

7 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
30 mars 2011 à 12:59
Salut

Tu l'as deviné, il faut donc tester l'existence d'une feuille portant ce nom avant de vouloir la créer.

Dim oFeuille As WorkSheet
...
If cel.Value <> "" Then
    On Error Resume Next ' pour éviter erreur si elle n'existe pas
    Set oFeuille = Sheets(cel.Value)
    On Error Goto 0      ' retour à la normale
    If oFeuille Is Nothing Then
        Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = cel.Value
    End If
End If 


NB : Pense à correctement choisir la catégorie de ta question + à utiliser la coloration syntaxique (3ème icone à droite) quand tu colles du code = plus facile à lire

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
Keviin91 Messages postés 9 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 25 avril 2012
30 mars 2011 à 13:37
Tout d'abord merci pour ta réponse et je prend en note ta remarque pour mes réponses futures.
Une petite question que dois je mettre à la place des ... ? Ma plage de cellules à tester ?
Merci
0
Keviin91 Messages postés 9 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 25 avril 2012
30 mars 2011 à 13:44
Voila le code après modification.
Je n'ai plus d'erreus par contre il ne crée pas les onglets si j'ajoute des nouveaux noms dans la colonne !

Sub Ajout_Feuil()
Dim oFeuille As Worksheet
Sheets("test").Range("A5").Select
Set plg = Range("A5", Range("A5").End(xlDown))

Application.ScreenUpdating = False

    
For Each cel In plg.Cells

If cel.Value <> "" Then
On Error Resume Next ' pour éviter erreur si elle n'existe pas
Set oFeuille = Sheets(cel.Value)
On Error GoTo 0      ' retour à la normale
If oFeuille Is Nothing Then
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = cel.Value
End If
End If
Next
End Sub
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
30 mars 2011 à 13:51
Ah, il faut ajouter ceci avant le Next :
Set oFeuille = Nothing
pour réinitialiser la variable objet
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Keviin91 Messages postés 9 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 25 avril 2012
30 mars 2011 à 14:29
Merci beaucoup ça fonctionne !
Par contre j'ai une dernière question, je souhaite créer dans cette colonne un lien vers l'onglet correspondant pour faciliter la navigation, j'ai testé plusieurs chose en utilisant cette fonction
ActiveSheet.Hyperlinks.Add Anchor:=Range(""), Address:="", SubAddress:= _
        "", TextToDisplay:=""

Le problème c'est que je ne comprend pas son fonctionnement et je n'arrive pas à remplir toutes les variables !
Merci d'avance !
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
30 mars 2011 à 19:56
Voir l'aide
0
Keviin91 Messages postés 9 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 25 avril 2012
31 mars 2011 à 08:35
Quelle aide ? Merci
0
Rejoignez-nous