Quelle boucle choisir?

kalek93

XLDnaute Nouveau
Bonjour

Je souhaiterai créer une boucle qui insère une ligne si la colonne H & K sont différentes de la ligne du dessus.

Si 3 lignes sont identiques, la ligne vide sera insérée au-dessus de la 3e ligne (en partant du bas).


Voici la macro que j'ai crée :



For i = 13 To 3 Step -1

If Range("K" & i).Value = Range("K" & i - 1).Value And Range("H" & i).Value = Range("H" & i - 1).Value Then

If Range("K" & i).Value = Range("K" & i - 2).Value And Range("H" & i).Value = Range("H" & i - 2).Value Then

If Range("K" & i).Value = Range("K" & i - 3).Value And Range("H" & i).Value = Range("H" & i - 3).Value Then

Rows(i - 3).Insert

End If

Rows(i - 2).Insert

End If

Rows(i - 1).Insert

Else: Rows(i).Insert

End If

Next i



Le problème avec cette boucle est que si 4 lignes sont identiques, la ligne sera tout de même insérée au dessus de la 3e (en partant du bas), et j'aimerai qu'elle s'insère au dessus de la 4e.

Je sais qu'une boucle While serait plus adapté, mais je ne vois pas du tout comment la mettre en oeuvre.

Pourriez-vous m'aider svp?

Merci
 

kalek93

XLDnaute Nouveau
Re : Quelle boucle choisir?

Bonjour Bruno,

Voici ci-joint un exemple de fichier.

En page 1 la page d'origine, et en page 2, le résultat que je souhaiterai obtenir.


Merci d'avance pour ton aide.
 

Pièces jointes

  • Macro à effectuer.xlsx
    8.8 KB · Affichages: 32
  • Macro à effectuer.xlsx
    8.8 KB · Affichages: 40
  • Macro à effectuer.xlsx
    8.8 KB · Affichages: 36

camarchepas

XLDnaute Barbatruc
Re : Quelle boucle choisir?

Bonsoir Kalek,

une possibilité :

Code:
Sub test()
Dim Mem As String, Lecture As String, Ligne As String

Ligne = 1
Mem = Range("H" & Ligne)
Do
Lecture = Range("H" & Ligne)
If Lecture <> Mem Then
  Mem = Range("H" & Ligne)
  Rows(Ligne).Insert
  Ligne = Ligne + 2
 Else
  Ligne = Ligne + 1
End If
Loop Until Mem = ""
End Sub
 
C

Compte Supprimé 979

Guest
Re : Quelle boucle choisir?

Re,

Merci pour le fichier avec tes 2 feuilles, c'est vraiment plus simple à comprendre ;)

Voici le code
VB:
Sub MiseEnForme()
  Dim DLig As Long, Lig As Long
  ' Avec la feuille
  With Sheets("Origine")
    ' Trouver et mémoriser la dernière ligne de la feuille
    DLig = .Range("H" & Rows.Count).End(xlUp).Row
    ' Pour chaque ligne en commençant par la fin
    For Lig = DLig To 2 Step -1
      ' Si la ligne du dessus est différente de celle en cours
      If .Range("H" & Lig - 1) <> .Range("H" & Lig) Then
        ' Insérer une ligne
        Rows(Lig).Insert Shift:=xlDown
      End If
    Next Lig
  End With
End Sub

A+

Edit : oups, salut camarchepas ;)
 

camarchepas

XLDnaute Barbatruc
Re : Quelle boucle choisir?

Bonjour Kalek,

Une des nombreuses solutions possibles ....

Code:
Sub test()
Dim Mem As String, Lecture As String, Ligne As String
Dim Somme As Long, Compte As Long

Ligne = 1: Compte = 0: Somme = 0
Mem = Range("H" & Ligne)

Do
 
  Lecture = Range("H" & Ligne)

  If Lecture <> Mem Then
    Mem = Range("H" & Ligne)
    Rows(Ligne).Insert
    Range("J" & Ligne) = "Total pour " & Compte & " valeurs : " & Somme
    Ligne = Ligne + 1
    Compte = 0: Somme = 0
  End If
  
  Somme = Somme + Range("K" & Ligne)
  Compte = Compte + 1
  Ligne = Ligne + 1

Loop Until Mem = ""
End Sub
 

kalek93

XLDnaute Nouveau
Re : Quelle boucle choisir?

Salut camarchepas,

Merci de ton aide. Cependant je n'arrive pas à l'adapter à mon fichier.

En fait je dois la somme de J, si H et K sont similaires. Or, avec la macro, la "condition" ne prend en compte uniquement la colonne H et pas "H et K"

Voici mon code

Code:
Sub miseenforme()

Ligne = 2
Compte = 0
Somme = 0
Mem = Range("H" & Ligne)

Do
 
  Lecture = Range("H" & Ligne)

  If Lecture <> Mem Then
    Mem = Range("H" & Ligne)
    Rows(Ligne).Insert
    Range("J" & Ligne) = Somme
    Ligne = Ligne + 1
    Compte = 0: Somme = 0
  End If
 
  Somme = Somme + Range("J" & Ligne)
  Compte = Compte + 1
  Ligne = Ligne + 1

Loop Until Mem = ""

End Sub

Je t'envoi ci-joint le fichier.

Merci d'avance pour votre aide.
 

Pièces jointes

  • Macro à effectuer.xlsx
    11.2 KB · Affichages: 31
  • Macro à effectuer.xlsx
    11.2 KB · Affichages: 30
  • Macro à effectuer.xlsx
    11.2 KB · Affichages: 31

Discussions similaires

Réponses
6
Affichages
297

Statistiques des forums

Discussions
312 545
Messages
2 089 486
Membres
104 181
dernier inscrit
Mateke