Creation de feuilles en fonction d'une liste

Bonjour,

J'ai une liste de de machines dans une feuille et j'aimerai une macro qui me crée automatique les feuilles comportant les noms présent dans cette liste. Après plusieurs recherche j'ai adapté une macro qui est la suivant :

Sub CREER()

Dim Cellule As Range

Dim AireACopier As Range

Dim ListeACopier As Range

Set ListeACopier = Sheets("Feuil1").Range("A2:A20")

For Each Cellule In ListeACopier

Set AireACopier = Sheets("Feuil1").Range("A1:I1,A" & Cellule.Row & ":I" & Cellule.Row)

AireACopier.Copy

Sheets.Add After:=Worksheets(Worksheets.Count)

ActiveSheet.Cells(1, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True

ActiveSheet.Name = Cellule

Next Cellule

Set AireACopier = Nothing

Set ListeACopier = Nothing

End Sub

Jusque là pas de problème sauf... que dans ma liste, j'ai des noms dépassant 31 caractères et ça coince...

Comment pourrai-je contourner le problème ?

Merci d'avance.

Axel

Bonjour,

un solution serait de nommer ta feuille de cette manière

ActiveSheet.Name = left(Cellule, 30)

Ta feuille serait nommé d'après les 30 premiers caractères du nom de ta machine.

A voir, si tu n'as pas plusieurs machines dont les débuts de nom sont identiques (ce qui poserait un autre problème)

RemBabar

D'accord je garde cette info pour plus tard.

Malheureusement il arrive parfois que les noms se diffères dans les derniers caractères.

Tapis xxxxxxx 500

tapis xxxxxxx 400

N'y aurait-il pas une solution pour "couper" le milieu de la désignation ?

(prendre les 15 premiers et les 15 derniers caractères )

Merci d'avance.

Axel

Pour prendre les 15 premiers et 15 derniers caractères :

If Len(Cellule.value) > 30 Then
     ActiveSheet.Name = left(Cellule.value, 15) & right(Cellule.value, 15)
Else
     ActiveSheet.Name = Cellule.value
Endif

J'ai rajouté une condition : si le nom à plus de 30 caractères alors on prends le début et la fin, sinon on prend le nom complet.

A toi de voir selon tes données, le nombre de caractère qu'il vaut mieux prendre à gauche ou à droite. Si tu souhaite séparer les deux parties, tu peux procéder ainsi :

If Len(Cellule.value) > 30 Then
     ActiveSheet.Name = left(Cellule.value, 14) & ".." & right(Cellule.value, 14)
Else
     ActiveSheet.Name = Cellule.value
Endif

N'hésite pas à poser une question (et à me confirmer que le code marche bien) !

RemBabar

C'est exactement ce qu'il me fallait !

Merci beaucoup,

je clos le sujet

Rechercher des sujets similaires à "creation feuilles fonction liste"