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

21macro-1.xls (41.00 Ko)

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 Sub

Bonjour,

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

9test-macro-1.xls (42.50 Ko)

Bonjour,

il n'y a aucune trace de ma macro dans ton fichier, voir exemple ci-joint.

Cordialement.

17test-macro-1.xls (50.00 Ko)

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 Sub

Cordialement,

@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 Frédéric,

il faut ajouter un nouveau module et y coller le code, voir l'exemple que j'ai joint à ma réponse de 13h57

module

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

9macro-1.xls (38.50 Ko)

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

12macro-v3.xlsm (25.92 Ko)

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
17macro-v3.xlsm (27.89 Ko)

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,

Rechercher des sujets similaires à "remplir feuille personne"