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

Comment dupliquer des lignes en fonction de la valeur de la cellule dans une colonne?

Par exemple, j'ai une plage de données qui contient une liste de nombres dans la colonne D, et maintenant, je veux dupliquer les lignes entières un certain nombre de fois en fonction des valeurs numériques de la colonne D pour obtenir le résultat suivant. Comment puis-je copier les lignes plusieurs fois en fonction des valeurs de cellule dans Excel?

doc dupliquer les lignes par cellule 1

Dupliquer les lignes plusieurs fois en fonction des valeurs de cellule avec le code VBA


flèche bleue bulle droite Dupliquer les lignes plusieurs fois en fonction des valeurs de cellule avec le code VBA

Pour copier et dupliquer les lignes entières plusieurs fois en fonction des valeurs de cellule, le code VBA suivant peut vous aider, procédez comme suit:

1. Maintenez le ALT + F11 clés pour ouvrir le Microsoft Visual Basic pour applications fenêtre.

2Cliquez sur insérer > Moduleet collez le code suivant dans le Module Fenêtre.

Code VBA: dupliquez les lignes plusieurs fois en fonction de la valeur de la cellule:

Sub CopyData()
'Updateby Extendoffice
    Dim xRow As Long
    Dim VInSertNum As Variant
    xRow = 1
    Application.ScreenUpdating = False
    Do While (Cells(xRow, "A") <> "")
        VInSertNum = Cells(xRow, "D")
        If ((VInSertNum > 1) And IsNumeric(VInSertNum)) Then
           Range(Cells(xRow, "A"), Cells(xRow, "D")).Copy
           Range(Cells(xRow + 1, "A"), Cells(xRow + VInSertNum - 1, "D")).Select
           Selection.Insert Shift:=xlDown
           xRow = xRow + VInSertNum - 1
        End If
        xRow = xRow + 1
    Loop
    Application.ScreenUpdating = False
End Sub

3. Puis appuyez F5 clé pour exécuter ce code, les lignes entières ont été dupliquées plusieurs fois en fonction de la valeur de la cellule dans la colonne D selon vos besoins.

Notes: Dans le code ci-dessus, la lettre A indique la colonne de début de votre plage de données et la lettre D est la lettre de colonne sur laquelle vous souhaitez dupliquer les lignes. Veuillez les modifier selon vos besoins.


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 (41)
Pas encore de notes. Soyez le premier à évaluer!
Ce commentaire a été minimisé par le modérateur sur le site
Cela a parfaitement fonctionné. Qu'est-ce que j'ajouterais à votre code pour faire disparaître toutes les lignes avec '0'? Nous l'utilisons pour les étiquettes SKU. Merci pour la bonne solution !
Ce commentaire a été minimisé par le modérateur sur le site
Je vous aime. Merci.
Ce commentaire a été minimisé par le modérateur sur le site
Merci! lignes 10 et 11 "D" indique la fin de la ligne et il peut être nécessaire de modifier votre plage de données pour que cela fonctionne.
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,
Quelqu'un sait convertir à chaud ce code VBA en scripts Google Apps (feuilles Google) ?
Ce commentaire a été minimisé par le modérateur sur le site
J'ai utilisé le code ci-dessus qui fonctionne très bien mais j'ai besoin d'une étape de plus après le collage de la ligne. Je n'arrive tout simplement pas à le faire fonctionner correctement. J'en ai besoin pour mettre zéro dans la colonne "N" dans la ligne après qu'elle soit collée, mais gardez la valeur dans "N" dans la ligne copiée d'origine.


Sub CopyData ()
'Mettre à jour par Extendoffice 20160922
Dim xRow As Long
Dim VInSertNum As Variant
xLigne = 1
Application.ScreenUpdating = Faux
Faire tant que (Cellules(xRow, "A") <> "")
VInSertNum = Cells(xRow, "J")
Si ((VInSertNum > 1) Et EstNumérique(VInSertNum)) Alors
Plage(Cellules(xRow, "A"), Cellules(xRow, "AN")).Copier
' Cells(xRow, 14).Value = 0 cela a fait toutes les lignes
Plage(Cellules(xRow + 1, "A"), Cellules(xRow + VInSertNum - 1, "AN")).Sélectionnez
'Cellules(xLigne, 14).Valeur = 0
'cela a fait toutes les lignes
Selection.Insert Shift: = xlDown
' Cells(xRow, 14).Value = 0 cela n'a fait que la première ligne
xRow = xRow + VInSertNum - 1
'Cellules(xLigne - 1, 14).Valeur = 0
Si fin
' Cellules(xLigne - 1, 14).Valeur = 0
xLigne = xLigne + 1
' Cellules(xLigne + 1, 14).Valeur = 0
boucle
'Cells(xRow, 14).Value = 0 cela n'a fait aucune ligne
Application.ScreenUpdating = Faux
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Salut Steve, avez-vous pu le faire. mon exigence est un peu la même :(
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour gars,
Peut-être que l'article ci-dessous peut vous aider, veuillez le vérifier :
https://www.extendoffice.com/documents/excel/3682-excel-copy-and-insert-row-multiple-times.html
Ce commentaire a été minimisé par le modérateur sur le site
Savez-vous quel serait le code pour dupliquer la ligne une seule fois, en fonction du fait que la cellule d contient 'Oui' - j'ai recherché un code similaire mais pour quelque chose qui dupliquera une ligne basée sur une cellule disant oui
Ce commentaire a été minimisé par le modérateur sur le site
J'utilise donc ce code mais je veux qu'il recherche dans l'ensemble du document, pas seulement la ligne 1 ou tout ce qui est indiqué par xRow = 1. J'essaie de mettre dans la plage 1:2000 mais cela ne fonctionne pas. Comment puis-je identifier xRow = n'importe quelle ligne de la feuille qui inclut les informations que j'identifie dans le code ci-dessous ?


Dim xRow As Long
Valeur de cote en tant que variante


xLigne = 1 : 2000

Application.ScreenUpdating = Faux
Faire tant que (Cellules(xRow, "A") <> "")
Valeur = Cellules(xRow, "D")
Valeur2 = Cellules(xLigne, "A")
Si non ((Valeur = "allegheny general") And IsNumeric(Value2 = G0202)) Alors
Plage(Cellules(xRow, "A"), Cellules(xRow, "D")).Copier
Plage(Cellules(xRow + 1, "A"), Cellules(xRow + 1, "D")).Sélectionnez
Selection.Insert Shift: = xlDown
xLigne = xLigne + 1
Si fin
xLigne = xLigne + 1
boucle
Application.ScreenUpdating = Faux
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, cela a très bien fonctionné. Cependant, j'ai un rapport avec 1000 entrées et le code a cessé de se dupliquer autour de l'entrée 480. Y a-t-il quelque chose que je peux ajouter pour qu'il termine l'action sur l'ensemble du rapport ?
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour Léa,
J'ai testé le code en 2000 lignes, et cela fonctionne bien.
Pourriez-vous m'envoyer votre feuille de calcul pour tester le code ?
Mon adresse e-mail est skyyang@extendoffice.com
En attente de votre réponse!
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour! Je l'ai fait fonctionner. C'était une erreur de ma part, le rapport contenait quelques lignes vides masquées qui empêchaient le script de boucler. Cela a fonctionné pour mon rapport avec 8,000 XNUMX lignes ! Merci Q
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour Leah et Skyyang,
J'ai un problème similaire - le script fonctionne bien dans une feuille de calcul d'environ 100 lignes mais il cesse de fonctionner pour quelque chose de plus grand. J'ai vérifié les lignes vides dans la colonne d'où provient le nombre de multiplication et il n'y en a pas. Y a-t-il d'autres raisons pour lesquelles le script pourrait ne pas fonctionner pour des ensembles de données plus volumineux ?
Ce commentaire a été minimisé par le modérateur sur le site
Merci! cela a été une excellente solution pour tous mes problèmes!
Ce commentaire a été minimisé par le modérateur sur le site
Ce script semble être exactement ce dont j'ai besoin, cependant, lorsque je l'exécute, j'obtiens une erreur sur la ligne Selection.Insert Shift:=x1Down

Des suggestions sur la façon dont je résous ce problème ?
Ce commentaire a été minimisé par le modérateur sur le site
Salut, pour moi, ça ne marche pas, je veux supprimer les lettres et les numéros en double, c'est possible ?
Ce commentaire a été minimisé par le modérateur sur le site
Existe-t-il un moyen de mettre à jour le module pour ne dupliquer que les nouvelles données ? Je travaille sur un document en cours et je ne souhaite pas que le code duplique des données précédemment dupliquées.
Ce commentaire a été minimisé par le modérateur sur le site
y a-t-il un moyen d'ajouter à chaque cellule répétée, un caractère consécutif ? Exemple
KTE+0001

KTE+0002
Ce commentaire a été minimisé par le modérateur sur le site
Beau! Merci. Je me demande si quelqu'un pourrait donner un indice sur la façon dont j'incorporerais une nouvelle colonne d'informations dans le tableau (colonne E) qui est un nombre de valeurs incrémentielles pour chaque ligne copiée, 1, 2, 3, 4 etc... et puis lorsqu'il arrive à l'élément suivant à dupliquer X fois, il recommencera à numéroter à partir de 1 et augmentera de 1 à chaque fois.
Ce commentaire a été minimisé par le modérateur sur le site
Salut, j'ai essayé cela, mais existe-t-il un moyen de déterminer s'il existe plusieurs critères avec les données que je duplique
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,

Je crée une feuille de calcul en utilisant la formule fournie mais j'ai des erreurs. s'il vous plaît quelqu'un peut-il me dire quelle devrait être ma formule?

mon tableau est de AY avec les quantités en K.
Ce commentaire a été minimisé par le modérateur sur le site
bonjour, j'ai essayé d'ajuster ce code mais j'ai des difficultés.
j'ai des articles d'inventaire. chaque élément est composé de deux lignes et souhaite qu'ils soient dupliqués N nombre de fois
en haut de la feuille de calcul, j'ai une cellule, appelons-la A1, j'ai combien de fois en double ? N
quelle que soit la valeur N, je veux dupliquer l'article d'inventaire initial que j'ai (A16, A17) autant de fois.
donc l'élément copié doit commencer en A18 (et c'est deux lignes, l'élément suivant a20 etc.
Merci
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, le code fonctionne très bien. Je voulais aussi ajouter +1 à la date (en semaine uniquement) chaque fois que la ligne est dupliquée.
Ce commentaire a été minimisé par le modérateur sur le site
Merci beaucoup! Cela m'a fait gagner tellement de temps que je perdais l'habitude de copier et coller toutes mes lignes de données.
Deux pouces vers le haut!!
Ce commentaire a été minimisé par le modérateur sur le site
Super morceau de code !!! Merci!!!
Il n'y a pas encore de commentaires postés ici
TÉLÉCHARGER PLUS
Laisser vos commentaires
Publier en tant qu'invité
×
Évaluez cet article:
0   Personnages
Emplacements suggérés

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