Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 

kalek93

XLDnaute Nouveau
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?
 

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

camarchepas

XLDnaute Barbatruc
Re : Quelle boucle choisir?

Bonsoir , dans ton exemple aucune ligne n'a la colonne H et K identique.

Donc même en modifiant le code la réponse ne sera pas bonne.

Dans l'onglet résultat , tout est faux , ou j'ai rien compris ...
 

kalek93

XLDnaute Nouveau
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 édition:

Discussions similaires

Réponses
6
Affichages
325
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…