Nommer et remplir des feuilles selon une liste

Bonjour à tous,

Je débute sur excel depuis quelques mois, je n'ai pas encore eu de formation donc les premiers pas sont difficiles.

Je cherche à créer une macro VBA qui créé et nomme des feuilles avec les nom des agents de la liste "matrice".

Il faut que cette nouvelle feuille contienne la tableau "modèle" et que se tableau se remplisse avec les informations

de la liste "matrice.

J'ai réussi a commencer la macro mais là je suis bloqué, ca devient trop complexe pour moi.

Si quelqu'un a une idée je suis preneur.

Vous remerciant par avance, bien cordialement.

27aide.xlsm (27.29 Ko)

Bonjour Pierre, le forum,

Un début de réponse:

Sub test()

Dim i As Integer, dl As Integer

   dl = Sheets("MATRICES").Range("B" & Rows.Count).End(xlUp).Row

For i = 3 To dl
  Sheets("MODELE").Copy after:=Sheets(Sheets.Count)
   ActiveSheet.Name = Sheets("MATRICES").Range("B" & i)
   ActiveSheet.Range("C1") = Sheets("MATRICES").Range("B" & i)
   ActiveSheet.Range("C2") = Sheets("MATRICES").Range("C" & i)
   ActiveSheet.Range("F1") = Sheets("MATRICES").Range("E" & i)
   ActiveSheet.Range("F2") = Sheets("MATRICES").Range("D" & i)
Next i
End Sub

Reste à gérer l'erreur si la feuille existe déjà....

Cordialement,

Bonjour Pierre, bonjour le forum,

Peut-être comme ça :

Sub Macro1()
Dim MO As Worksheet 'déclare la variable MO (onglet MOdele)
Dim MA As Worksheet 'déclare la variable MA (onglet MAtrices)
Dim NO As Worksheet 'déclare la variable NO (Nouvel Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set MO = Worksheets("MODELE") 'définit l'onglet MO
Set MA = Worksheets("MATRICES") 'définit l'onglet MA
TV = MA.Range("B2").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    MO.Copy After:=Sheets(Sheets.Count) 'copy le modèle en dernière position
    Set NO = ActiveSheet 'définit le nouvel onglet NO
    NO.Name = TV(I, 1) & " " & TV(I, 2) 'renomme le nouvel onglet NO
    NO.Range("C1").Value = TV(I, 1) 'récupère le nom
    NO.Range("C2").Value = TV(I, 2) 'récupère le prénom
    NO.Range("F1").Value = TV(I, 4) 'récupère le secteur
    NO.Range("F2").Value = TV(I, 3) 'récupère l'ID
Next I 'prochaine ligne de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
MA.Activate 'active l'onglet MA (à adapter ou a supprimer)
End Sub

[Édition]

Bonjour Xorsankukai, nos post se sont croisés... En effet il reste à gérer les onglets homonymes...

Bonjour,

Merci pour la rapidité avec laquelle vous m'avez répondu!

Je vais essayer ça cet après midi, ça risque de me prendre un peu de temps, je vous tiens au courant de l'évolution dès que possible.

Dans tous les cas merci beaucoup, même en fouinant sur les forums, aucune chance que je sois arrivé à ça!

Bnjour à tous,

Une autre proposition à digérer !...

J'ai modifié un peu le modèle surtout pour les cellules fusionnées inutiles ).

Cdlt.

21aide.xlsm (25.21 Ko)
Public Sub Create_Worksheets()
Dim wb As Workbook
Dim ws As Worksheet, wsData As Worksheet, wsTemplate As Worksheet
Dim lo As ListObject
Dim Cell As Range
Dim SheetName As String

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With

    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("Matrice")
    Set wsTemplate = wb.Worksheets("Modèle")

    For Each ws In wb.Worksheets
        Select Case ws.Name
            Case "Matrice", "Modèle":
            Case Else: ws.Delete
        End Select
    Next ws

    Application.DisplayAlerts = True

    Set lo = wsData.ListObjects(1)

    If Not lo.DataBodyRange Is Nothing Then
        For Each Cell In lo.ListColumns(1).DataBodyRange
            SheetName = Cell.Value & " " & Cell.Offset(, 1).Value
            wsTemplate.Copy after:=wb.Worksheets(Worksheets.Count)
            With ActiveSheet
                .Name = SheetName
                .Cells(1, 2).Value = Cell.Value
                .Cells(2, 2).Value = Cell.Offset(, 1).Value
                .Cells(1, 4).Value = Cell.Offset(, 3).Value
                .Cells(2, 4).Value = Cell.Offset(, 2).Value
            End With
        Next Cell
    End If

    wsData.Activate

End Sub

ThauThème et xorsankukai j'ai essayé sans résultat vos propositions, ne connaissant rien à excel il est fort probable que j'adapte mal vos macro à mon tableau final, je vais continuer à me pencher sur le sujet, encore merci d'avoir pris le temps et la peine de me répondre.

Jean-Eric merci à toi aussi pour ta réponse, je dois malheureusement garder les cellules fusionnée, c'est un petit bout de mon tableau seulement pour essayer d'expliquer plus facilement mon problème. Le vrai tableau ressemble à ça.

Re,

Pour l'alignement horizontal, opte pour "centré sur plusieurs colonnes" et évite le plus possible de fusionner les cellules.

C'est un conseil sage !...

Cdlt.

Merci Jean-Eric, je viens de trouver comment faire, je tacherai d'y penser à l'avenir.

Bien cordialement.

Rechercher des sujets similaires à "nommer remplir feuilles liste"