Copier une ligne en fonction d'une valeur dans une cellule
l
Bonjout à tous,
voila mon problème ... J'ai besoin de copier coller des lignes en fonction d'une valeur qui se trouve dans une colonne.
Je voudrais que si dans la colonne AD, j'ai la valeur 4, je copie la ligne en question et que je l'insère 3 fois (ce n'est pas une erreur, c'est bien 3 et pas 4).
Attention parfois, je peux avoir 0 dans la colonne AD, dans ce cas, je conserve la ligne existante.
Merci par avance pour votre aide.
Laurent
3
Bonjour,
Voici une idée de code, déjà proposée, mais présentant des risques d'erreur au niveau de la boucle principale.
Vous avez le principe mais il faudra personnaliser et sûrement améliorer :
Sub Inserer()
Dim plage as range, cell as range, NvCell as range
Dim NbInsert%, i%
Dim AdrCell$
Set plage = Range("AD1").currentregion 'la plage à travailler
for each cell in plage.columns(X) 'pour chaque cellule de la colonne X (equiv AD)
If cell.value > 1 Then 'si la valeur est supérieure à 1 (si 1, on insère rien, si au-dessus, on insère cell.value-1 lignes)
NbInsert = cell.value - 1 'Nombre de lignes à insérer
AdrCell = cell.address 'conserve l'adresse de cellule en cours
Set NvCell = cell 'nouvelle cellule temporaire
cell.value = 0 'mise à 0 de la valeur de cellule en cours
For i = 1 to NbInsert 'répéter NbInsert de fois les opérations
plage.rows(NvCell.row).copy 'copie de la dernière ligne
plage.rows(NvCell.row).insert 'insérer la copie en-dessous dernièer ligne
Set NvCell = NvCell.offset(1, 0) 'cellule temporaire devient celle du dessous
next i
Set NvCell = Nothing 'vider cellule temporaire
Set cell = Range(AdrCell) 'rédéfinit cell
Set plage = plage.resize(plage.rows.count + NbInsert, plage.columns.count) 'redimension de notre plage avec les lignes créées
end if
next cell
end sub
Cordialement,