Afficher plusieurs résultats dans une même cellule

caline

XLDnaute Occasionnel
Bonjour à tous

j'aurais besoin d'un bon coup de pouce

1) dans un fichier, une cellule affiche parfois plusieurs résultats sous forme d'un code, je souhaiterais que dans une autre cellule, celle-ci affiche toutes les correspondances par rapport au code. S'il n'y a qu'un seul argument pas de soucis, mais ce n'est pas le cas s'il y en a plusieurs.
2) En fonction du résultat d'une cellule, afficher dans une autre la correspondance par rapport au code d'un autre cellule, et ne rien afficher si la cellule est vide

Merci pour votre aide
Caline
 

Pièces jointes

  • plusieurs arguments.xlsx
    33.1 KB · Affichages: 56

ROGER2327

XLDnaute Barbatruc
Re : Afficher plusieurs résultats dans une même cellule

Bonjour caline.


Une fonction personnalisée ?​
Code:
Function toto$(t)
Dim i%, x
  x = Split(t, "|")
  On Error Resume Next
  ReDim Preserve x(UBound(x) - 1)
  For i = 0 To UBound(x): x(i) = Chr(64 + x(i)): Next
  toto = Join(x, ",")
End Function
ou​
Code:
Function tata$(t)
Const eq$ = "ABCDEFGHIJK"
Dim i%, x
  x = Split(t, "|")
  On Error Resume Next
  ReDim Preserve x(UBound(x) - 1)
  For i = 0 To UBound(x): x(i) = Mid$(eq, x(i), 1): Next
  tata = Join(x, ",")
End Function
Pour la deuxième question, je n'ai pas compris.​


Bonne journée.


ℝOGER2327
#7872


Vendredi 27 Palotin 142 (Saint Foin, coryphée - fête Suprême Quarte)
27 Floréal An CCXXIII, 0,6986h - civette
2015-W20-6T01:40:36Z
 

job75

XLDnaute Barbatruc
Re : Afficher plusieurs résultats dans une même cellule

Bonjour caline, Roger,

Double-clic en F3 et G25 du fichier joint :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim source, corres, ub&, i&, t$, j&
If Target.Address = "$F$3" Then
  Cancel = True
  source = [B4:B7] 'à adapter
  corres = [C10:D20] 'à adapter
  ub = UBound(corres)
  For i = 1 To UBound(source)
    t = source(i, 1)
    For j = ub To 1 Step -1
      t = Replace(t, corres(j, 1), corres(j, 2) & ",")
    Next
    source(i, 1) = Left(t, Len(t) - 1)
  Next
  Target(2).Resize(UBound(source)) = source
ElseIf Target.Address = "$G$25" Then
  Cancel = True
  source = [A26:A29] 'à adapter
  corres = [F26:F29] 'à adapter
  For i = 1 To UBound(source)
    If source(i, 1) <> "" Then source(i, 1) = corres(i, 1)
  Next
  Target(2).Resize(UBound(source)) = source
End If
End Sub
A+
 

Pièces jointes

  • plusieurs arguments(1).xlsm
    40.4 KB · Affichages: 52

job75

XLDnaute Barbatruc
Re : Afficher plusieurs résultats dans une même cellule

Re,

Cela dit, dans la mesure où le tableau de correspondance n'est pas trop grand, on peut entrer cette formule en F4 :

Code:
=SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(B4&"|";C$20;D$20&",");C$19;D$19&",");C$18;D$18&",");C$17;D$17&",");C$16;D$16&",");C$15;D$15&",");C$14;D$14&",");C$13;D$13&",");C$12;D$12&",");C$11;D$11&",");C$10;D$10&",");",|";)
A tirer vers le bas.

En G26 la formule est évidente :

Code:
=SI(A26="";"";F26)
Fichier joint.

A+
 

Pièces jointes

  • plusieurs arguments par formules(1).xlsx
    32.9 KB · Affichages: 57

caline

XLDnaute Occasionnel
Re : Afficher plusieurs résultats dans une même cellule

Merci Roger, merci Job
c'est ce que je recherche , il me suffit de l'adapter à mon fichier (ce qui n'est pas forcément gagné..).
je reviendrais si j'ai d'autres questions

Caline
 

caline

XLDnaute Occasionnel
Re : Afficher plusieurs résultats dans une même cellule

re bonjour
j'ai adapté a mon fichier mais erreur 5

Dim source, corres, ub&, i&, t$, j&
If Target.Address = "$BF$3" Then
Cancel = True
source = [X4:X3500] 'adapter
corres = [A4500:B4515] adapter
ub = UBound(corres)
For i = 1 To UBound(source)
t = source(i, 1)
For j = ub To 1 Step -1
t = Replace(t, corres(j, 1), corres(j, 2) & ",")
Next

que veux dire ceci
-> source(i, 1) = Left(t, Len(t) - 1)

Merci
 

job75

XLDnaute Barbatruc
Re : Afficher plusieurs résultats dans une même cellule

Bonjour caline, JM, le forum,

que veux dire ceci
-> source(i, 1) = Left(t, Len(t) - 1)

Cette expression supprime le dernier caractère (la virgule) du texte t et place le résultat dans l'item i du tableau source.

Si l'on veut que le séparateur soit la virgule suivie d'un espace on écrira :

Code:
'-----
  For i = 1 To UBound(source)
    t = source(i, 1)
    For j = ub To 1 Step -1
      t = Replace(t, corres(j, 1), corres(j, 2) & ", ")
    Next
    source(i, 1) = Left(t, Len(t) - 2)
  Next
Bonne journée.
 

job75

XLDnaute Barbatruc
Re : Afficher plusieurs résultats dans une même cellule

Re,

La solution du post #3 nécessite que le tableau de correspondance soit classé numériquement.

Si ce n'est pas toujours le cas il faut faire un tri préalable :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim source, Pcorres As Range, corres, ub&, i&, t$, j&
If Target.Address = "$F$3" Then
  Cancel = True
  source = [B4:B7] 'à adapter
  Set Pcorres = [C10:D20] 'à adapter
  '---tri numerique de la plage Pcorres---
  Pcorres.Columns(1).Replace "|", "", xlPart
  Pcorres.Sort Pcorres(1), xlAscending, Header:=xlNo
  corres = Pcorres
  ub = UBound(corres)
  For i = 1 To UBound(corres)
    corres(i, 1) = corres(i, 1) & "|"
  Next
  Pcorres = corres
  '---remplacements---
  For i = 1 To UBound(source)
    t = source(i, 1)
    For j = ub To 1 Step -1
      t = Replace(t, corres(j, 1), corres(j, 2) & ",")
    Next
    source(i, 1) = Left(t, Len(t) - 1)
  Next
  '---restitution du résultat---
  Target(2).Resize(UBound(source)) = source
ElseIf Target.Address = "$G$25" Then
  Cancel = True
  source = [A26:A29] 'à adapter
  corres = [F26:F29] 'à adapter
  For i = 1 To UBound(source)
    If source(i, 1) <> "" Then source(i, 1) = corres(i, 1)
  Next
  Target(2).Resize(UBound(source)) = source
End If
End Sub
Fichier (2).

A+
 

Pièces jointes

  • plusieurs arguments(2).xlsm
    40.8 KB · Affichages: 42

job75

XLDnaute Barbatruc
Re : Afficher plusieurs résultats dans une même cellule

Re,

Mieux, on peut ne pas toucher au tableau de correspondance tout en effectuant un tri grâce à la macro Quick sort (après l'avoir adaptée au tri numérique sur 2 colonnes) :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim source, corres, ub&, i&, t$, j&
If Target.Address = "$F$3" Then
  Cancel = True
  source = [B4:B7] 'à adapter
  corres = [C10:D20] 'à adapter
  ub = UBound(corres)
  tri corres, 1, ub 'tri numérique croissant
  For i = 1 To UBound(source)
    t = source(i, 1)
    For j = ub To 1 Step -1
      t = Replace(t, corres(j, 1), corres(j, 2) & ",")
    Next
    source(i, 1) = Left(t, Len(t) - 1)
  Next
  Target(2).Resize(UBound(source)) = source
ElseIf Target.Address = "$G$25" Then
  Cancel = True
  source = [A26:A29] 'à adapter
  corres = [F26:F29] 'à adapter
  For i = 1 To UBound(source)
    If source(i, 1) <> "" Then source(i, 1) = corres(i, 1)
  Next
  Target(2).Resize(UBound(source)) = source
End If
End Sub

Sub tri(a, gauc, droi)       ' Quick sort (adaptée au tri numérique sur 2 colonnes)
Dim ref, g, d, temp
ref = Val(a((gauc + droi) \ 2, 1))
g = gauc: d = droi
Do
    Do While Val(a(g, 1)) < ref: g = g + 1: Loop
    Do While ref < Val(a(d, 1)): d = d - 1: Loop
    If g <= d Then
      temp = a(g, 1): a(g, 1) = a(d, 1): a(d, 1) = temp
      temp = a(g, 2): a(g, 2) = a(d, 2): a(d, 2) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
Fichier (3).

A+
 

Pièces jointes

  • plusieurs arguments(3).xlsm
    41 KB · Affichages: 44

Discussions similaires

Statistiques des forums

Discussions
312 233
Messages
2 086 465
Membres
103 224
dernier inscrit
VieuxSeb