dupliquer lignes selon une valeur

aracno

XLDnaute Nouveau
Bonjour,

bonne année 2009!

J'ai besoin d'une formule/macro qui me permet de dupliquer des lignes dans un fichier Excel selon une valeur donnée.

Ci-joint un exemple qui décrit ce que je voudrai obtenir. Je ne sais pas si cela est facile ou pas (je ne maîtrise pas suffisamment Excel..).

Merci beaucoup de votre aide !
 

Pièces jointes

  • Dupliquer ligne sous condition.xls
    15 KB · Affichages: 719
  • Dupliquer ligne sous condition.xls
    15 KB · Affichages: 676
  • Dupliquer ligne sous condition.xls
    15 KB · Affichages: 681

Excel-lent

XLDnaute Barbatruc
Re : dupliquer lignes selon une valeur

Bonjour et bienvenu sur le forum Aracno,
Bonjour Hasco,

Bonne année 2009 à toi aussi.

Voici ci-joint une solution.

Mais de savoir si la solution est facile ou non???

En tout cas, en apparence, elle est identique à celle Hasco. Il suffit là aussi de cliquer sur le bouton adéquat. Le résultat obtenue est également identique, mais le code est différent!

Bonne après midi
 

Pièces jointes

  • Duplication.xls
    46.5 KB · Affichages: 1 261
  • Duplication.xls
    46.5 KB · Affichages: 1 201
  • Duplication.xls
    46.5 KB · Affichages: 1 277

aracno

XLDnaute Nouveau
Re : dupliquer lignes selon une valeur

Wow !

Merci pour la rapidité de la réponse ! C'est génial !

C'est parfait !

Maintenant j'ai deux autres questions :

1/ Imaginons que j'ai plus de colonnes à prendre en compte (numéro de téléphone,..) qui doivent être dupliqué aussi. Comment changer le code dans ce cas là ?

2/ Est-ce qu'il est possible de rajouter un _1, _2, ecc.. à chaque Nom dupliqué ?

J'ai regardé le code, mais je n'arrive pas à trouver la solution par moi même..

Sub DupliquerLignes()
Dim plage As Range, c As Range
Dim i As Integer, cpt As Integer
With Sheets("Lignes")
Set plage = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
If plage.Rows.Count > 1 Then
Set plage = plage.Offset(1).Resize(plage.Rows.Count - 1)
For Each c In plage.Cells
i = 1: cpt = c.Value
Do
With Sheets("Dupliquees")
.Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(, 5).Value = c.Resize(, 5).Value
End With
i = i + 1
Loop While i <= cpt
Next c
End If
Sheets("Dupliquees").Activate
End Sub


Merci !!
 

Excel-lent

XLDnaute Barbatruc
Re : dupliquer lignes selon une valeur

Bonjour Aracno,

Je laisse Hasco te répondre pour son code.

Concernant le code que je t'ai envoyé :

Code:
Sub Duplication()
' Macro enregistrée par Excel-lent
    
Dim LigneDuplic As Long
Dim NbCopie As Long

LigneDuplic = 2

For i = 5 To Range("A65536").End(xlUp).Row
    Sheets("lignes").Select
    NbCopie = Cells(i, 1)
    Range(Cells(i, 1), Cells(i, [COLOR="Red"][B]5[/B][/COLOR])).Select
    Selection.Copy
    Sheets("Duplication").Select
    Range(Cells(LigneDuplic, 1), Cells(LigneDuplic + NbCopie - 1, 1)).Select
    ActiveSheet.Paste
    
    LigneDuplic = LigneDuplic + NbCopie

Next i
End Sub

Il te suffit de remplacer le 5 par le chiffre de ton choix (le numéro de la dernière colonne de ton tableau. Soit ici 5 car ta dernière colonne était la 5ème : F

Voici ci-dessous le code expliqué
Code:
[COLOR="Blue"]Sub Duplication()[/COLOR][I]' Explication de ce que contiennent les variables   [/I]
[COLOR="blue"]Dim LigneDuplic As Long
Dim NbCopie As Long[/COLOR]
[I]' Variable LigneDuplic = 2[/I]
[COLOR="blue"]LigneDuplic = 2[/COLOR]

[I]' répéter le code entre [B]For [/B]et [B]Next[/B] autant de fois qu'il y a de ligne dans
' le tableau initial.
' i en plus de servir de compteur, indique également le numéro de la ligne
' où l'on se trouve[/I]

[COLOR="blue"]For i = 5 To Range("A65536").End(xlUp).Row[/COLOR]
[I]' Sélectionner la feuille "ligne"[/I]
[COLOR="blue"]    Sheets("lignes").Select[/COLOR]
[I]' NbCopie = cellule A5 (puis A6 puis ...)
' Indique le nombre de fois qu'il faudra recopier la ligne sélectionné plus bas[/I]
[COLOR="blue"]    NbCopie = Cells(i, 1)[/COLOR]
[I]' Sélection la plage [A5:F5] puis [A6:F6] puis ... grâce à l'utilisation de i qui indique
' le numéro de la ligne[/I]
[COLOR="blue"]    Range(Cells(i, 1), Cells(i, [COLOR="Red"][B]5[/B][/COLOR])).Select[/COLOR]
[I]' copier la plage sélectionné[/I]
[COLOR="blue"]    Selection.Copy[/COLOR]
[I]' sélectionner la feuille "duplication"[/I]
[COLOR="blue"]    Sheets("Duplication").Select[/COLOR]
[I]' sélectionner la plage de ... à ....[/I]
[COLOR="blue"]    Range(Cells(LigneDuplic, 1), Cells(LigneDuplic + NbCopie - 1, 1)).Select[/COLOR]
[I]' coller la plage sélectionné précédement, dans les lignes indiqué juste ci-dessus[/I]
[COLOR="Blue"]    ActiveSheet.Paste[/COLOR]
[I] ' LigneDuplic = compteur indiquant qu'elle est la dernière ligne où on a collé qqchse  [/I]
[COLOR="blue"]    LigneDuplic = LigneDuplic + NbCopie[/COLOR]
[COLOR="blue"]
Next i
End Sub[/COLOR]

C'est suffisament détaillé?

Bonne aprés-midi
 
Dernière édition:
G

Guest

Guest
Re : dupliquer lignes selon une valeur

Re,

Remplacer
Code:
With Sheets("Dupliquees")
.Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(, 5).Value = c.Resize(, 5).Value
End With

par
Code:
With Sheets("Dupliquees")
    With .Range("A" & Rows.Count).End(xlUp).Offset(1)
          .Resize(, 6).Value = c.Resize(, 6).Value
          .Cells(1,1)=Cells(1,1).Text & "_" & i
   End with
End With

Pour la deuxième question, je pense, même si je n'ai pas le temps de tester que cela le fera (la ligne:.Cells(1,1)=cells(1,1).Text & "_" & i)

Pour rajouter des colonnes, remplace le 6 par le nombre de colonne voulue, la première comprise (A).

Je reviens dans 1 heure ou 1h et demi.

A+
 

aracno

XLDnaute Nouveau
Re : dupliquer lignes selon une valeur

Hasco, Excel-lent,

merci encore, vous êtes ultra rapids ! Eh bien, ça marche et c'est génial ! Je ne sait pas comment vous remercier !

Juste une petite chose : je pense que la ligne

.Cells(1,1)=Cells(1,1).Text & "_" & i

prend en compte la première cellule A1 et la duplique de cette manière :

[cellule A1]_1
[cellule A1]_2
[cellule A1]_3
[cellule A1]_1
[cellule A1]_2
....

et ça devrait être plutôt :

Henry_1
Henry_2
Henry_3
Jean_1
Jean_2
...

mais cela n'est pas trop un problème car je peux faire un formule qui prenne en compte les derniers 2 caractères (droit), que je vais ensuite joindre au noms avec la formule &.

En tout cas encore un grand merci !

A bientôt,

aracno
 
G

Guest

Guest
Re : dupliquer lignes selon une valeur

Re, aracno, Excel-lent,

J'ai oublié un point avant le deuxième cells(1,1) qui fait toute la différence:

Code:
.Cells(1,1)=[COLOR=red].Cells(1,1)[/COLOR].Text & "_" & i

voici qui est corrigé.

A+
 

d_lelievre

XLDnaute Nouveau
Re : dupliquer lignes selon une valeur

Bonjour,

J'ai une problematique similaire. Pour pouvoir éditer des etiquettes d'éxpédition via un publipostage, j'ai besoin de deux choses :
- Dupliquer les lignes de commande en fonction du nombre de colis (calculé dans l'exemple en divisant la valeur commandé par le nombre d'unité dans chaque colis, 6)
- Indiquer le numéro de chaque colis pour l'envoi (afin de pouvoir indiquer sur l'étiquette colis 1/7 ou 3/7, etc...)

QQn pourrait arriver à m'aider. Je suis pas a l'aise du tout avec la programation Visual Basic et je n'arrive pas à modifier les Macro de Excel-lent et de Hasco... Je joins un fichier avec sur le 2è onglet, la liste à laquelle je voudrais arriver.

Merci d'avance
 

Pièces jointes

  • Commandes de Février.xls
    17.5 KB · Affichages: 255

d_lelievre

XLDnaute Nouveau
Re : dupliquer lignes selon une valeur

En fait après avoir fait qqes essais, j'arrive a dupliquer les lignes dont la valeur n'est pas 0 ainsi qu'à indiquer le numero du colis, un petit test sur les numeros de commande et s'était joué.
Par contre, comment faire pour ne pas afficher les les lignes dont la valeur serait 0 ?
Merci
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 150
Membres
112 670
dernier inscrit
Flow87