Insérer un nombre de lignes en fonction de la valeur d'une case [Résolu/Fermé]

Signaler
-
 Un alcoolique -
Bonjour,

J'ai un fichier d'environ 6 000 lignes que je dois mettre en forme pour y ajouter de Vlookup. C'est le résumé de toute ma campagne 2012 (récolte de tournesol).

Voila mon problème, avec les numéros de série de chaque lot, je dois effectuer une tracabilité. Le soucis c'est que parfois, pour un lot final j'ai plusieurs lots intermédiares (qui ont été mélangés) je voudrais donc voir toutes les qualités intermediaires pour cela il me faut insérer le nombre de lignes adéquat. J'ai réussi à coder pour que chaque fois que j'ai un nouveau numéro de lot il m'insére une ligne mais je voudrais qu'il se base sur le contenu d'une cellule pour savoir le nombre qu'il doit insérer.
Sub AjouteLigne()

Dim i As Integer, Déb As Integer
Dim F As Long

Déb = 1

Worksheets("sheet1").Select

For i = 100 To 2 Step -1

If (Cells(i, 1).Value <> Cells(i - 1, 1).Value) And _
Cells(i, 1).Value <> 0 Then
Range("A" & i).Select
Selection.EntireRow.Insert
Déb = i + 1
End If
Next i
End Sub

Voila mon code, il marche mais je suis bloquée pour la suite...

Merci de votre aide, j'espère avoir été compréhensible...

8 réponses

Messages postés
23555
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 octobre 2020
6 400
Bonjour,

Alors:
Sub insererLig()
    Dim lig As Long
    Application.ScreenUpdating = False
    For lig = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1
        If Cells(lig, "A") <> Cells(lig + 1, "A") And Cells(lig, "B") > 0 Then
            Rows(lig + 1).Resize(Cells(lig, "B")).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            Cells(lig + 1, 1).Resize(Cells(lig, "B"), 1) = Cells(lig, "A")
        End If
    Next lig
    Application.ScreenUpdating = True
End Sub 

eric
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
23555
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 octobre 2020
6 400
Bonjour,

si tu pouvais déposer un classeur exemple avec les explications dessus tu seras sur que ce sera adapté.
Déposer le fichier xls (réduit au nécessaire et anonymisé) sur cjoint.com et coller ici le lien fourni.

eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Bonjour Eric,

Merci de ta réponse. Effectivement avec un fichier ca sera plus clair. J'ai tout supprimé et j'en ai refait un autre parcequ'il faut savoir qu'il y a au moins 75 colonnes et plus de 6 000 lignes...
Voici le lien

http://cjoint.com/?CAdqU6Co3m3

Encore une fois merci
Messages postés
23555
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 octobre 2020
6 400
Totalement incompréhensible.
Par exemple ou voit-on qu'il faut ajouter 2 lignes sous la ligne 2 ???
Et est-ce sous la ligne 2 ou la ligne 5 ???

Ligne par ligne il faut qu'on sache combien ajouter de lignes, ou comment le calculer.
Pourquoi insérer 3 pour 10001 et 0 pour 100003 ???

Et on insère des lignes vides ? Aucune valeur à recopier autre que le n° ?

Et fais une feuille avec le avant, et une autre avec le après que ce soit bien clair.

eric
Je suis désolée, j'ai du mal à expliquer apparement, ca fait tellement longtemps que je suis dessus que du coup je m'embrouille.

En fait, je veux que le nombre de lignes soit ajouté sous le dernier Ordre de fabrication similaire, mais comme je ne savais pas comment l'écrire, je l'ai recopié en face de chaque Ordre. En gros, la macro doit suivre la colonne A et dès que la valeur change aller voir sur la case d'a coté, combien de lignes elle doit en insérer.

J'ai refait un exemple avec avant aprés, j'espère que ca sera mieux....

http://cjoint.com/?CAdrQH2hfW1

Lucie
Messages postés
23555
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 octobre 2020
6 400
Donc la colonne B 'A insérer' sera bien présente ? Elle était absente du 1er fichier...
Si oui ne mettre un nombre que là ou tu veux une insertion de ligne.
Regarde si ça va : https://www.cjoint.com/c/CAdtwybzYeX

eric
Bonjour,

Oui la colonne B sera présente. Merci beaucoup ca marche.

Est ce que je peux combiner les deux codes (le votre et le mien) pour que quand le numéro d'ordre change il aille chercher la valeur dans la colonne B? Parceque du coup sur 6 000 lignes, s'il faut que j'efface à la main chaque valeur pour ne la laisser qu'une fois juste avant la place à insérer je ne suis pas arrivée...

En tout cas merci beaucoup pour tout
J'ai essayé ca mais ca ne marche pas ...

Sub AjouteLigne()

Dim i As Integer, Déb As Integer
Dim F As Long
Dim lig As Long

Déb = 1
'selectionner ma feuille

Worksheets("sheet1").Select

'aller jusqu'à 100
For i = 100 To 2 Step -1

'condition sur la cellule qui doit être différente

If (Cells(i, 1).Value <> Cells(i - 1, 1).Value) And _
Cells(i, 1).Value <> 0 Then

'selectionner la cellule différente et y insérer une ligne

Range("A" & i).Select
Application.ScreenUpdating = False
For lig = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1
If Cells(lig, "B") > 0 Then
Rows(lig + 1).Resize(Cells(lig, "B")).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Cells(lig + 1, 1).Resize(Cells(lig, "B"), 1) = Cells(lig, "A")
End If
Next lig
Application.ScreenUpdating = True
Déb = i + 1
End If
Next i
End Sub

Merci Eric
SUper ca marche!!!

Merci beaucoup c'est vraimùent génial d'aider les gens comme ca!!

Merci
Messages postés
23555
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 octobre 2020
6 400
ok, je met en résolu pour toi (en haut vers ton titre, pour la prochaine fois)
eric