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.
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 SubReste à 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.
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 SubThauThè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.