Boucle insertion ligne quand 2 cellules différentes

Résolu
Stephi83 Messages postés 19 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 29 avril 2007 - 29 avril 2007 à 01:02
Stephi83 Messages postés 19 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 29 avril 2007 - 29 avril 2007 à 18:41
Bonjour,

Je voudrais insérer une ligne entre 2 cellules lorsque celles ci sont différentes mais mon code m'insére une ligne un peu n'importe où (pb de décalage je pense).
Vos idées seront les bienvenues.
Merci

  Sub insérer_ligne()
    
   Sheets("Ordres").Range("A1").Select


    For I = 1 To 30


    If ActiveCell.Offset(I - 1, 0).Value <> ActiveCell.Offset(I, 0).Value Then
    ActiveCell.Offset(I, 0).EntireRow.Select
    Selection.Insert Shift:=xlDown
    
    End If


    Next I
   
End Sub

7 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
29 avril 2007 à 14:54
Salut,

le code de lermitte est presque bon, il faut imbriquer la soluce de MPi, à savoir commencer par la fin et faire un Step -1 afin d'éviter le GoTo

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
3
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
29 avril 2007 à 14:33
bonjour,
essaie cette petite fonction
Sub AjouteLigne()
Dim i As Integer, Déb As Integer
Dim F As Long
Déb = 1
    Worksheets("feuil1").Select
reco:
For i = Déb To Range("A65536").End(xlUp).Row
    If (Cells(i, 1).Value = Cells(i + 1, 1).Value) And _
    Cells(i, 1).Value <> 0 Then
        Range("A" & i + 1).Select
        Selection.EntireRow.Insert
        Déb = i + 1
        GoTo reco
    End If
Next i
End Sub
A+
louis
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
29 avril 2007 à 14:49
Lorsque tu veux ajouter ou supprimer des lignes, commence par la fin.
Et en utilisant Cells comme le dit lermite222 ou encore
Range("A" & i) <> Range("A" & i - 1)

For i = NombreLignes to 2 Step - 1
....
Next

MPi
0
Stephi83 Messages postés 19 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 29 avril 2007
29 avril 2007 à 14:58
hello Louis,

je crois qu'une coquille s'est glissée dans ton code car il m'insère une ligne qand les cellules sont identiques ! En fait, il faut juste remplacer le = par <> et ca marche impec.
Merci bp

Sub AjouteLigne()
Dim i As Integer, Déb As Integer
Dim F As Long
Déb = 1
    Worksheets("feuil1").Select
reco:
For i = Déb To Range("A65536").End(xlUp).Row
    If (Cells(i, 1).Value <> Cells(i + 1, 1).Value) And _
    Cells(i, 1).Value <> 0 Then
        Range("A" & i + 1).Select
        Selection.EntireRow.Insert
        Déb = i + 1
        GoTo reco
    End If
Next i
End Sub

Stephi83
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Stephi83 Messages postés 19 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 29 avril 2007
29 avril 2007 à 15:13
Merci Mortalino et MPi,

Votre méthode marche également.
Par contre, j'aimerais bien savoir pourquoi il faut éviter le GoTo.
Merci

Sub AjouteLigne()


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


Déb = 1


    Worksheets("Ordres").Select
   
For i = 23 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
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
29 avril 2007 à 15:20
Pour la simple et bonne raison qu'il te provoque une nouvelle boucle inutile.
A savoir, si le doublon est trouvé au bout de la 1000e ligne sur 10 000, le GoTo reco    retourne avant la boucle For i, est donc repars de 0. Les 1000eres valeurs sont inutilement lu, car trié précedemment.
Ta dernière solution est bien mieux

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
Stephi83 Messages postés 19 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 29 avril 2007
29 avril 2007 à 18:41
Merci pour toutes ces explications !
0
Rejoignez-nous