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

Doublons dans meme cellule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

chrisdu73

XLDnaute Occasionnel
bonjour a vous tous,

j'ai un petit souci pas bien grave que j'arrive pas a resoudre
en colonne A j'ai une serie de code separé par un espace.
exemple:
(250 125 488 351)
je voudrais identifier si un code est utiliser 2 fois dans la cellule
exemple:
(250 247 250 699 872) ici 250 est present 2 fois
cette recherche etant faite sur la colonne entiere

merci pour votre aide et vos astuces toujours interessantes.

Chris
 
Re : Doublons dans meme cellule

Bonjour chrisdu73, salut Papou,

Dans cette solution par fonction macro, je modifie quelque peu l'énoncé du problème.

En effet, dans le texte, il peut y avoir des codes différents qui ont des doublons, et je compte donc les codes en éliminant les doublons.

La fonction :

Code:
Function SansDoublons%(txt$)
Dim d As Object, n%, i%, s$
txt = Application.Trim(txt)
Set d = CreateObject("Scripting.Dictionary")
n = Len(txt) - Len(Replace(txt, " ", ""))
For i = 0 To n
s = Split(txt, " ")(i)
If Not d.Exists(s) Then d.Add s, s
Next
SansDoublons = d.Count
End Function

Fichier joint.

A+
 

Pièces jointes

Re : Doublons dans meme cellule

Bonjour,

Avec MFC


MFC:=estdoublon(A2)

Function EstDoublon(c)
a = Split(Application.Trim(c), " ")
Set mondico = CreateObject("Scripting.Dictionary")
For i = 0 To UBound(a): mondico.Item(a(i)) = 1: Next i
EstDoublon = mondico.Count <> (UBound(a) + 1)
End Function

JB
 

Pièces jointes

Dernière édition:
Re : Doublons dans meme cellule

Re,

(...) mon probleme est pas de savoir combien y a de doublons mais de pouvoir les enlever ou les identifier pour les enlever.

Alors voici une fonction qui enlève les doublons :

Code:
Function EnlèveDoublons$(txt$)
Dim d As Object, n%, i%, s$
txt = Application.Trim(txt)
Set d = CreateObject("Scripting.Dictionary")
n = Len(txt) - Len(Replace(txt, " ", ""))
For i = n To 0 Step -1
s = Split(txt, " ")(i)
If d.Exists(s) Then txt = Application.Substitute(txt, s, "", 2) Else d.Add s, s
Next
EnlèveDoublons = Application.Trim(txt)
End Function
A+
 

Pièces jointes

Re : Doublons dans meme cellule

merci pour tout ceux qui m'aide a resoudre mon probleme mais j'ai mal exposer mon souci.

je réexprime ma demande.

en colonne A j'ai une serie de code separé par un espace.
exemple:
(250 125 488 351)
je voudrais suppimer la cellule si 1 code est utiliser 2 fois
exemple:
(250 247 250 699 872) ici 250 est present 2 fois donc je supprime la cellule.

et si dans la colonne, la meme serie (meme dans un ordre different) est utiliser 2 fois. je supprime aussi la cellule

merci encore pour le travail

Chris
 
Re : Doublons dans meme cellule

Voir PJ
Code:
Function SansDoublon(c)
  a = Split(Application.Trim(c), " ")
  Set mondico = CreateObject("Scripting.Dictionary")
  For i = 0 To UBound(a): mondico.Item(a(i)) = 1: Next i
  SansDoublon = Join(mondico.keys, " ")
End Function

JB
 

Pièces jointes

Re : Doublons dans meme cellule

Voir PJ

Code:
Sub supDoubles()
 derLig = 11
 '-- sup des cellules contenant des doublons à l'intérieur
 For Each c In Cells(2, 1).Resize(derLig)
   If EstDoublon(c) Then c.ClearContents
 Next
 '-- suppression des doublons entre cellules dans un ordre différent
 Set mondico1 = CreateObject("Scripting.Dictionary")
 Set mondico2 = CreateObject("Scripting.Dictionary")
 For i = 2 To derLig
   If Cells(i, 1) <> "" Then
    temp = TriCell(Cells(i, 1))
    If Not mondico1.exists(temp) Then
      mondico1.Add temp, temp
      mondico2.Add Cells(i, 1), 1
    Else
      Cells(i, 1).ClearContents
    End If
   End If
 Next i
 [C2].Resize(mondico2.Count) = Application.Transpose(mondico2.keys)
End Sub

JB
 

Pièces jointes

Dernière édition:
Re : Doublons dans meme cellule

yessssssss
Merci a tous pour votre aide avec tous ces morceaux de code et d'astuces je suis arrivé à bout.

Vous êtes tous des as et d'excellent professeur en même temps.

Vive le forum ou l’on se sent moins seul au monde

Bonne soirée et surement a bientôt

Chris
 
Re : Doublons dans meme cellule

Bonjour,
Tout d'abord désolé de remonter un fil aussi ancien, mais il correspond quasi parfaitement à mon problème. En tout cas, la solution donnée ci-dessous par job75 correspond à un détail près.
J'ai également un problème de doublons d'une même cellule à supprimer, mais je voudrais supprimer TOUTES les occurrences des doublons (normalement 2).
Exemple :
Les données de la cellules d'origine sont :
14h00 15h00 15h00 16h00 18h00 19h00 19h00 20h00 20h00 21h00
Avec la fonction données par job75 j'obtiens :
14h00 15h00 16h00 18h00 19h00 20h00 21h00
Et le résultat que je souhaterais obtenir est :
14h00 16h00 18h00 21h00
Et si je voulais être très exigeant je demanderais à ce que le résultat final sorte avec :
1 cellule pour chaque groupe de 2 heures (il s'agit d'un planning)
et avec un "-" au milieu

Code:
Cellule 1             cellule 2              Cellule 3
14h00-16h00         18h00-21h00          XXhXX-XXhXX

Voilà...Si vous avez besoin d'explications supplémentaires, d'une partie du tableau ou que je refasse un nouveau fil...

Par avance, merci beaucoup à vous tous
jdsm

 
Re : Doublons dans meme cellule

Bonjour jdsm, bienvenue sur XLD,

Il s'agit bien de doublons mais ce n'est pas le même problème.

Il faut supposer en effet que les doublons de même valeur se suivent.

Cette fonction détermine les valeurs uniques, et les positionne au rang n choisi :

Code:
Function EnlèveDoublons$(txt$, n%)
Dim s, u%, i%, test1 As Boolean, test2 As Boolean
txt = Application.Trim(txt)
s = Split(txt)
u = UBound(s)
For i = 0 To u
  If i = 0 Then test1 = True Else test1 = s(i) <> s(i - 1)
  If i = u Then test2 = True Else test2 = s(i) <> s(i + 1)
  If test1 And test2 Then EnlèveDoublons = EnlèveDoublons & " " & s(i)
Next
s = Split(Trim(EnlèveDoublons))
If 2 * n - 1 > UBound(s) Then EnlèveDoublons = "": Exit Function
EnlèveDoublons = s(2 * n - 2) & "-" & s(2 * n - 1)
End Function
Fichier joint.

A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

C
Réponses
1
Affichages
2 K
claivier_58
C
C
Réponses
3
Affichages
2 K
claivier_58
C
F
Réponses
3
Affichages
1 K
T
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…