Boucle insertion ligne quand 2 cellules différentes [Résolu]

Signaler
Messages postés
19
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
29 avril 2007
-
Messages postés
19
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
29 avril 2007
-
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

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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~
  
Messages postés
492
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
2 juillet 2012
1
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
19
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
29 avril 2007

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
Messages postés
19
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
29 avril 2007

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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~
  
Messages postés
19
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
29 avril 2007

Merci pour toutes ces explications !