Supprimer la répétition VBA

Bonjour,

premièrement merci à toutes les personnes du Forum qui donnent des coup de main.

Voici mon problème :

J'ai dans mon fichier une liste de gens dont chacun est attribué à un numéro de Cie.

Je souhaite regrouper les gens selon leur numéro de Cie en 4 groupes.

Jusque là mon code fonctionne mais comme j'ai un esprit torturé voilà le plus compliqué :

  • je souhaite éviter de répétez le groupe dans le dernière colonne si la personne du dessus à le même groupe d'attribué.
  • et c'est bien volontaire de mettre de côté les six dernières personnes car je dois pouvoir les repérer dans la suite de mon code.

Merci d'avance pour votre aide

20groupe.xlsm (20.40 Ko)

je souhaite éviter de répétez le groupe dans le dernière colonne si la personne du dessus à le même groupe d'attribué.

Sans modifier ton code, ce que je ferais, c'est mettre une MFC qui dit "si ma valeur est la même que celle au-dessus, je mets la couleur de police à blanc"

Avantage, en cas de tri ou de TCD, tu récupères toutes les valeurs puisqu'elles subsistent même en blanc

Merci steelson,

Ton idée est bien mais j'ai un esprit torturé.

Il s'agit là d'une partie d'un code bien plus long.

Et la difficulté vient du faite que je cherche à modifier la typologie des 2ème groupes (ceux ce situant en fin de liste).

Sachant que le nombre de personne par groupe dépend du fichier original et qu'il peut changer à chaque nouvelle cession.

Pour faire plus simple ces personnes suivent un stage et ceux en fin de liste ne participe qu'à la seconde partie de formation, je dois donc les identifier.

Après de nombreuses recherche je n'arrive pas à isoler ces derniers.

Mais merci quand même.

Bonjour,

Cie = Sheets(1).Cells(x, 1).Value

Ce n'est pas un peu dangereux ça ?

Shetts(1) est la 1ère feuille, c'est à dire 'TEST actuellement'. Est-ce bien normal ???

eric

oui c'est volontaire pour le moment.

Sur mon code global j’insère une feuille en tout début de code puis je souhaite trier mes infos, les classer, effectuer une identification sur certaines d'entre elle, créer des groupes selon trois critères, tout basculer sur un tableau ayant la mise en page que je souhaite et pour finir supprimer cette feuille(1).

Bonjour,

une proposition,

Sub Groupe()
    Dim G1 As Integer, G2 As Integer, G3 As Integer
    Dim i As Integer
    With Sheets("test")
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        ActiveSheet.Range("$A$1:$B$" & dl).RemoveDuplicates Columns:=Array(1, 2), Header:=xlNo
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        OGrp = ""
        For x = 2 To dl
            Cie = .Cells(x, 1).Value
            Select Case Cie
            Case 7, 9, 10, 12, 13, 14, 24, 26, 20
                NGrp = "1GIS"
            Case 1, 2, 8, 11, 15, 17, 22, 23, 19
                NGrp = "2GIS"
            Case 3, 4, 5, 6, 16, 21, 27, 28, 18
                NGrp = "3GIS"
            Case Else
                NGrp = "1"
            End Select
            If OGrp = NGrp Then
                .Cells(x, 3).Value = ""
            Else
                .Cells(x, 3).Value = NGrp
                OGrp = NGrp
            End If
        Next
    End With
End Sub

Merci ça ma l'air parfait.

Afin que je comprenne bien le code j'ai quelque question (désolé):

- il y a deux fois :

( dl = .Cells(Rows.Count, 1).End(xlUp).Row 

avant et après la suppression des doublons est normal et pourquoi?

- OGrp est vide mais je n'arrive pas à comprendre la logique de :

         
            If OGrp = NGrp Then
                .Cells(x, 3).Value = ""
            Else
                .Cells(x, 3).Value = NGrp
                OGrp = NGrp
            End If

Merci pour l'aide apportée

bonjour,

dl donne le numéro de ligne de la dernière cellule non vide d'une colonne (ici colonne 1).

la première fois dl me sert à délimiter la plage dans laquelle on va faire la suppression des doublons.

la deuxième fois dl sert à délimiter la plage dans laquelle on va supprimer la répétition. Entre les 2, comme il y a eu des lignes supprimées (détection des doublons), il faut re-déterminer la valeur de dl.

Ogrp et Ngrp permettent de détecter s'il y eu un changement de groupe. Si changement de groupe on met le nouveau groupe, sinon on met un blanc.

Ogrp contient le groupe de la ligne précédente, Ngrp contient le groupe de la ligne en cours.

merci pour les explication,

je ne voyais pas la référence à la ligne précédente mais effectivement pour ceux qui auront ce problème

la dernière ligne de la boucle ForNext est : "OGrp=NGrp" donc OGrp change de valeur à chaque boucle

            
  If OGrp = NGrp Then
      .Cells(x, 3).Value = ""
  Else
      .Cells(x, 3).Value = NGrp
       OGrp = NGrp
  End If
Next

Merci pour vos réponse. je clôture donc rapidement ce post.

Merci encore

Rechercher des sujets similaires à "supprimer repetition vba"