XL 2010 Extraire un type de donnée par cellule

saggigo

XLDnaute Occasionnel
Bonjour à tous,
J'espère que vous allez bien.
voilà, j'ai un tableau de deux colonnes(A,B), et dans la deuxième (B) colonne j'ai plusieurs doublons au format texte, j'aimerais extraire dans une cellule vide tous les noms qui sont dans la B, séparés par un ";"

Je vous remercie pour votre aide. faite moi signe si vous avez besoin de plus d'infos
 

saggigo

XLDnaute Occasionnel
Bonjour Victor,
Je n'ai pas trouvé comment faire, j'ai suivi les étapes mais il ne s'est rien passé. aussi j'ai trouvé cette macro, mais elle ne me dit pas comment faire pour séparer les données par des ";"


Public Function concaSD(cellules As Range) As String
Dim c As Range
Dim data As New Collection
Dim el
Dim t As String

On Error Resume Next
For Each c In cellules
data.Add c, CStr(c)
Next c
On Error GoTo 0

For Each el In data
t = t & el
Next el

concaSD = t

End Function

Peux-tu m'aider s'il te plait?
 

Victor21

XLDnaute Barbatruc
Re,

Reprenons par le début, car je ne suis pas sûr d'avoir compris votre problème :
Joignez un court fichier Excel représentatif, sans données confidentielles, avec un exemple : données de base, résultat attendu et les explications nécessaires.
 

Jacky67

XLDnaute Barbatruc
Bonjour,
Essaye comme ceci:
VB:
Function Extrait(Plage As Range)
Dim c As Range, x As String
For Each c In Plage
  On Error Resume Next
    If Not x Like "*" & c & "*" Then
      x = x & c.Value & ";"
    End If
Next
x = Left(x, Len(x) - 1)
Extrait = x
End Function
**Modidifié
 

Pièces jointes

  • Liste sans doublonV1.xlsm
    22.9 KB · Affichages: 16
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

Sur la base du fichier exemple, une autre méthode
VB:
Sub a()
Dim CONCAT, p As Range
Application.ScreenUpdating = False
Columns(1).SpecialCells(xlCellTypeConstants, 2).Copy Range("B2")
Columns(2).RemoveDuplicates Columns:=1, Header:=xlNo
Set p = Columns(2).SpecialCells(xlCellTypeConstants, 2)
p.Sort [B2], Order1:=xlAscending, Header:=xlNo
CONCAT = Join(Application.Transpose(p.Value), ";")
p.ClearContents
MsgBox CONCAT
End Sub
 

Jacky67

XLDnaute Barbatruc
@Jacky67 ;),

Attention à l'utilisation du LIKE ! (ça m'est déjà arrivé :eek:)

Si on a les données ci-dessous en A2:A6, ta macro ne ressort que deux termes car avec le "LIKE", le terme test est inclus dans tester, tout comme les deux termes bonne et nuit sont chacun inclus dans bonne nuit.
Code:
tester
test
bonne nuit
bonne
nuit
Hello mapomme
Oui, tu as tout à fait raison , je n'ai pas fait assez attention. :mad:
Saggigo a trouver son bonheur à travers Staple 1600 et ... attribué à Vitor21 :eek:
 

saggigo

XLDnaute Occasionnel
Ahhhh je m'excuse Jacky67, c'est la tienne bien sur que j'ai essayé. merciiiii beaucoup Jacky.

Staple1600, je n'ai pas essayé ta macro car j'aurais préférer avoir une fonction. pourrais-tu s'il te plait en faire une fonction?

Et je suis sincèrement désolé pour l'erreur d'attribution des fleurs :),
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re à tous,

et à @Victor21 ;) dont le code aura été d'une concision extrême ! :D

@Jacky67 et @saggigo :

J'ai modifié à minima le code de la fonction de jacky67 pour tenir compte de ma précédente remarque :
VB:
Option Explicit
Option Compare Text

Function Extrait(Plage As Range) As String
Dim c As Range, x As String
   x = ";"
   For Each c In Plage
      If Len(c) > 0 Then If InStr(x, ";" & c & ";") = 0 Then x = x & c.Value & ";"
   Next
   If Right(x, 1) = ";" Then x = Left(x, Len(x) - 1)
   If Left(x, 1) = ";" Then x = Mid(x, 2)
   Extrait = x
End Function

La fonction ne prend en compte ni les cellules vides ni la casse (via l'option au niveau module "Option Compare Text")
 

Pièces jointes

  • saggigo- jacky67- Liste sans doublon-v1.xlsm
    16.3 KB · Affichages: 16
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 184
Messages
2 086 006
Membres
103 088
dernier inscrit
Psodam