Remplir une feuille par personne
Bonjour à tous,
Je suis tout nouveau et je débute avec ma première macro alors il faut être indulgent.
J'ai un document que je dois faire pour x personnes.
Les données sont dans le premier onglet et je voudrais que tant qu'il y a un nom une feuille se crée et se remplisse avec les données correspondantes avec comme titre de feuille le nom de la personne mais je ne sais pas trop comment m'y prendre.
J'ai joint un exemple avec els données en feuille 1 et le modèle de document en feuille 2.
Pouvez-vous m'aider s'il vous plaît?
Merci d'avance pour vos réponses.
Frédéric38360
Bonjour Frédéric38360,
voici le code:
Sub test20210529()
'https://forum.excel-pratique.com/excel/remplir-une-feuille-par-personne-158099
Dim WksA As Worksheet, WksNom As Worksheet
Dim Personne As String, CP As String, Aut As String, CPAnc As String, Ct As String
Dim DerLig As Integer
Dim Cel As Range
Set WksA = ThisWorkbook.Sheets("Feuil1")
Set WksNom = ThisWorkbook.Sheets("Nom")
DerLig = WksA.Cells(Rows.Count, 1).End(xlUp).Row
For Each Cel In WksA.Range("A2:A" & DerLig)
Personne = Cel.Value
CP = Cel.Offset(, 1).Value
Aut = Cel.Offset(, 2).Value
CPAnc = Cel.Offset(, 3).Value
Ct = Cel.Offset(, 4).Value
WksNom.Copy After:=Sheets(Sheets.Count)
With ActiveSheet
.Name = Personne
.Range("A7").Value = Personne
.Range("F10").Value = CP
.Range("F19").Value = CPAnc
.Range("F28").Value = Ct
.Range("F33").Value = Aut
End With
Next Cel
End SubBonjour,
J'ai essayé de mettre la macro proposée et quand je le fais cela me met une erreur
Erreur d'execution 9 L'indice n'appartient pas à la sélection et cela sélectionne la ligne suivante.
Set WksA = ThisWorkbook.Sheets("Feuil1")
Qu'est ce que j'ai mal fait?
J'ai inséré un bouton en première page pour exécuter cette macro.
Merci d'avance pour votre aide et bon week-end.
Frédéric
Bonjour,
il n'y a aucune trace de ma macro dans ton fichier, voir exemple ci-joint.
Cordialement.
Bonjour le fil,
@Sequoyah: peut-être faut-il supprimer au préalable les onglets si ils existent déjà ? Car sinon, la macro risque de planter ? Qu'en penses-tu ?
Option Explicit
Sub test20210529() 'macro de Sequoyah
'https://forum.excel-pratique.com/excel/remplir-une-feuille-par-personne-158099
Dim WksA As Worksheet, WksNom As Worksheet
Dim Personne As String, CP As String, Aut As String, CPAnc As String, Ct As String
Dim DerLig As Integer
Dim Cel As Range, sh As Worksheet
Set WksA = ThisWorkbook.Sheets("Feuil1")
Set WksNom = ThisWorkbook.Sheets("Nom")
For Each sh In ThisWorkbook.Worksheets '...............boucle sur les feuilles du classeur
If sh.Name <> "Feuil1" And sh.Name <> "Nom" Then '....si les noms diffèrent de Feuil1 et Nom
Application.DisplayAlerts = False '..................désactive messages d'alerte
sh.Delete '..........................................supprime les feuilles
Application.DisplayAlerts = True '...................réactive messages d'alerte
End If '..............................................fin de la condition
Next sh '..............................................feuille suivante
DerLig = WksA.Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
For Each Cel In WksA.Range("A2:A" & DerLig)
Personne = Cel.Value
CP = Cel.Offset(, 1).Value
Aut = Cel.Offset(, 2).Value
CPAnc = Cel.Offset(, 3).Value
Ct = Cel.Offset(, 4).Value
WksNom.Copy After:=Sheets(Sheets.Count)
With ActiveSheet
.Name = Personne
.Range("A7").Value = Personne
.Range("F10").Value = CP
.Range("F19").Value = CPAnc
.Range("F28").Value = Ct
.Range("F33").Value = Aut
End With
Next Cel
Application.ScreenUpdating = True
End SubCordialement,
@Sequoyah: peut-être faut-il supprimer au préalable les onglets si ils existent déjà ? Car sinon, la macro risque de planter ? Qu'en penses-tu ?
Bonjour, je pense que tu as tout a fait raison!!
Bonjour,
Comment je fais pour mettre la macro dans ma feuille, je vais sur visual basic mais après je sèche, j'ai raté une étape.
J'essaie de trouver mais je ne trouve que comment enregistrer une macro pas comment on l'insère dans un classeur.
Si quelqu'un voulait bien m'expliquer par quels menus je dois passer pour copier coller la macro ce serait sympa cela me ferait progresser un peu :)
Merci d'avance.
Frédéric
Bonjour,
C'est bon j'ai réussi, j'avais du faire ctrl+r par erreur et du coup je n'avais plus l'explorateur de projet c'était le drame.
J'ai fini par retrouver comment on affiche et par insérer le code.
Par contre quand on clique une deuxième fois sur le bouton cela met un message d'erreur alors que je pensais que le code que vous aviez rajoutér permettait de recliquer par exemple si l'on a changé les données
D'ailleurs si vous regardez mon fichier du coup j'ai changé les données et quand on appuie sur le bouton il ressort toujours les vieilles données, comment on fait quand on veut changer de site pour que cela efface les données et que cela reprenne bien les nouvelles il y a une manipulation à faire?
Merci d'avance pour votre aide.
Frédéric
Re,
Lorsque tu enregistres ton fichier, il faut choisir l'extension.xlsm....--->Classeur Excel(prenant en charge les macros)(*.xlsm)
Dans le fichier que tu joins, il n'y a aucune macro.....
Par contre quand on clique une deuxième fois sur le bouton cela met un message d'erreur
L'erreur doit venir du fait que les onglets à créer existent déjà...
https://forum.excel-pratique.com/s/goto/978658
Cordialement,
Merci pour tout grâce à vous j'ai bien progressé aujourd'hui.
Cela marche parfaitement je ne sais pas ce que j'avais fait :) mais ce qui est sur c'est que je n'enregistrai pas dans le bon format.
Je n'ai plus qu'à me mettre dans l'étude du code pour bien comprendre.
Bonne journée.
Bonjour,
Fianlement j'ai une nouvelle question,
J'ai une autre macro à faire pour le même type de travail sauf qu'il faudrait que ma macro créée une nouvelle feuille excel remplie pour chaque personne au lieu d'un onglet.
Est-ce possible?
Merci d'avance pour votre aide et bonne journée..
WILHELM Frédéric
Bonjour,
il faudrait que ma macro créée une nouvelle feuille excel remplie pour chaque personne au lieu d'un onglet.
Je ne comprends pas ta demande....
Quelle différence fais-tu entre une feuille et un onglet ?
Un aperçu du résultat souhaité ?
Cordialement,
Bonjour,
Un nouveau fichier par salarié avec comme nom son nom?
En gros là cela crée 4 feuilles remplies sur le même fichier, je voudrai 4 fichiers d'une feuille chacun.
Est-ce possible?
Frédéric
Re,
Donc en fait, tu souhaites un classeur par nom.
Dans chaque classeur créé, une feuille remplie d'après le modèle "Nom" du classeur source.
Les classeurs créés seront dans le même dossier que le classeur source ?
Cordialement,
Oui pardon tout à fait j'avais oublié le terme classeur c'est exactement cela est-ce possible?
Re,
Oui, c'est possible...
Il y a certainement moyen de faire mieux, mais en attendant une meilleur proposition, voici un essai (qui fonctionne chez moi,
Option Explicit
Sub test20210529() 'macro de Sequoyah
'https://forum.excel-pratique.com/excel/remplir-une-feuille-par-personne-158099
Dim WksA As Worksheet, WksNom As Worksheet, monclasseur As Workbook
Dim Personne As String, CP As String, Aut As String, CPAnc As String, Ct As String
Dim DerLig As Integer, chemin As String
Dim Cel As Range, sh As Worksheet
Set WksA = ThisWorkbook.Sheets("Feuil1")
Set WksNom = ThisWorkbook.Sheets("Nom")
chemin = ThisWorkbook.Path & "\"
DerLig = WksA.Cells(Rows.Count, 1).End(xlUp).Row '..................définit la dernière ligne de Feuil1 en fonction de la colonne A
Application.ScreenUpdating = False '................................désactive le rafraichissement de l'écran (évite le scintillement pendant la boucle)
For Each Cel In WksA.Range("A2:A" & DerLig) '........................boucle sur les cellules de la colonne A à partir de A2
'Définit les valeurs..................................................
Personne = Cel.Value '...........................................nom de la personne
CP = Cel.Offset(, 1).Value '...............................nb CP
Aut = Cel.Offset(, 2).Value '...............................nb autre
CPAnc = Cel.Offset(, 3).Value '...............................nb CP anc
Ct = Cel.Offset(, 4).Value '...............................nb CT
Set monclasseur = Application.Workbooks.Add '.....................crée un nouveau classeur
WksNom.Copy before:=monclasseur.Sheets("Feuil1") '...............copie la feuille Nom dans le nouveau classeur avant la feuille1
With ActiveSheet '...............................................sur cette copie
.Name = Personne '...........................................nom de la copie
'.....on inscrits les valeurs dans les cellules correspondantes
.Range("A7").Value = Personne
.Range("F10").Value = CP
.Range("F19").Value = CPAnc
.Range("F28").Value = Ct
.Range("F33").Value = Aut
End With
Application.DisplayAlerts = False '.............................désactive message d'alerte
With ActiveWorkbook
.SaveAs Filename:=chemin & Personne, FileFormat:=xlNormal '....enregistre le nouveau classeur
.Close '.......................................................ferme le nouveau classeur
End With
Application.DisplayAlerts = True '..............................réactive message d'alerte
Next Cel '..........................................................prochaine cellule de la colonne A
Application.ScreenUpdating = True '.................................réactive le rafraichissement de l'écran
MsgBox "Nouveaux classeurs crées dans :" & chemin '.................message de confirmation (facultatif)
End Sub
Cordialement,
Bonjour,
Je viens d'essayer ce fichier et cela me met une erreur, cela écrit erreur d'execution 1004 Excel ne parvient pas à insérer les feuilles dans le classeur de destination car il contient moins de lignes et de colonnes que le classeur sources
Et cela renvoie vers cette ligne WksNom.Copy before:=monclasseur.Sheets("Feuil1") '...............copie la feuille Nom dans le nouveau classeur avant la feuille1
Je n'arrive pas à résoudre ce problème.
Pouvez-vous m'aider svp?
Merci d'avance.
Frédéric
Bonjour,
Peut-être un souci avec le nom de la feuille : Feuil1 ?
Testes à tout hasard
WksNom.Copy before:=monclasseur.Sheets(1) '......................copie la feuille Nom dans le nouveau classeur en première position
Je craints de ne pouvoir t'aider d'avantage, aucun problème de mon côté (excel 2010)....
Cordialement,
