Suppression de ligne dans une boucle

Résolu/Fermé
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 - 24 sept. 2015 à 14:26
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 - 25 sept. 2015 à 11:33
Bonjour,

Voilà mon code :

Sub RETRAITEMENTS()

Dim DL As Long

Range("A:E,J:O,Q:Q,S:S").Delete

DL = Cells(Application.Rows.Count, 5).End(xlUp).Row

For i = DL To 5 Step -1

If Range("A" & i) = "" Then
    Range("A" & i).Value = Range("A" & i - 1).Value
    Range("B" & i).Value = Range("B" & i - 1).Value
    Range("C" & i).Value = Range("C" & i - 1).Value
    Range("D" & i).Value = Range("D" & i - 1).Value
    Range("F" & i).Value = Range("F" & i - 1).Value
    Range("G" & i).Value = Range("G" & i - 1).Value
    Range("H" & i).Value = Range("H" & i - 1).Value
    Range("I" & i).Value = Range("I" & i - 1).Value
Rows(i - 1).Delete

i = i - 1

End If

Next i

End Sub


Rien de bien compliqué, je veux que si la cellule de la ligne i colonne A est vide, les cellules A, B ,C, D ,F, G, H, I passent de la ligne i-1 à la ligne i et que la ligne i-1 soit supprimée.

Je vous joins le document anonymé. En fait, vous avez parfois plusieurs lignes pour une seule facture. Et la montant de la facture est la somme en dessous. Comme si j'avais des sous-totaux sur excel (il s'agit d'une extraction). Le problème est que quand j'ai plusieurs lignes, elles continuent d'apparaître après le lancement de la macro.

https://www.cjoint.com/c/EIymAzwhCMf

Ce que je veux, c'est n'avoir qu'une ligne par facture pour le montant total de la facture, avec les données des lignes précédentes pour A, B ,C ,D ,F, G , H ,I. Ces colonnes sont celles prises après :

Range("A:E,J:O,Q:Q,S:S").Delete


Merci de votre aide.
A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
24 sept. 2015 à 16:32
Re-

Il te faut un second test lorsque Ai n'est pas vide...
Teste par exemple si Bi = Bi + 1 ET Ci = Ci + 1
Autre souci les dates en colonne A sont modifiées chez moi. Donc j'ai ajouté CDate()
Donc quelque chose comme :
Sub RETRAITEMENTS()

Dim DL As Long

Range("A:E,J:O,Q:Q,S:S").Delete

DL = Cells(Application.Rows.Count, 5).End(xlUp).Row

For i = DL To 5 Step -1

If Range("A" & i) = "" Then
Range("A" & i).Value = CDate(Range("A" & i - 1).Value)
Range("B" & i).Value = Range("B" & i - 1).Value
Range("C" & i).Value = Range("C" & i - 1).Value
Range("D" & i).Value = Range("D" & i - 1).Value
Range("F" & i).Value = Range("F" & i - 1).Value
Range("G" & i).Value = Range("G" & i - 1).Value
Range("H" & i).Value = Range("H" & i - 1).Value
Range("I" & i).Value = CDate(Range("I" & i - 1).Value)
Rows(i - 1).Delete

i = i - 1
ElseIf Range("B" & i) = Range("B" & i + 1) And Range("C" & i) = Range("C" & i + 1) Then
Rows(i).Delete
End If

Next i


End Sub
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
24 sept. 2015 à 17:06
Re,

Rah merci encore une fois. Je crois que dans le jus ça je l'aurais pas trouvé tout seul. Vraiment merci.

Vous avez une idée de comment garder la même mise en forme? Le format de l'écriture de départ est vraiment bien pour la lisibilité de mon fichier.

Merci !
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
24 sept. 2015 à 17:20
Pouvez-vous aller voir ma dernière question sur les boutons svp?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
25 sept. 2015 à 09:24
Bonjour,

Il te faut refaire la mise en forme en fin de macro.
Pour cela, créer une seconde Sub avec la mise en forme Arial, 8.5, alignement horizontal et vertical...
Cela te donne, au final, ces deux procédures :

Sub RETRAITEMENTS()
Dim DL As Long
   Range("A:E,J:O,Q:Q,S:S").Delete
   DL = Cells(Application.Rows.Count, 5).End(xlUp).Row
   For i = DL To 5 Step -1
      If Range("A" & i) = "" Then
          Range("A" & i).Value = CDate(Range("A" & i - 1).Value)
          Range("B" & i).Value = Range("B" & i - 1).Value
          Range("C" & i).Value = Range("C" & i - 1).Value
          Range("D" & i).Value = Range("D" & i - 1).Value
          Range("F" & i).Value = Range("F" & i - 1).Value
          Range("G" & i).Value = Range("G" & i - 1).Value
          Range("H" & i).Value = Range("H" & i - 1).Value
          Range("I" & i).Value = CDate(Range("I" & i - 1).Value)
         Rows(i - 1).Delete
         i = i - 1
      ElseIf Range("B" & i) = Range("B" & i + 1) And Range("C" & i) = Range("C" & i + 1) Then
          Rows(i).Delete
      End If
   Next i
   DL = Cells(Application.Rows.Count, 5).End(xlUp).Row
   Mise_En_Forme Range("A2:V" & DL)
End Sub

Sub Mise_En_Forme(RngSelect As Range)
    With RngSelect
      With .Font
        .Name = "Arial"
        .Size = 8.5
      End With
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlTop
    End With
End Sub

0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
25 sept. 2015 à 11:33
Parfait :) Merci beaucoup :)
0