Insérer une ligne ou plus en fonction de la valeur de cellule [Fermé]

Signaler
Messages postés
5
Date d'inscription
lundi 11 janvier 2016
Statut
Membre
Dernière intervention
4 mars 2016
-
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
-
Bonjour ,

J'ai un tableau de données avec une colonne A qui contient une série de chiffres de [1 à 6] en répétition
En fonction de cette valeur j'aimerai insérer une ligne vide au dessus
Exemple :

If Cells(i, 1).Value = 2 Then Insérer une ligne vide au dessus
If Cells(i, 1).Value = 3 Then Insérer deux lignes vides au dessus

J'ai essayé de créer une Macro pour exécuter cette opération comme suite :

Sub Macro1()

Dim i As Integer
Dim x As Integer
Dim b As Integer

'Je voudrais faire cette opération de la ligne 4 jusqu'à 200
For i = 4 To 10
x = Cells(i, 1).Value
b = Cells(i, 1).Row

If x = 2 Then
ActiveSheet.Range("A" & b, "A" & b).EntireRow.Insert
End If

Next
End Sub

Le résultat quand j'exécute la Macro est une création de Ligne jusqu'à i=200 à partir de la première valeur =2 (pour le 1er exemple)

Pouvez vous m'aider un compléter ce script pour arrêter l'opération selon le nombre de ligne précis à insérer en fonction de la valeur x (qui se répète) . Donc cette opération doit se répéter en boucle à chaque fois en partant de la ligne 4 jusqu'à la ligne 200.

J'espère que j'ai pu être plus au moins clair sur ma problématique

Merci
Bien Cordialement

2 réponses

Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 080
Bonjour

Avec ce que j'ai compris
http://www.cjoint.com/c/FAlpAuehUnI

Cdlmnt
Messages postés
5
Date d'inscription
lundi 11 janvier 2016
Statut
Membre
Dernière intervention
4 mars 2016

C'est super j'ai exécuté votre script et ça marche super j'ai rajouté les condition pour tt les valeurs de 2 à 6 :

Ma deuxième étape est de coller les valeur de A à K au niveau de la ligne vide rajoutée
Du coup j'ai pensé à rajouté :

If n = 2 Or n = 3 Or n = 4 Or n = 5 Or n = 6 Then
For k = 1 To n - 1
Rows(li).Insert
Range("A" & li & ":K" & li).Select
Selection.Copy
Next k
End If

Mais ça n'a pas l'air de marché ! Avez vous un idée ?
Merci bcp pour votre aide
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 080
Essaies ceci

Option Explicit

Const lideb = 4
Const co = 1 ' colonne A
Const coco = 11 ' colonne k

Public Sub InsereLignes()
Dim lifin As Long, li As Long, k As Long, n As Long, plage As Range
Application.ScreenUpdating = False
lifin = Cells(Rows.Count, co).End(xlUp).Row
For li = lifin To lideb Step -1
n = Cells(li, co)
If n > 1 Then
Set plage = Range(Cells(li, co), Cells(li, coco))
For k = 1 To n - 1
Rows(li).Insert
plage.Copy Cells(li, 1)
Next k
End If
Next li
Application.ScreenUpdating = True
End Sub

Cdlmnt