Microsoft 365 Remplacer les valeurs d'un tableau par leur correspondance dans un autre tableau

Tidjyphenom

XLDnaute Nouveau
Bonjour,

j'ai un tableau avec des identifiants utilisateurs. A droite de ce tableau j'ai un autre tableau qui permet de voir la correspondance des identifiants avec les adresses mails associés.
Je souhaite remplacer tous les identifiants de mon tableau de gauche par leur adresse email équivalente.

J'ai aussi ajouté un second cas de figure de données que je suis susceptible de rencontrer aux lignes 17, 18 et 19 du fichier joint. Dans ce cas il pourrait m'être utile de remplacer les identifiants par leur adresses email sauf que dans ce cas là le remplacement ne se fait donc pas au sein d'un tableau mais au sein d'une même cellule comportant plusieurs identifiants. Peut-être que dans ce cas là, la solution reviendrai à transformer ma celulle en tableau comme dans le 1er cas ?

Quelqu'un aurait une idée pour ces 2 options ?
 

Pièces jointes

  • user_correspondance.xlsx
    11.5 KB · Affichages: 5
Solution
Ceci est plus rapide :
VB:
Sub Remplacer()
Dim c As Range
Application.ScreenUpdating = False
On Error Resume Next 'si aucune SpecialCell
For Each c In Columns("J").SpecialCells(xlCellTypeConstants, 1)
    Range("A2:E7").Replace c, "#N/A", xlWhole
    c(1, 2).Copy Range("A2:E7").SpecialCells(xlCellTypeConstants, 16)
Next c
End Sub

job75

XLDnaute Barbatruc
Bonjour Tidjyphenom, [Edit] salut st007,

Vous pouvez utiliser une macro de ce genre :
VB:
Sub Remplacer()
Dim c As Range
For Each c In Columns("J").SpecialCells(xlCellTypeConstants, 1)
    Range("A2:E7").Replace c, c(1, 2), xlWhole
Next
End Sub
Pour les lignes 17 18 19 il vaut mieux en effet créer un tableau.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
La macro précédente ne donne pas des adresse email formatées, pour y remédier :
Code:
Sub Remplacer()
Dim c As Range, x$, cc As Range
Application.ScreenUpdating = False
For Each c In Columns("J").SpecialCells(xlCellTypeConstants, 1)
    x = CStr(c)
    For Each cc In Range("A2:E7")
        If CStr(cc) = x Then c(1, 2).Copy cc
Next cc, c
End Sub
 

job75

XLDnaute Barbatruc
Ceci est plus rapide :
VB:
Sub Remplacer()
Dim c As Range
Application.ScreenUpdating = False
On Error Resume Next 'si aucune SpecialCell
For Each c In Columns("J").SpecialCells(xlCellTypeConstants, 1)
    Range("A2:E7").Replace c, "#N/A", xlWhole
    c(1, 2).Copy Range("A2:E7").SpecialCells(xlCellTypeConstants, 16)
Next c
End Sub
 

danielco

XLDnaute Accro
Bonjour,

En A9 :
VB:
=SIERREUR(MAP(A2:E7;LAMBDA(a;RECHERCHEV(a;J2:K6;2;0)));"")
En A21, à recopier vers le bas :
Code:
=LET(plg;REDUCE("";A2:E2;LAMBDA(x;y;x&","&SIERREUR(RECHERCHEV(y;J2:K6;2;0);"")));STXT(plg;2;NBCAR(plg)-2))

Daniel
 

Pièces jointes

  • user_correspondance.xlsx
    12.9 KB · Affichages: 4

job75

XLDnaute Barbatruc
Les adresses mail en colonne K sont cliquables, en toute logique il faut qu'elles le soient partout.

Il est facile de l'obtenir avec la fonction LIEN_HYPERTEXTE, voyez le fichier joint :
Code:
=SIERREUR(LIEN_HYPERTEXTE("mailto:"&RECHERCHEV(A2;$J:$K;2;0);RECHERCHEV(A2;$J:$K;2;0));"")
 

Pièces jointes

  • user_correspondance.xlsx
    12.2 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
312 210
Messages
2 086 277
Membres
103 170
dernier inscrit
HASSEN@45