Quelle boucle choisir?

  • Initiateur de la discussion Initiateur de la discussion kalek93
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

K

kalek93

Guest
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
 
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

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
 
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 😉
 
Re : Quelle boucle choisir?

Bonsoir camarchepas et Bruno,

Deux codes différents, mais deux codes qui marchent parfaitement! Merci beaucoup à tous les 2.

Quel serait le code à ajouter pour avoir les sous-totaux de chaque bloc?
 
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
 
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

Re : Quelle boucle choisir?

Je me suis mal exprimé, je voudrais la somme de J si "H & i" et "K & i" sont identiques à "H & i-1" et "K & i-1".

En gros, les sous-totaux de chaque "bloc".
 
Dernière modification par un modérateur:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
909
Réponses
8
Affichages
390
Réponses
4
Affichages
730
Réponses
15
Affichages
779
Réponses
2
Affichages
527
Réponses
10
Affichages
661
Réponses
5
Affichages
573
Retour