Création conditionnelle de feuille (erreurs 13 et 91)

Cecinerock

XLDnaute Nouveau
Bonjour le forum,

J'ai un classeur avec dans la sheet1 un tableau. La quatrième colonne (projects) contient les noms des différents projets.
Je cherche à générer autant d'onglets que de projet dont le nom commence par "NE_" !
voici le code que j'ai utilisé :

' créer autant d'onglets que de projets NE

Dim onglet As Worksheets
Dim cel As Range
Dim i As Long

Set cel = Worksheets("Raw data").Range("D:D")

If WorksheetFunction.CountIf(cel, Left(cel, 3) = "NE_") Then

Sheets.Add after:=Sheets(Sheets.Count)

For i = 1 To WorksheetFunction.CountIf(cel, Left(cel, 3) = "NE_")

onglet.Name = Cells(cel & i + 2)
i = i + 1

Next


End If

cependant, dès l'exécution, une erreur 91 et des fois 13 s'affichent
quelqu'un peut-il m'aider ?

merci par avance


ps : le fichier joint présente une structure simplifiée de mon fichier !
 

Pièces jointes

  • Classeur1.xlsx
    8.7 KB · Affichages: 31
  • Classeur1.xlsx
    8.7 KB · Affichages: 36
  • Classeur1.xlsx
    8.7 KB · Affichages: 33

Gorfael

XLDnaute Barbatruc
Re : Création conditionnelle de feuille (erreurs 13 et 91)

Salut Cecinerock et le forum,
Erreur tellement classique que je ne suis pas allé plus loin :
Dim onglet As Worksheets => déclarer la variable "onglet" comme collection de feuille
Dim onglet As Worksheet => déclarer la variable "onglet" comme feuille
Je ne comprends pas ton code... et les smiley n'aide pas
Code:
Dim cel As Range
           Dim i As Long
Déclaration des variables : ok par contre j'aime pas i personnellement, facilement confondu avec 1 (à 3h00 du mat... mais ça arrive)
Code:
             Set cel = Worksheets("Raw data").Range("D:D")
Définir la colonne D comme variable cel... moyen : m'étonnerais que tu dépasses la ligne 1000 et si tu as excel 2003 ou inférieur, ça te laisse plus de 64000 cellules qui ne servent à rien
Code:
                If WorksheetFunction.CountIf(cel, Left(cel,rends 3) = "NE_") Then
                           Sheets.Add after:=Sheets(Sheets.Count)
      For i = 1 To WorksheetFunction.CountIf(cel, Left(cel, 3) = "NE_")
                                     onglet.Name = Cells(cel & i + 2)
                                    i = i + 1
                             Next
                End If
Ta méthode est un peu ambigüe pour moi. Alors pour excel...
Je ferais plutôt un code dans ce sens :
Code:
Dim Cel As Range
Dim X As Long
With Worksheets("Raw data") '=> si une instruction commence par un opérateur de liaison, on met la feuille en préfixe
    For Each Cel In .Range(.[D1], .Cells(Rows.Count, "D").End(xlUp))
    'pour chaque cellule de D1 à dernière untilisée en D de la feuille "Raw Data"
        If Left(Cel, 3) = "NE_" Then
        'si la cellule commence par "NE_", alors
            Sheets.Add after:=Sheets(Sheets.Count)
            'créer une nouvelle feuille en dernière place => elle devient la feuille active
            ActiveSheet.Name = Cel
            'la feuille active est renommée de la valeur de la cellule (NE_xxxxxxx...)
        End If
    Next
End With
Comme j'ai commenté mon code, je pense que ça suffit !
A+
 

Cecinerock

XLDnaute Nouveau
Re : Création conditionnelle de feuille (erreurs 13 et 91)

salut Gorfael, et le forum,

merci pour tes précisions
cependant, vb affiche une erreur, et il me dit qu'il est impossible de nommer plusieurs sheets de la même façon ! que faire ?

ps : il bogue o niveau de :
ActiveSheet.Name = Cel

j'ai pensé à intégrer une boucle for et ajouter un "i" à cel ...

merci bcp
 

Discussions similaires

Statistiques des forums

Discussions
312 451
Messages
2 088 519
Membres
103 875
dernier inscrit
Farouka