OVH Cloud OVH Cloud

gestion liste sans doublons

1 réponse
Avatar
alroussel
bonjour à tous,
je me permet de reposer mon problème pour le lequel je n'ai pas vraiment
obtenu de solution mais certainement que je me suis mal expliqué. Alors
voilà l'exemple que je voudrais obtenir.

. Mon exemple
sur une feuille de calcul j'ai ceci
en A1: alain en B1 : bleu
en A2: jana en B2 : vert en C2: rouge
en A3: Ines en B3 : rouge en C3: bleu en D3 vert
en A4: alain en B4: bleu en C4: rouge
en A5: ines en B5: violet
en a6 alain en b6 : violet en C6 rouge
en A7: jana en b7 : vert

passage de la macro (si possible) je voudrais obtenir
en A1: alain en B1: bleu en C1: rouge en D1: violet
en A2: jana en B2 : vert en C2: rouge
en A3: ines en B3 : rouge en C3: bleu en D3 vert en E3 violet

bien entendu seule la colonne des noms reste inchangée (col A)
en fait chaque fois que l'utilisateur rentre un nom et une donnée, la macro
doit rechercher déjà si ce nom existe auparavant, lire la ou les données qui
y sont et ajouter la nouvelle donnée si elle n'existe pas déjà, dans la
première colonne vide qu'elle rencontre au bout de la ligne, ou ne pas la
prendre en compte si elle
existe auparavant, et dans ces deux cas une fois le travail fait supprimer
cette nouvelle ligne afin qu'il n'existe pas de doublons sur le nom, et s'il
s'agit d'une donnée nouvelle (nouveau nom) la macro ne fait rien du tout

J'espère m'avoir fait comprendre mais vraiment je bute la dessus et arrive à
ne plus rien y comprendre

je travaille sur une ancienne solution (environ 2ans) plus simple que
m'avait donné Frédéric Sigonneau (que je remercie encore et à qui je fais
chapeau bas pour son site) et qui était la suivante:

Sub Classement()

Dim NextCell As Range
Dim CurrentCell As Range
Dim B As Integer

With Worksheets(ActiveSheet.Name)
.Range("A1").Sort _
Key1:=Worksheets(ActiveSheet.Name).Range("A1")
Set CurrentCell = Worksheets(ActiveSheet.Name).Range("A1")

Do While Not IsEmpty(CurrentCell)
Set NextCell = CurrentCell.Offset(1, 0)
If CurrentCell.Value = NextCell.Value Then
CurrentCell.Offset(, CurrentCell.End(xlToRight).Column) = _
NextCell.Offset(0, 1)
NextCell.EntireRow.Delete
Set NextCell = CurrentCell
Else
Set CurrentCell = NextCell
If CurrentCell Is Nothing Then Exit Sub

End If
Loop
End With
MsgBox ("Voilà, c'est fait")
End Sub

merci d'avance pour votre attention et réponses

Alain ROUSSEL

1 réponse

Avatar
Ellimac
Bonjour Alain,

La macro que je t'ai transmise fonctionne à la condition
que ta 1ère colonne soit triée au préalable ou rajoute
l'instruction suivante en début de macro :

Selection.Sort Key1:=Range("A5"), Order1:=xlAscending

Amicalement,
Camille

-----Message d'origine-----
bonjour à tous,
je me permet de reposer mon problème pour le lequel je
n'ai pas vraiment

obtenu de solution mais certainement que je me suis mal
expliqué. Alors

voilà l'exemple que je voudrais obtenir.

.. Mon exemple
sur une feuille de calcul j'ai ceci
en A1: alain en B1 : bleu
en A2: jana en B2 : vert en C2: rouge
en A3: Ines en B3 : rouge en C3: bleu en D3 vert
en A4: alain en B4: bleu en C4: rouge
en A5: ines en B5: violet
en a6 alain en b6 : violet en C6 rouge
en A7: jana en b7 : vert

passage de la macro (si possible) je voudrais obtenir
en A1: alain en B1: bleu en C1: rouge en D1: violet
en A2: jana en B2 : vert en C2: rouge
en A3: ines en B3 : rouge en C3: bleu en D3 vert en
E3 violet


bien entendu seule la colonne des noms reste inchangée
(col A)

en fait chaque fois que l'utilisateur rentre un nom et
une donnée, la macro

doit rechercher déjà si ce nom existe auparavant, lire la
ou les données qui

y sont et ajouter la nouvelle donnée si elle n'existe pas
déjà, dans la

première colonne vide qu'elle rencontre au bout de la
ligne, ou ne pas la

prendre en compte si elle
existe auparavant, et dans ces deux cas une fois le
travail fait supprimer

cette nouvelle ligne afin qu'il n'existe pas de doublons
sur le nom, et s'il

s'agit d'une donnée nouvelle (nouveau nom) la macro ne
fait rien du tout


J'espère m'avoir fait comprendre mais vraiment je bute la
dessus et arrive à

ne plus rien y comprendre

je travaille sur une ancienne solution (environ 2ans)
plus simple que

m'avait donné Frédéric Sigonneau (que je remercie encore
et à qui je fais

chapeau bas pour son site) et qui était la suivante:

Sub Classement()

Dim NextCell As Range
Dim CurrentCell As Range
Dim B As Integer

With Worksheets(ActiveSheet.Name)
.Range("A1").Sort _
Key1:=Worksheets(ActiveSheet.Name).Range("A1")
Set CurrentCell = Worksheets(ActiveSheet.Name).Range
("A1")


Do While Not IsEmpty(CurrentCell)
Set NextCell = CurrentCell.Offset(1, 0)
If CurrentCell.Value = NextCell.Value Then
CurrentCell.Offset(, CurrentCell.End
(xlToRight).Column) = _

NextCell.Offset(0, 1)
NextCell.EntireRow.Delete
Set NextCell = CurrentCell
Else
Set CurrentCell = NextCell
If CurrentCell Is Nothing Then Exit Sub

End If
Loop
End With
MsgBox ("Voilà, c'est fait")
End Sub

merci d'avance pour votre attention et réponses

Alain ROUSSEL


.