Insérer des lignes avec conditions

9forum.xlsm (78.10 Ko)

Bonsoir à tous,

Je donne ma langue au chat !

J'ai passé des heures à chercher : j'y arrive pas!

Pourtant c'est vraiment bête, mais pas moyen.

Je dois donc parvenir à insérer une ligne si ma cellule ne contient pas "Non assigné" et si le contenu de ma cellule est différent de ma cellule +1 ou -1 selon le sens de la boucle, mais systématiquement j'ai une ligne indésirable ajoutée sous "Non assigné"

Sub test3()

    Dim dernièreLigne As Long
    Dim i As Long

    ' Trouver la dernière ligne avec des données dans la colonne AX
    dernièreLigne = Cells(Rows.Count, "AX").End(xlUp).Row

    ' Parcourir les lignes de la dernière à la cinquième ligne (en sens inverse)
    For i = dernièreLigne To 5 Step -1

If Range("AX" & i).Value <> "Non assigné" And Range("AX" & i + -1).Value <> Range("AX" & i).Value Then Range("AX" & i).EntireRow.Insert

    Next i

End Sub

J'ai essayé dans tous les sens, je ne trouve pas....

Vous seriez des anges de m'apporter une solution.

PS : après j'ai beaucoup d'autres choses à faire sur ces lignes, comme additionner les valeurs de la colonne D de la ligne insérée précédemment +1 jusqu'à la nouvelle ligne insérée -1, donc j'aurai besoin de conserver le i pour ma formule, ça je pense que ça devrait aller, mais je m'énerve à buter sur cette étape ci (depuis ce matin à vrai dire)

Bonsoir Lorence, le forum,

Ne serait-il pas plus simple de montrer le résultat attendu ?

Est-ce ceci ?

image

Cordialement,

Bon sang ! Je savais que c'était une connerie.

Comme quoi quand on reste le nez sur un problème toute la journée on fini par ne plus rien voir.

Il m'a suffit de 30 minutes de pause, et 5 minutes plus tard j'avais compris

Sub test3()

    Dim dernièreLigne As Long
    Dim i As Long

    ' Trouver la dernière ligne avec des données dans la colonne AX
    dernièreLigne = Cells(Rows.Count, "AX").End(xlUp).Row

    Debug.Print dernièreLigne

    ' Parcourir les lignes de la dernière à la cinquième ligne (en sens inverse)
    For i = dernièreLigne To 5 Step -1

If Range("AX" & i).Value <> Range("AX" & i - 1).Value And Range("AX" & i - 1).Value <> "Non assigné" And Range("AX" & i).Value <> "Non assigné" Then Range("AX" & i).EntireRow.Insert

    Next i

End Sub

La prochaine fois que je bute sur un problème je me ferai des crêpes ;)

Re,

Bien joué !

Sub test3()
 Dim dernièreLigne As Long
 Dim i As Long
  With Sheets("Rentabilité")
 ' Trouver la dernière ligne avec des données dans la colonne AX
   dernièreLigne = .Cells(Rows.Count, "AX").End(xlUp).Row
   Debug.Print dernièreLigne
 ' Parcourir les lignes de la dernière à la cinquième ligne (en sens inverse)
   For i = dernièreLigne To 5 Step -1
    If .Range("AX" & i).Value <> "Non assigné" And _
    .Range("AX" & i - 1).Value <> "Non assigné" And _
    .Range("AX" & i - 1).Value <> .Range("AX" & i).Value Then
    .Range("AX" & i).EntireRow.Insert
    End If
   Next i
  End With
End Sub

Bonne continuation,

et si ça intéresse quelqu'un voici la même chose mais en boucle inversée, du haut vers le bas, pour permettre de conserver la valeur de i et l'incrémenter dans une formule

Sub test4()

Dim dernièreLigne As Long
Dim i As Long, lignePrecedente As Long

    ' Trouver la dernière ligne avec des données dans la colonne AX
    dernièreLigne = Cells(Rows.Count, "AX").End(xlUp).Row

    lignePrecedente = 4

    ' Parcourir les lignes de la dernière à la cinquième ligne (en sens inverse)
    For i = 5 To dernièreLigne
    If Range("AX" & i).Value <> Range("AX" & i + 1).Value And Range("AX" & i + 1).Value <> "Non assigné" And Range("AX" & i).Value <> "Non assigné" Then
    Range("AX" & i + 1).EntireRow.Insert
    Range("D" & i + 1).FormulaR1C1 = "=SUM(R" & lignePrecedente & "C:R[-1]C)"
    i = i + 1
    lignePrecedente = i + 1
    End If
    Next i
End Sub

Merci xorsankukai ;)

C'est fou comme je peux parfois tourner en rond sur des choses toutes simples !

Rechercher des sujets similaires à "inserer lignes conditions"