Remplir un tableau selon le nom des onglet
Bonjour à tous
Je récupère tous les jours des données sous Excel (nom, prénom, cadence, ect) sous forme de tableau . Je souhaiterai un deuxième classeur avec un onglet par nom Où se copirais automatiquement la ligne correspondante au nom de l'onglet.
Autrement dit, je voudrais que lorsque je lance la macro, Excel reconnaisse les noms et prénoms du premier tableau, copie la ligne correspondante et la colle dans l'onglet du deuxième tableau qui porte le même nom. En sachant qu' il n'y aura pas les forcément les même personnes tous les jours.
Voilà j'espère avoir été suffisamment clair et espère que quelqu'un pourras m'aider merci
Bonsoir,
ce serait plus simple si tu nous donnais un fichier exemple de ce que tu veux.
voici une macro, qu'il te faudra peut-être adapter. sans doute remplacer le nom de la feuille "base" par le nom de la feuille qui contient tes données à répartir.
j'ai fait l'hypothèse que le nom est en colonne A et le prénom en colonne B.
Sub copie()
' feuille de base d'où on prend la copie, reférencée sous wss
Set wss = Worksheets("base")
' dls dernière ligne de wss
dls = wss.Range("a" & Rows.Count).End(xlUp).Row
' dcs dernière colonne de wss
dcs = wss.Range(wss.Cells(1, Columns.Count).Address).End(xlToLeft).Column
' on prend toutes les lignes de wss en passant la ligne des entêtes
For i = 2 To dls
' si on n'a pas déjà copié la ligne
If wss.Cells(i, 1).Interior.ColorIndex <> 6 Then
' on arme un traitement d'erreur si la feuille pour une personne n'existe pas
On Error GoTo terreur
ongletàcréer = False
' wst est la référence de la feuille correspondant à nom + " " + prénom
Set wst = Worksheets(wss.Range("A" & i) & " " & wss.Range("B" & i))
' on remet le traitement d'erreur par défaut
On Error GoTo 0
If ongletàcréer Then
' ajout d'un feuille
Worksheets.Add after:=Worksheets(Worksheets.Count)
Set wst = Worksheets(Worksheets.Count)
' on renomme la feuille d'après le nom et prénom
wst.Name = wss.Range("A" & i) & " " & wss.Range("B" & i)
' on copie les entêtes de colonnes sur la nouvelle feuille créée
wss.Range("A1:" & Cells(1, dcs).Address).Copy wst.Range("A1")
End If
'dlt = première ligne vide dans wst
dlt = wst.Range("a" & Rows.Count).End(xlUp).Row + 1
'on copie la ligne
wss.Range(Cells(i, 1).Address & ":" & Cells(i, dcs).Address).Copy wst.Range("A" & dlt)
' on met la ligne en jaune dans wss pour indiquer que la ligne a été copiée
wss.Range(Cells(i, 1).Address & ":" & Cells(i, dcs).Address).Interior.ColorIndex = 6
End If
Next i
Set wss = Nothing
Set wst = Nothing
Exit Sub
terreur:
ongletàcréer = True
Resume Next
End Sub
Je te remercie je posterai le fichier demain mais je vais tester ça avant