Création d'onglets à partir d'une feuille de données

Bonjour à tous,

et oui me revoilà...

Je vais essayer d'être clair... Je souhaite créer un onglet pour chaque nom "GDO" colonne X rencontré. Je souhaite également recopier les 7 premières ligne comme sur ma feuille référence "Cumul anomalies" et y recopier les lignes correspondantes.

Et si possible l'onglet devra avoir le nom "R-xxx", où xxx est le nom contenu dans la colonne "GDO".

J'ai commencé à écrire ce code, que j'ai adapté à mon besoin mais ça ne fonctionne pas

Sub k_Onglet()
Dim Sh As Worksheet
Dim LastLig As Long, i As Long

With Sheets("Cumul anomalies")
    LastLig = .Cells(.Rows.Count, "Y").End(xlUp).Row
    For i = LastLig To 8 Step -1
        On Error Resume Next
        Set Sh = Sheets(CStr(.Range("Y" & i).Value))
        On Error GoTo 0
        If Sh Is Nothing Then
            Set Sh = ThisWorkbook.Sheets.Add
            Sh.Name = CStr(.Range("Y" & i).Value)
            .Range("A1:AB7").Copy Sh.Range("A1")
        End If
        Set Sh = Nothing
    Next i
End With
End Sub

Il y a déjà une erreur sur cette ligne: Sh.Name = CStr(.Range("Y" & i).Value)

Qui plus est, cette macro n'est pas complète et là je sèche pour la suite.

Merci d'avance pour l'aide que vous voudrez bien m'apporter.

A vous lire

Bonsoir Pcaille,

Je te propose le module suivant :

Const cFromSheet = "Cumul anomalies"
Sub k_Onglet()
Dim Sh As Worksheet
Dim oFromSheet As Worksheet
Dim oRange As Excel.Range
Dim LastLig As Long, i As Long
Dim sSheetname As String
Dim lCol As Long

Set oFromSheet = ThisWorkbook.Worksheets(cFromSheet)
With oFromSheet
    LastLig = .UsedRange.Rows.Count
    lCol = .UsedRange.Columns.Count
    For i = LastLig To 8 Step -1
        .AutoFilterMode = False
        On Error Resume Next
        sSheetname = "R-" & .Cells(i, 24)
        Set Sh = ThisWorkbook.Sheets(sSheetname)
        On Error GoTo 0
        If Sh Is Nothing Then
            Set Sh = ThisWorkbook.Sheets.Add
            Sh.Name = sSheetname
            Set oRange = .Range(.Cells(7, 1), .Cells(LastLig, lCol))
            .AutoFilterMode = False
            oRange.AutoFilter 24, .Cells(i, 24).Value
            oRange.Parent.AutoFilter.Range.Copy Sh.Range("A7")
        End If
        Set Sh = Nothing
    Next i
End With
End Sub

Merci GVIALLES,

pour ta proposition de code, mais il y a un bloquage sur la ligne:

Set oFromSheet = ThisWorkbook.Worksheets(cFromSheet)

Et je ne trouve pas l'erreur....

A te lire

Pcaille,

As-tu vérifié que la déclaration de constante

Const cFromSheet = "Cumul anomalies"

était correcte?

Quel est le message d'erreur envoyé par EXCEL?

Bonjour Gérard,

oui j'ai vérifié déclaration de constante. J'ai refait l'essai à partir du fichier mis en téléchargement.

Toujours la même erreur, le message est:

"L'indice n'appartient à la sélection"

A te lire.

Cordialement

Peux-tu communiquer ton classeur (après y avoir fait disparaître toutes données confidentielles)?

C'est celui de mon 1er post.

A te lire.

Bonjour,

j'ai beau fouiller sur le forum et sur le net, je ne comprend pas l'origine de cette erreur!!!

A vous lire.

Bonsoir PCaille,

J'ai repris ton classeur tel quel, ajouté le module proposé et l'ai exécuté. Je ne rencontre pas de pb.

Désolé.

Si tu veux, renvoies-moi le classeur qui bogue.

Bonjour Gérard,

mon problème est en parti réglé via un autre post et une autre macro.

Néanmoins j'aimerai bien comprendre pourquoi il y a ce problème. Je te joint le fichier pour que tu puisses faire un essai.

Merci de ton aide et de ton analyse.

NB: Ah les joies de l'informatique!!!

Bonjour Pcaille,

J'ai repris le nouveau classeur que tu as transmis. N'y ayant pas vu le module proposé, je l'ai ajouté, exécuté et tout c'est bien passé.

Sans être tout à fait formel, je crois que tu as dû oublier de mettre en tête de module la déclaration :

Const cFromSheet = "Cumul anomalies"

Si je me trompe, ou si tu veux aller plus loin, transmets-moi la version du classeur qui bogue avec le module tel que tu l'as ajouté.

Re,

je te joint une copie d'écran de la copie de la macro.

J'ai refait un copier coller de ton code fourni lors du premier post.

La macro se trouve dans mon classeur de macro perso et non pas dans la feuille.

Est ce là la différence?

Cordialement.

Ah, ça s'éclaire...

Dans le cas de macros enregistrés dan un XLSB, lorsque l'on mentionne "Thisworkbook" on se réfère à l'XLSB et non à l'xls qui fait appel aux macros.

Pour remédier à ça, il faut remplacer dans la macro tous les "Thisworkbook" par "ActiveWorkbook".

Fais cela et tiens-moi informé.

Re Gérard,

merci pour ta persévérance, à présent tout fonctionne parfaitement.

A bientôt pour de nouvelles aventures.

Rechercher des sujets similaires à "creation onglets partir feuille donnees"