Remplacer une chaine de caratères à partir d'un tableau

  • Initiateur de la discussion Initiateur de la discussion Gognol77
  • Date de début Date de début

Gognol77

XLDnaute Nouveau
Bonjour à tous!
J'ai une question à soumettre à la communauté:
J'ai 2 tableaux, l'un contenant des noms et dans la cellule en face de ces noms une chaine de caractères avec à l'intérieur un code. Dans l'autre tableau, nous avons une liste de code et en face de chaque code sa transcription en un nom. Ma question est: est-il possible très simplement de remplacer les codes du premier tableau par l'équivalent nom du second tableau?
D'avance merci de m'avoir lu!!!
 

TheLio

XLDnaute Accro
Re : Remplacer une chaine de caratères à partir d'un tableau

Hello,
Si tu veux seulement récupérer la valeur numérique de ta cellule "E1" (ce qui à l'air d'être le cas,
Une formule matricielle
{=STXT(E1;MIN(SI(ESTNUM(STXT(E1;LIGNE(INDIRECT("1:"&NBCAR(E1)));1)*1)*
LIGNE(INDIRECT("1:"&NBCAR(E1)))<>0;ESTNUM(STXT(E1;LIGNE(INDIRECT("1:"&
NBCAR(E1)));1)*1)*LIGNE(INDIRECT("1:"&NBCAR(E1)))));MAX(ESTNUM(STXT(E1;
LIGNE(INDIRECT("1:"&NBCAR(E1)));1)*1)*LIGNE(INDIRECT("1:"&NBCAR(E1))))-MIN(SI(
ESTNUM(STXT(E1;LIGNE(INDIRECT("1:"&NBCAR(E1)));1)*1)*LIGNE(INDIRECT("1:"&
NBCAR(E1)))<>0;ESTNUM(STXT(E1;LIGNE(INDIRECT("1:"&NBCAR(E1)));1)*1)*LIGNE(
INDIRECT("1:"&NBCAR(E1)))))+1)}
A valider par Ctrl Maj Enter
 

vbacrumble

XLDnaute Accro
Re : Remplacer une chaine de caratères à partir d'un tableau

Bonjour


Une proposition

Code:
Option Explicit

Sub macro()
Dim TexteAremplacer$, TexteDEremplacement$
Dim C As Range, Plage As Range
TexteAremplacer = Feuil2.Range("A1")
TexteDEremplacement = Feuil2.Range("A1").Offset(, 1)
Set Plage = Feuil1.Range("E1:E" & [E65536].End(xlUp).Row)
For Each C In Plage
If Not IsEmpty(C) Then
C.Value = Replace(C.Text, TexteAremplacer, TexteDEremplacement)
End If
Next
End Sub
 

Gognol77

XLDnaute Nouveau
Re : Remplacer une chaine de caratères à partir d'un tableau

Merci pour ta réponse, ça fonctionne dans le fichier exemple, pas dans mon fichier source... 15000 lignes sur 26 colonnes pour le tableau1 et 700 lignes pour le tableau2, ça semble faire quelquechose puis ça rend la main et rien n'a changé au final. Une idée du pourquoi du comment? :confused:
 

vbacrumble

XLDnaute Accro
Re : Remplacer une chaine de caratères à partir d'un tableau

Re


Le code proposé ne s'applique qu'à la colonne E

et avec des feuilles dont le codename est Feuil1 et Feuil2.

Joins un fichier exemple ( compressé en zip ), plus proche de la réalité.

(Avec 20 lignes * 26 colonnes pour ton tableau 1 et ton tableau 2)
 

vbacrumble

XLDnaute Accro
Re : Remplacer une chaine de caratères à partir d'un tableau

Bonjour


Quelle est la logique ?

A quoi servent les valeurs en Feuil2 (A1:A336) -> 336 lignes

en Feuil1 il y a 300 lignes.


Tu veux remplacer les valeurs de la colonne E par celles de la colonne A (Feuil2)
ligne par ligne ? C'est ça ?
 

Gognol77

XLDnaute Nouveau
Re : Remplacer une chaine de caratères à partir d'un tableau

Feuil1: j'ai épuré car il y a 50 fois plus de lignes
Feuil2: il y a normalement 700 entrées

La logique: je veux remplacer dans la feuil1 tous les codes dur style 9-255 par le nom en face. c'est tout. J'avais commencer par des rechercher/remplacer mais sur 700 entrées...
 

vbacrumble

XLDnaute Accro
Re : Remplacer une chaine de caratères à partir d'un tableau

Re


Essayes déjà cette macro avec la colonne E
et essayes de modifier pour le reste

Code:
Sub test()
Dim i As Long
Dim wS As Worksheet
Dim wD As Worksheet
Application.ScreenUpdating = False
Set wS = ThisWorkbook.Sheets("Feuil2")
Set wD = ThisWorkbook.Sheets("Feuil1")
    With wD
        For i = 1 To .Range("E65536").End(xlUp).Row
        .Cells(i, "E") = _
                "snkne=" & Chr(34) & _
                 wS.Cells(i, "A").Text & Chr(34)
        Next
    End With
Application.ScreenUpdating = True
Set wS = Nothing
Set wD = Nothing
End Sub
 

vbacrumble

XLDnaute Accro
Re : Remplacer une chaine de caratères à partir d'un tableau

Re


Avec cette version ci (et si j'ai compris de quoi il s'agit), on traite
plusieurs colonnes:

Code:
Sub test2()
Dim i As Long, j As Long
Dim wS As Worksheet
Dim wD As Worksheet
Dim Prefixe, AdrCol
Prefixe = Array("uniqueid=", "srcne=", "src=", "snkne=", "snk=")
AdrCol = Array("B", "C", "D", "E", "F")
Application.ScreenUpdating = False
Set wS = ThisWorkbook.Sheets("Feuil2")
Set wD = ThisWorkbook.Sheets("Feuil1")
    With wD
        For i = 1 To .Range("E65536").End(xlUp).Row
        For j = 0 To UBound(AdrCol)
        .Cells(i, CStr(AdrCol(j))) = _
                Prefixe(j) & Chr(34) & _
                 wS.Cells(i, "A").Text & Chr(34)
            Next j
        Next i
    End With
Application.ScreenUpdating = True
Set wS = Nothing
Set wD = Nothing
End Sub
 

Discussions similaires

Réponses
6
Affichages
313