Note: The other languages of the website are Google-translated. Back to English

Comment créer de nouvelles feuilles pour chaque ligne dans Excel?

Supposons que vous ayez un tableau de scores avec le nom de tous les étudiants dans la colonne A. Vous souhaitez maintenant créer de nouvelles feuilles basées sur ces noms dans la colonne A, et faire par feuille contient les données d'un étudiant unique. Ou créez simplement une nouvelle feuille pour chaque ligne du tableau sans tenir compte des noms dans la colonne A. Dans cette vidéo, vous obtiendrez des méthodes pour y parvenir.

Créer de nouvelles feuilles pour chaque ligne avec le code VBA
Créez de nouvelles feuilles pour chaque ligne avec l'utilitaire Fractionner les données de Kutools for Excel


Créer de nouvelles feuilles pour chaque ligne avec le code VBA

Avec les codes suivants, vous pouvez créer une nouvelle feuille en fonction des valeurs de colonne ou simplement créer de nouvelles feuilles pour chaque ligne dans Excel.

1. presse autre + F11 touches simultanément pour ouvrir le Microsoft Visual Basic pour applications fenêtre.

2. dans le Microsoft Visual Basic pour applications fenêtre, cliquez sur insérer > Module. Et puis collez le code suivant dans le Module fenêtre.

Code VBA: créez une nouvelle feuille pour chaque ligne en fonction de la colonne

Sub parse_data()
'Update by Extendoffice 2018/3/2
    Dim xRCount As Long
    Dim xSht As Worksheet
    Dim xNSht As Worksheet
    Dim I As Long
    Dim xTRrow As Integer
    Dim xCol As New Collection
    Dim xTitle As String
    Dim xSUpdate As Boolean
    Set xSht = ActiveSheet
    On Error Resume Next
    xRCount = xSht.Cells(xSht.Rows.Count, 1).End(xlUp).Row
    xTitle = "A1:C1"
    xTRrow = xSht.Range(xTitle).Cells(1).Row
    For I = 2 To xRCount
        Call xCol.Add(xSht.Cells(I, 1).Text, xSht.Cells(I, 1).Text)
    Next
    xSUpdate = Application.ScreenUpdating
    Application.ScreenUpdating = False
    For I = 1 To xCol.Count
        Call xSht.Range(xTitle).AutoFilter(1, CStr(xCol.Item(I)))
        Set xNSht = Nothing
        Set xNSht = Worksheets(CStr(xCol.Item(I)))
        If xNSht Is Nothing Then
            Set xNSht = Worksheets.Add(, Sheets(Sheets.Count))
            xNSht.Name = CStr(xCol.Item(I))
        Else
            xNSht.Move , Sheets(Sheets.Count)
        End If
        xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
        xNSht.Columns.AutoFit
    Next
    xSht.AutoFilterMode = False
    xSht.Activate
    Application.ScreenUpdating = xSUpdate
End Sub

Notes: A1: C1 est la plage de titres de votre tableau. Vous pouvez le modifier en fonction de vos besoins.

3. presse F5 clé pour exécuter le code, puis de nouvelles feuilles de calcul sont créées après toutes les feuilles de calcul du classeur actuel comme ci-dessous capture d'écran:

Si vous souhaitez créer directement de nouvelles feuilles pour chaque ligne sans tenir compte de la valeur de la colonne, vous pouvez utiliser le code suivant.

Code VBA: créer directement une nouvelle feuille pour chaque ligne

Sub RowToSheet()
	Dim xRow As Long
	Dim I As Long
	With ActiveSheet
		xRow = .Range("A" & Rows.Count).End(xlUp).Row
		For I = 1 To xRow
			Worksheets.Add(, Sheets(Sheets.Count)).Name = "Row " & I
			.Rows(I).Copy Sheets("Row " & I).Range("A1")
		Next I
	End With
End Sub

Après avoir exécuté le code, chaque ligne de la feuille de calcul active sera placée dans une nouvelle feuille de calcul.

Notes: La ligne d'en-tête sera également placée dans une nouvelle feuille avec ce code VBA.


Créez de nouvelles feuilles pour chaque ligne avec l'utilitaire Fractionner les données de Kutools for Excel

En fait, la méthode ci-dessus est compliquée et difficile à comprendre. Dans cette section, nous vous présentons le Diviser les données utilité de Kutools for Excel.

Avant d'appliquer Kutools for Excel, S'il vous plaît téléchargez et installez-le d'abord.

1. Sélectionnez la table à utiliser pour créer de nouvelles feuilles, puis cliquez sur Kutools Plus> Cracher des données. Voir la capture d'écran:

2. dans le Diviser les données en plusieurs feuilles de calcul boîte de dialogue, procédez comme suit.

A. Pour créer de nouvelles feuilles en fonction de la valeur de la colonne:

1). Veuillez sélectionner le Colonne spécifique et spécifiez une colonne sur laquelle vous souhaitez fractionner les données dans la liste déroulante;
2). Si vous souhaitez nommer les feuilles de calcul avec des valeurs de colonne, veuillez sélectionner Valeurs de la colonne dans le Règles la liste déroulante;
3). Clique le OK bouton. Voir la capture d'écran:

B. Pour créer directement de nouvelles feuilles pour chaque ligne:

1). Sélectionner Lignes fixes option, entrez le numéro 1 dans la boîte;
2). Sélectionner Numéros de ligne du Règles la liste déroulante;
3). Clique le OK bouton. Voir la capture d'écran:

un nouveau classeur est créé avec toutes les nouvelles feuilles à l'intérieur. Voir les captures d'écran ci-dessous.

Création de nouvelles feuilles pour chaque ligne en fonction de la valeur de la colonne:

Créer une nouvelle feuille pour chaque ligne sans tenir compte de la valeur de la colonne:

  Si vous souhaitez bénéficier d'un essai gratuit (30-jour) de cet utilitaire, veuillez cliquer pour le télécharger, puis passez à appliquer l'opération selon les étapes ci-dessus.

Créez de nouvelles feuilles pour chaque ligne avec l'utilitaire Fractionner les données de Kutools for Excel


Les meilleurs outils de productivité de bureau

Kutools for Excel Résout la plupart de vos problèmes et augmente votre productivité de 80 %

  • Réutilisation: Insérer rapidement formules complexes, graphiques et tout ce que vous avez utilisé auparavant; Crypter les cellules avec mot de passe; Créer une liste de diffusion et envoyer des e-mails ...
  • Barre Super Formula (modifiez facilement plusieurs lignes de texte et de formule); Disposition de lecture (lire et modifier facilement un grand nombre de cellules); Coller dans la plage filtréeplus
  • Fusionner les cellules / lignes / colonnes sans perdre de données; Contenu des cellules divisées; Combiner des lignes / colonnes en double... Empêcher les cellules en double; Comparer les gammesplus
  • Sélectionnez Dupliquer ou Unique Lignes; Sélectionnez les lignes vides (toutes les cellules sont vides); Super Find et Fuzzy Find dans de nombreux classeurs; Sélection aléatoire ...
  • Copie exacte Plusieurs cellules sans changer la référence de formule; Créer automatiquement des références à plusieurs feuilles; Insérer des puces, Cases à cocher et plus encore ...
  • Extrait du texte, Ajouter du texte, Supprimer par position, Supprimer l'espace; Créer et imprimer des sous-totaux de pagination; Conversion entre le contenu et les commentaires des cellulesplus
  • Super filtre (enregistrer et appliquer des schémas de filtrage à d'autres feuilles); Tri avancé par mois / semaine / jour, fréquence et plus; Filtre spécial par gras, italique ...
  • Combiner des classeurs et des feuilles de travail; Fusionner les tableaux en fonction des colonnes clés; Diviser les données en plusieurs feuilles; Conversion par lots xls, xlsx et PDFplus
  • Plus de 300 fonctionnalités puissantes. Prend en charge Office / Excel 2007-2021 et 365. Prend en charge toutes les langues. Déploiement facile dans votre entreprise ou organisation. Fonctionnalités complètes Essai gratuit de 30 jours. Garantie de remboursement de 60 jours.
onglet kte 201905

Office Tab apporte une interface à onglets à Office et simplifie considérablement votre travail

  • Activer l'édition et la lecture par onglets dans Word, Excel, PowerPoint, Publisher, Access, Visio et Project.
  • Ouvrez et créez plusieurs documents dans de nouveaux onglets de la même fenêtre, plutôt que dans de nouvelles fenêtres.
  • Augmente votre productivité de 50% et réduit des centaines de clics de souris chaque jour!
bas de cabine
Commentaires (33)
Pas encore de notes. Soyez le premier à évaluer!
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, je souhaite créer des feuilles de calcul basées sur mon fichier de modèle Myformat et les nommer selon les données de la première colonne. J'ai personnalisé le code VBA comme suit, mais il génère trop de feuilles vierges. Pourriez-vous s'il vous plaît m'aider à arrêter de générer des feuilles vierges. Merci. Kumar Sub AddSheets() Dim cell As Excel.Range Dim wsWithSheetNames As Excel.Worksheet Dim wbToAddSheetsTo As Excel.Workbook Set wsWithSheetNames = ActiveSheet Set wbToAddSheetsTo = ActiveWorkbook For Each cell In wsWithSheetNames.Range("A2:A165") With wbToAddSheetsTo .Sheets. Add After :=ActiveSheet Sheets.Add Type := _ "C:\Users\Dimple\AppData\Roaming\Microsoft\Templates\MyFormat.xltx" On Error Resume Next ActiveSheet.Name = cell.Value If Err.Number = 1004 Then Debug.Print cell.Value & " déjà utilisé comme nom de feuille" End If On Error GoTo 0 End With Next cell End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,
Je reçois toujours 2 feuilles par entrée unique sur une rangée. Une idée pourquoi? Aussi, à quel point serait-il difficile d'ajouter le nombre total de lignes créées par la feuille générée au nom de la feuille. Merci beaucoup! Faites-moi savoir si vous acceptez les dons.
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, je souhaite utiliser mon modèle de fichier exel MyFormat pour générer des feuilles de calcul et nommer les feuilles de calcul par les données de la première colonne. Le code VBA suivant fonctionne correctement pour générer les feuilles de calcul selon MyFormat. Mais il génère également des centaines de feuilles vierges sur des modèles Excel normaux. Quelqu'un pourrait-il m'aider s'il vous plaît à arrêter de générer des feuilles vierges en excès. Merci Kumar Sub AddSheets() Dim cell As Excel.Range Dim wsWithSheetNames As Excel.Worksheet Dim wbToAddSheetsTo As Excel.Workbook Set wsWithSheetNames = ActiveSheet Set wbToAddSheetsTo = ActiveWorkbook For Each cell In wsWithSheetNames.Range("A2:A165") With wbToAddSheetsTo .Sheets .Add After :=ActiveSheet Sheets.Add Type := _ "C:\Users\Dreamline\AppData\Roaming\Microsoft\Templates\MyFormat.xltx" On Error Resume Next ActiveSheet.Name = cell.Value If Err.Number = 1004 Puis Debug.Print cell.Value & " déjà utilisé comme nom de feuille" End If On Error GoTo 0 End With Next cell End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Les noms de feuille de calcul doivent comporter moins de trente caractères ou moins.
Ce n'est pas très connu, mais sinon le code produira une feuille de calcul vierge "Sheet #" par défaut.

Créez une nouvelle feuille de calcul que votre code d'analyse syntaxique parcourra et référencez la première colonne comme suit :
=IF(OR('Referenced Original'!B1<>"", LEN('Referenced Original'!B1)>30), LEFT('Referenced Original'!B1,30),'Referenced Original'!B1)


Copiez ou référencez le reste de la feuille comme vous le pouvez. Assurez-vous que la colonne est exempte de restrictions de validation des données si vous rencontrez des problèmes pour référencer l'autre feuille de calcul.
Ce commentaire a été minimisé par le modérateur sur le site
Merci beaucoup d'avoir posté cela!!!! A fonctionné comme un charme. Pouvez-vous expliquer comment fonctionne le premier ensemble de code ?
Ce commentaire a été minimisé par le modérateur sur le site
Merci pour ça!



Dans le code VBA, y a-t-il un moyen de nommer les feuilles résultantes des données de la première et de la deuxième colonne combinées ?



donc pour votre exemple, la feuille 2 serait automatiquement nommée "linda 100"
Ce commentaire a été minimisé par le modérateur sur le site
Chère Joyce,
Merci pour votre commentaire ! J'espère que le script VBA ci-dessous pourra vous aider.

Sous parse_data()
Dim xRCount As Long
Dim xSht en tant que feuille de travail
Dim xNSht en tant que feuille de travail
Dim I As Long
Dim xTRrow As Integer
Dim xCol Comme nouvelle collection
Dim xTitle As String
On Error Resume Next
Application.ScreenUpdating = Faux
Définir xSht = ActiveSheet
xRCount = xSht.UsedRange.End(xlDown).Row
xTitre = "A1:B1"
xTRrow = xSht.Range(xTitle).Row
Pour I = 2 To xRCount
Appelez xCol.Add(CStr(xSht.Cells(I, 1)), CStr(xSht.Cells(I, 1)))
Suivant
Debug.Print xCol.Count
Pour I = 1 To xCol.Count
Appelez xSht.Range(xTitle).AutoFilter(1, CStr(xCol.Item(I)))
Définir xNSht = Rien
Set xNSht = Worksheets(CStr(xCol.Item(I)))
Si xNSht n'est rien alors
Set xNSht = Worksheets.Add(, Sheets(Sheets.Count))
xNSht.Name = CStr(xCol.Item(I) & xSht.Cells(I + 1, 2))
autre
xNSht.Move , Sheets(Sheets.Count)
Si fin
xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
xNSht.Columns.AutoFit
Suivant
xSht.AutoFilterMode=Faux
xSht.Activer
Application.ScreenUpdating = True
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
C'était extrêmement utile, exactement ce que je cherchais. Merci!
Ce commentaire a été minimisé par le modérateur sur le site
Ce code est très utile, et presque ce que je cherchais.
Mais peut-il être ajusté de telle sorte qu'il y ait deux feuilles -
La feuille 1 est les données - une table de données avec la colonne A étant le nom
La feuille 2 est un modèle, avec de nombreux champs à remplir
Ce que j'espérais, c'est exécuter une macro, qui
1 Copiez-collez le modèle, dans le même fichier, nommez la feuille comme le nom dans la cellule A1
2 Copiez la cellule B1 puis collez-la dans un champ sélectionné dans le nouveau modèle
3 répéter le long de la rangée 1 jusqu'à ce qu'il soit vide
4 puis répétez pour le rang 2 et chaque rang jusqu'à la fin.
Le résultat est un fichier avec x no. feuilles identiques au modèle, avec tous les champs renseignés.
J'ai hérité d'un fichier qui fonctionne dans l'autre sens, extrayant des données de modèles vers une table, mais ne peut pas l'inverser .....
Ce commentaire a été minimisé par le modérateur sur le site
Cher Sam,
Ce serait bien si vous pouviez joindre votre classeur ici.
Vous pouvez télécharger votre fichier avec le bouton Télécharger des fichiers ci-dessous.
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour j'ai essayé d'utiliser votre code mais j'obtiens une erreur
Erreur d'exécution '1004' :
Erreur définie par l'application ou par l'objet
Je n'ai aucune connaissance de VBA (ou de toute technologie d'ailleurs), mais si un débogage de presse met en évidence la ligne 11 xRCount=xSht.Cells(xSht.Rows.Count,1). Fin(xIHaut).Ligne
Je travaille avec un gros fichier qui a 127 colonnes et 337 lignes (les lignes varient, les colonnes ne le feront pas) et c'est une liste avec des numéros et leurs détails.
J'ai changé la plage comme vous l'avez noté mais cela ne fonctionne toujours pas J'utilise Excel 2010 pourriez-vous s'il vous plaît me dire comment le faire fonctionner si possible
Merci
Ce commentaire a été minimisé par le modérateur sur le site
Chère Béatrice,
Le code est mis à jour avec la résolution de problème. Veuillez réessayer. Merci pour votre commentaire.
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, je pense qu'il y a quelque chose d'utile ici pour ma situation, mais je suis capable de faire du VBA ou du script, j'espère que vous pourrez m'aider.
J'ai un modèle avec de nombreuses cellules à remplir avec des données, et il y aura une clé de recherche (non unique) que je voudrais entrer dans le modèle. Sur la base de la clé de recherche, les données sont recherchées et les données correspondantes sur la clé correspondante sont extraites et remplies dans le modèle. Le modèle rempli est enregistré dans une nouvelle feuille de calcul. Il peut y avoir plus d'une entrée de match. J'ai besoin que le script continue à rechercher dans la liste, jusqu'à ce que toutes les correspondances soient sélectionnées et qu'un certain nombre de nouvelles feuilles de calcul soient créées.
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, existe-t-il un moyen de conserver la ligne d'en-tête sur chaque nouvelle feuille de calcul ? (entouré en rouge sur ma pièce jointe)

Le code prend toutes les lignes de ma feuille de calcul principale et les transfère dans de nouvelles feuilles de calcul, ce qui est génial. Mais je souhaite conserver ma valeur d'en-tête "maître" (entourée de rouge) en haut de chaque nouvelle feuille de calcul. Merci!



Je fais référence à ce code ci-dessus:

Sous-LigneVersFeuille()
Dim xRow As Long
Dim I As Long
Avec ActiveSheet
xRow = .Range("A" & Rows.Count).End(xlUp).Row
Pour je = 1 à xRow
Worksheets.Add(, Sheets(Sheets.Count)).Name = "Row " & I
.Rows(I).Copy Sheets("Row " & I).Range("A1")
Ensuite je
Terminer par
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Excellent code, mais pourrais-je obtenir de l'aide si mes données se trouvent dans la colonne G au lieu de la colonne A ? que dois-je changer pour avoir les données de la colonne G dans un onglet différent ?

Merci
Ce commentaire a été minimisé par le modérateur sur le site
C'est un excellent code. Un grand merci aux brain-boxes d'OfficeExtend !! Existe-t-il de toute façon ce code pourrait être légèrement adapté pour créer des feuilles séparées pour chaque * colonne * au lieu de ligne? J'ai joint une photo de ce que j'essaie de réaliser. Est-ce possible? Bien à vous.
Ce commentaire a été minimisé par le modérateur sur le site
Good Day,
Je n'ai pas vu ta photo ici.
Ce commentaire a été minimisé par le modérateur sur le site
Salut, comment modifier le code, si mon champ de nom est dans la colonne C
Ce commentaire a été minimisé par le modérateur sur le site
Salut Abdul Basit,
Le code VBA ci-dessous peut vous aider. Veuillez essayer.
Dans la ligne : xCName="3", 3 indique le numéro de colonne (ici la colonne C) dans Excel. Vous pouvez le remplacer par n'importe quel numéro de colonne selon vos besoins.

Sous parse_data()
'Mettre à jour par Extendoffice 2018/3/2
Dim xRCount As Long
Dim xSht en tant que feuille de travail
Dim xNSht en tant que feuille de travail
Dim I As Long
Dim xTRrow As Integer
Dim xCol Comme nouvelle collection
Dim xTitle As String
Dim xSUpdate As Boolean
Dim xCName en tant qu'entier
Dim xTA, xRA, xSRg1 en tant que chaîne
Définir xSht = ActiveSheet
On Error Resume Next
xRCount = xSht.Cells(xSht.Rows.Count, 1).End(xlUp).Row
xTitre = "A1:C1"
xCName = "3" 'Remplacez ce numéro par le numéro de colonne sur lequel vous allez créer de nouvelles feuilles basées sur
xTRrow = xSht.Range(xTitle).Cells(1).Row
Pour I = 2 To xRCount
Appelez xCol.Add(xSht.Cells(I, xCName).Text, xSht.Cells(I, xCName).Text)
Suivant
xSUpdate = Application.ScreenUpdating
Application.ScreenUpdating = Faux
xSRg = xSht.Cells(1, xCName).Address(RowAbsolute :=False, ColumnAbsolute :=False)
Pour I = 1 To xCol.Count
Appelez xSht.Range(xTitle).AutoFilter(xCName, CStr(xCol.Item(I)))
Définir xNSht = Rien
Set xNSht = Worksheets(CStr(xCol.Item(I)))
Si xNSht n'est rien alors
Set xNSht = Worksheets.Add(, Sheets(Sheets.Count))
xNSht.Name = CStr(xCol.Item(I))
autre
xNSht.Move , Sheets(Sheets.Count)
Si fin
xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
xNSht.Columns.AutoFit
Suivant
xSht.AutoFilterMode=Faux
xSht.Activer
Application.ScreenUpdating = xSUpdate
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Cool code VBA pour faire l'affaire.

Comment puis-je le modifier pour ne pas copier la première colonne? Et pour supprimer le nom de la colonne ?

Cordialement
Ce commentaire a été minimisé par le modérateur sur le site
S'il vous plaît, puis-je obtenir de l'aide sur la façon de nommer automatiquement les feuilles en utilisant une colonne particulière. C'est pour la ligne à la feuille VBA. Voir ci-dessous

Sous-LigneVersFeuille()

Dim xRow As Long

Dim I As Long

Avec ActiveSheet

xRow = .Range("A" & Rows.Count).End(xlUp).Row

Pour je = 1 à xRow

Worksheets.Add(, Sheets(Sheets.Count)).Name = "Row " & I

.Rows(I).Copy Sheets("Row " & I).Range("A1")

Ensuite je

Terminer par

End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Peu importe, il s'agissait d'espaces de fuite cachés. J'ai utilisé la fonction TRIM et l'ai nettoyé. Avoir un nombre de lignes (le nombre de lignes vraiment donc les lignes -1 ajoutées à la feuille seraient incroyables)
Ce commentaire a été minimisé par le modérateur sur le site
Comment référencer l'utilisation du code ci-dessus (crédit) ? Est-il possible de modifier le code ?
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, il s'agit d'une plateforme de communication ouverte. Le code est autorisé à référencer et à modifier.
Ce commentaire a été minimisé par le modérateur sur le site
Mamie
86
2
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour! Je viens d'utiliser ce code et cela a fonctionné! En plus de créer une nouvelle feuille pour chaque entrée, je veux la transposer en colonnes et je n'arrive pas à comprendre. Donc, pour l'exemple ci-dessus, la sortie pour Nana ressemblerait à ceci - Nom NanaScore 86Non. 2
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, j'ai utilisé ce code et travaillé, mais si je veux sélectionner plus d'une ligne dans l'en-tête, qu'est-ce qui changera dans le code ? J'ai plusieurs lignes dans la feuille que je veux dans chaque feuille.
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, avez-vous trouvé comment ?
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, existe-t-il un code qui n'ajouterait qu'une nouvelle feuille à chaque exécution de la macro, par exemple, la première fois que la nouvelle feuille serait nommée sur le contenu de la cellule A1, la deuxième fois que la macro était exécutée, la nouvelle feuille serait nommée sur le contenu de A1 etc. merci d'avance
Il n'y a pas encore de commentaires postés ici
Voir plus

Nous suivre

Copyright © 2009 - www.extendoffice.com. | Tous les droits sont réservés. Alimenté par ExtendOffice. | | Plan du site
Microsoft et le logo Office sont des marques commerciales ou des marques déposées de Microsoft Corporation aux États-Unis et / ou dans d'autres pays.
Protégé par Sectigo SSL