Boucle supression ligne VBA Excel

Résolu
rando13 Messages postés 4 Statut Membre -  
rando13 Messages postés 4 Statut Membre -
Salut a tous !

Me suis plante dans message precedent, sorry...

Besoin de votre aide pour un probleme certainement trop facile pour vous :

feuille excel avec trois colonne :

Jean 21 3/21/2005
Jean 21 4/21/2005
Jean 21 4/21/2005
Pierre 21 7/24/2005
Pierre 21 7/24/2005
Pierre 21 8/12/2005
Paul 34 5/23/2005
Paul 34 6/23/2005
Paul 34 6/23/2005

Je cherche a ne garder que la derniere ligne par nom.

Voila unchemin que j'ai commence :

Private Sub boucle()
'éliminer les lignes en trop

'Variables compteur
Dim actualLine As Integer 'variable compteur: ligne en traitement
Dim countline As Integer 'variable compteur: lignes totales
'*************************
'Variables traitement
Dim dateA As Date 'première date
Dim dateB As Date 'deuxième date
Dim prevname As String 'premier nom
Dim nameB As String 'deuxième nom

'Initialisation des variables
countline = 0
actualLine = 0
dateA = 0
dateB = 0
prevname = ""
nameB = ""
'Range("A1").Select

'traitement des données

'Count(Columns("A:A")) à revoir, compter les lignes
Range("A1").Select
countline = Range(Selection, Selection.End(xlDown)).Count

dateA = ActiveCell.Offset(actualLine, 2)
dateB = ActiveCell.Offset(actualLine + 1, 2)
prevname = ActiveCell.Offset(actualLine, 0)
nameB = ActiveCell.Offset(actualLine + 1, 0)

'boucle de traitement
For actualLine = 1 To countline
'test des données
If (prevname = nameB) And (dateA <= dateB) Then
'action

Et la il faudrait la phrase magique qui elimine la ligne en cours de traitement ! Suis-je sur la bonne route, y en a t il une de plus facile ?

Merci pour votre aide !

1 réponse

  1. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    Bonjour rando13,

    Si vraiment tu veux ne conserver que la dernière ligne par nom, tu peux utiliser quelque chose comme :
    Sub SuppressionDoublons()
        
      Dim CelluleCourante As Range
      Dim CelluleSuivante As Range
      
      Application.ScreenUpdating = False
      
      Set CelluleCourante = ActiveCell
      Do While Not IsEmpty(CelluleCourante)
        Set CelluleSuivante = CelluleCourante.Offset(1, 0)
        If CelluleSuivante.Value = CelluleCourante.Value Then
          CelluleCourante.EntireRow.Delete
        End If
        Set CelluleCourante = CelluleSuivante
      Loop
    
    End Sub
    Il suffit que tu sélectionnes la première cellule de la colonne qui te sert de critère (le premier "Jean" de ta liste).
    C'est le moteur. Tu adaptes...
    0
    1. rando13 Messages postés 4 Statut Membre
       
      Hello Armojax !

      Pourquoi faire simple quand on peut faire compliquer... hem...

      J'étais vraiment parti sur le mauvais chemin !

      Merci beaucoup !

      Exactement ce que je voulais !

      Meric !
      0