XL 2010 Créer onglet en fonction d'une liste

erwanhavre

XLDnaute Occasionnel
Bonsoir à tous
je cherche par le moyen par le biais d'une macro à créer un onglet pour chaque personnes de l'onglet liste du fichier en pj

en d'autres termes
  1. Je saisis ma liste dans l'onglet liste
  2. j'appuie sur le bouton pour créer autant d'onglet qu'il y à de personnes dans la liste en utilisant à chaque fois le modèle et en remplissant les champs de la liste
merci à tous
 

Pièces jointes

  • Classeur2.xlsx
    10.4 KB · Affichages: 25

Hieu

XLDnaute Impliqué
Salut,

Une idée :
VB:
Sub mlk()
Application.ScreenUpdating = False
Set wf = WorksheetFunction
nb = wf.CountA(Sheets("liste").Range("a:a")) - 1

Call initialisation

nb_sheet = 2
For i = 1 To nb
Sheets("Modele").Copy After:=Sheets(nb_sheet)
Call remplissage(i)
nb_sheet = nb_sheet + 1
Next i

End Sub

Avec les subroutines :
VB:
Sub initialisation()
' supprime tous les onglets exceptés "liste" et "Modele"
Application.DisplayAlerts = False
For Each s In Sheets
If InStrRev("liste_Modele", s.Name) = 0 Then s.Delete
Next s
End Sub

Sub remplissage(i)
' remplissage de la nouvelle feuille
nom = Sheets("liste").Range("a6").Offset(i, 0)
prenom = Sheets("liste").Range("b6").Offset(i, 0)
info1 = Sheets("liste").Range("c6").Offset(i, 0)
info2 = Sheets("liste").Range("d6").Offset(i, 0)
info3 = Sheets("liste").Range("e6").Offset(i, 0)
info4 = Sheets("liste").Range("f6").Offset(i, 0)

Sheets("Modele (2)").Name = nom
With Sheets(nom)
    .Range("b2") = nom
    .Range("b3") = prenom
    .Range("b4") = info1
    .Range("d2") = info2
    .Range("d3") = info3
    .Range("d4") = info4
End With
End Sub
 

Pièces jointes

  • Classeur2_v0.xlsm
    23.6 KB · Affichages: 21

erwanhavre

XLDnaute Occasionnel
bonjour j'ai essayé de l'adapter à mon projet mais je plante après la deuxieme page créé
voici mon code

qu'est ce qui cloche à votre avis

Sub mlk()
'Application.ScreenUpdating = False
Set wf = WorksheetFunction
nb = wf.CountA(Sheets("liste").Range("a:a")) - 1

Call initialisation

nb_sheet = 10
For i = 1 To nb
Sheets("Modèle").Copy After:=Sheets(nb_sheet)
Call remplissage(i)
nb_sheet = nb_sheet + 1
Next i

End Sub

Sub initialisation()
' supprime tous les onglets exceptés "liste" et "Modele"
Application.DisplayAlerts = False
For Each s In Sheets
If InStrRev("PARA_liste_Modèle_HS (pré)_HS_HS (pré) (DEF)_HS (DEF)_Navette_Navette (DEF)_navette def", s.Name) = 0 Then s.Delete
Next s
End Sub

Sub remplissage(i)
' remplissage de la nouvelle feuille
nom = Sheets("liste").Range("a4").Offset(i, 0)
prenom = Sheets("liste").Range("b4").Offset(i, 0)
info1 = Sheets("liste").Range("c4").Offset(i, 0)
info2 = Sheets("liste").Range("d4").Offset(i, 0)
info3 = Sheets("liste").Range("e4").Offset(i, 0)
info4 = Sheets("liste").Range("f4").Offset(i, 0)
info5 = Sheets("liste").Range("g4").Offset(i, 0)
info4 = Sheets("liste").Range("h4").Offset(i, 0)

Sheets("Modèle (2)").Name = nom
With Sheets(nom)
.Range("b3") = nom
.Range("b4") = prenom
.Range("b5") = info1
.Range("g4") = info2
.Range("g5") = info3
.Range("b6") = info4
.Range("a2") = info5
.Range("g6") = info6
End With
End Sub
 

erwanhavre

XLDnaute Occasionnel
c'est bon j'ai trouvé c'était un pb de nom (2 personne ayant le même nom)
j'ai trouvé une solution de contournement par contre arrivé à la fin de la liste il plante avec le modèle(2) il faut probablement un code pour stopper la boucle une fois la liste générée ?
 

Hieu

XLDnaute Impliqué
Bonsoir Erwan,

Post #4 : peux-tu ecrire tes codes sous balises ? c'est illisible.

Post #5 : je ne suis pas sûr de comprendre le soucis ?

Peut-être sur cette variable
VB:
nb = wf.CountA(Sheets("liste").Range("a:a")) - 1

si ta feuille est différente du fichier exemple ?
sous cette ligne, rajoute :
VB:
nb = wf.CountA(Sheets("liste").Range("a:a")) - 1
MsgBox(nb)

ca te permettra de voir le nb dans un message box.
==> est-ce que cela correspond bien au nombre souhaité ?
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 165
Messages
2 085 880
Membres
103 009
dernier inscrit
dede972