Créer une feuille par item dans plage de cellules

Salut le forum,

j'aimerais établir un code qui me permet de créer une feuille par cellule remplie dans une plage qui n'est pas connu au départ. Cette plage début toujours en A2 et peut varier de A2:A5 à A2:H11 dépendamment d'un choix précédent. Il peut y avoir des cellules vides dans cette plage.

Merci pour votre aide.

Edit : Aussi, les cellules de cette plage ne contiendront jamais de valeurs identiques.

Je viens d'écrire ce code qui fonctionne mais qui a encore deux problèmes.

Private Sub CommandButton1_Click()

Dim Tableau As Range
Dim Cellule As Object

Set Tableau = Range("A1", Range("A1").End(xlDown).End(xlToRight))

For Each Cellule In Tableau
    Worksheets.Add
    ActiveSheet.Name = Cellule
Next Cellule

End Sub

1er problème : S'il n'y a qu'une seule colonne, j'ai un bug.

2e problème : Si j'ai une cellule vide, j'ai un bug.

Bonjour

Le choix des noms de feuille est en colonne 1

Private Sub CommandButton1_Click()

Dim Tableau As Range
Dim Cellule As Object

Set Tableau = ActiveSheet.UsedRange.Rows("1:" & ActiveSheet.UsedRange.Rows.Count)
'Range("A1", Range("A1").End(xlDown).End(xlToRight))

For Each Cellule In Tableau
If Cellule = "" Then
    Cellule = Cellule.Offset(0, 1)
Else
    Worksheets.Add.Name = Cellule
End If
Next Cellule

End Sub

Bonjour,

C'est un problème qui a de nombreuse références sur le Web.

Il faut jouer habilement entre Range, End, Resize et/ou UsedRange

Mais si tu utilise End, il semble qu'il faut d'abord évaluer "A2" au début de la macro. Ensuite... Les solutions sont très différentes selon le contexte ! Mais c'est toujours plus ou moins délicat selon que ta feuille comporte ou non d'autres données que le tableau...

Dans tous les cas tu ne peux pas faire l'impasse sur une évaluation de chaque cellule dans ta boucle

For each cellule...

If cellule.Value <> "" then...

Peut-être qu'une solution simpliste et arbitraire serait plus simple puisque tu peux fixer une limite maximum à ton tableau.

For each cellule in Range("A2:H11")

If cellule.Value <> "" And cellule.Row >1 then...

Le seul problème c'est si le mini tableau fait moins de onze lignes et que pour le coup ça fait remonter des données qui n'ont rien à voir dans le pb. Mais si peux réserver cette zone alors Yapa de pb.

A+

Salut CB60 et galopin,

merci pour vos suggestions.

CB60, j'ai une erreur à la ligne IF Cellule...

galopin01 a écrit :

Peut-être qu'une solution simpliste et arbitraire serait plus simple si tu peux fixer une limite maximum à ton tableau.

Cette plage début toujours en A2 et peut varier de A2:A5 à A2:H11. Tu vois, il y a une limite à mon tableau.

Le problème étant que les colonnes n'ont pas toujours la même longueur.

Pour l'instant, j'y suis parvenu en analysant les cellules de chaque colonne une à la fois.

Private Sub CommandButton1_Click()

Dim Tableau As Range
Dim Cellule As Object

On Error GoTo Gestion_Erreur

Set Tableau = Range("A1", Range("A1").End(xlDown))

For Each Cellule In Tableau
    Worksheets.Add.Name = Cellule
Next Cellule

Set Tableau = Range("B1", Range("B1").End(xlDown))

For Each Cellule In Tableau
    Worksheets.Add.Name = Cellule
Next Cellule

Set Tableau = Range("C1", Range("C1").End(xlDown))

For Each Cellule In Tableau
    Worksheets.Add.Name = Cellule
Next Cellule

Set Tableau = Range("D1", Range("D1").End(xlDown))

For Each Cellule In Tableau
    Worksheets.Add.Name = Cellule
Next Cellule

Set Tableau = Range("E1", Range("E1").End(xlDown))

For Each Cellule In Tableau
    Worksheets.Add.Name = Cellule
Next Cellule

Set Tableau = Range("F1", Range("F1").End(xlDown))

For Each Cellule In Tableau
    Worksheets.Add.Name = Cellule
Next Cellule

Set Tableau = Range("G1", Range("G1").End(xlDown))

For Each Cellule In Tableau
    Worksheets.Add.Name = Cellule
Next Cellule

Set Tableau = Range("H1", Range("H1").End(xlDown))

For Each Cellule In Tableau
    Worksheets.Add.Name = Cellule
Next Cellule

Exit Sub

Gestion_Erreur:
Application.DisplayAlerts = False
Worksheets(1).Delete

End Sub

Merci pour votre aide.

galopin, tu t'es relu hein?

galopin01 a écrit :

Peut-être qu'une solution simpliste et arbitraire serait plus simple puisque tu peux fixer une limite maximum à ton tableau.

bonjour,

je viens d'affiner un peu ma réponse précédente, tu peux peut-être me relire...

En fait pour la limite maximum j'avais (enfin !) compris, mais la question c'est est-ce que tu peux reserver toute cette zone de ta feuille ? Si oui pas de problème, tu analyses tout le temps toute la zone et là pas de problème.

Par contre c'est plus compliqué si la zone ne comporte que 5 lignes par exemple et que tu en profites pour mettre autre chose dans les lignes suivantes...

Je vais essayer de te faire une 'tite démo...

A+

Pour répondre à ta question, oui la zone est réservée. Rien d'autre ne sera écrit là.

Pour l'instant, j'ai un code qui fonctionne parfaitement. Le seul inconvénient est qu'il est plutôt long et répétitif mais il fonctionne.

la

(cas simple: pas d'autres données dans la zone)

A+

Bonjour

Mon code ne traité les noms de feuille qu'avec la colonne 1, je n'avais pas compris que tu souhaitais, reprendre toutes les valeurs de la plage.

Pas de problème Cb60.

Super galopin. Je vais adopté ton code puisqu'il est plus simple que le mien.

En passant, on peut sacrifier And o.Row > 1 de la ligne

If o.Value <> "" And o.Row > 1 Then

Cette condition en sert pas.

Merci encore à vous deux.

Bien sur ! A force de faire des essais tous azimuths les copier/coller deviennent un peu aléatoires...

A+

Rechercher des sujets similaires à "creer feuille item plage"