Macro de recherche et d'écriture

Florian699

XLDnaute Nouveau
Bonjour à tous,

j'ai de gros problèmes pour écrire une macro (je suis mauvais avec les macros) qui me fasse le traitement ci-dessous :

- j'ai un tableau de 2 colonnes A et B
- dans les différentes ligne de A j'ai des mots
exemple A1 : bonjour, cheval, lapin. En A2 : salut, travail, santé. etc ...

voilà ma problématique du jour : je veux rechercher des mots dans la colonne A et si ils sont présents
dans la colonne A, je vais écrire dans la colonne B.

Exemple : je recherche les mots cheval et santé dans la colonne A

En A1 le mot "cheval" est présent alors dans B1 je vais écrire le mot "animal"
En A2 le mot "santé" est présent alors dans B2 je vais écrire le mot "médecin"
Si aucun des mots n'est présent dans la colonne A alors je n'écris rien dans la colonne B

Attention !

si les mots sont tous les deux présents dans A alors il faut que dans B les deux mots soient présents

exemple : je cherche salut et travail en A
En A1 il n'y pas au moins un des deux mots donc dans B je vais rien écrire
En A2 il y a les deux mots donc dans B2 je vais écrire "politesse" "boulot"

Voilà si quelqu'un pouvait me donner un coup de main
 

Paf

XLDnaute Barbatruc
Bonjour,

un classeur exemple serait le bienvenu !

pour la partie recherche, a priori pas de souci; mais pour la partie écriture qu'est ce qui donne les termes à inscrire ?
Existe-t-il un tableau de correspondance du style
salut => politesse
travail => boulot
cheval => animal
santé => médecin
....

A+
 

Florian699

XLDnaute Nouveau
oui c'est exactement cela
en fait je fais un tableau de correspondance que je définis dans la fonction et dans lequel je donne une correspondance pour chaque mot trouvé comme tu l'a mis. Par contre ce tableau de correspondance est conséquent car il fait plus de 500 correspondance.

Et je reprécise que si plusieurs mots sont trouvés, il faut que toutes les correspondances soient mises dans la colonne B (et pas qu'une correspondance écrase l'autre)

merci pour ton aide
 

Paf

XLDnaute Barbatruc
re,

a priori:

VB:
Sub Decode()
Dim W1 As Worksheet, W2 As Worksheet, dico, i As Long, Plage As Range, Cel As Range, T1, T2

Set W1 = Worksheets("Feuil1")
Set W2 = Worksheets("Feuil2")
Set dico = CreateObject("Scripting.Dictionary")
'*** définition du dictionnaire de correspondance
T1 = W2.Range("A2:B" & W2.Range("A" & Rows.Count).End(xlUp).Row)
For i = LBound(T1) To UBound(T1)
    dico(T1(i, 1)) = T1(i, 2)
Next
'** recherche et écriture
Set Plage = W1.Range("A2:A" & W1.Range("A" & Rows.Count).End(xlUp).Row)
For Each Cel In Plage
    T2 = Split(Cel.Value, " ")
    For j = LBound(T2) To UBound(T2)
        Cel.Offset(, 1) = Cel.Offset(, 1) & " " & dico(T2(j))
    Next
Next
End Sub

dans le tableau de correspondance, en colonne A, les mots ne doivent pas avoir d'espaces ni avant ni après .

A+
 

Florian699

XLDnaute Nouveau
Merci pour ton développement qui fonctionne très très bien !!!

Par contre il y a une amélioration qui est un peu essentielle pour moi:
- dans la colonne A quand il y a plusieurs mots dans une cellule, il faut que les mots correspondants dans la colonne B soient dans le même ordre (de gauche à droite) que les mots de la colonne A.
Si on ne fait pas comme cela je vais devoir reprendre toute la colonne B et remettre les mots à la bonne place.

Tu peux essayer de voir cela stp ?

Merci d'avance
 

Florian699

XLDnaute Nouveau
Merci pour ton développement qui fonctionne très très bien !!!

Par contre il y a une petite amélioration qui est un peu essentielle pour moi:
- dans la colonne A quand il y a plusieurs mots dans une cellule, il faut que les mots correspondants dans la colonne B soient dans le même ordre (de gauche à droite) que les mots de la colonne A.
Si on ne fait pas comme cela je vais devoir reprendre toute la colonne B et remettre les mots à la bonne place.

Tu peux essayer de voir cela stp ?

Merci d'avance
 

Paf

XLDnaute Barbatruc
re,

Par contre me permets-tu de mettre ton code sur un autre forum sur lequel j'avais posé aussi la question ?

La moindre des choses quand on poste sur plusieurs forum, c'est de le signaler sur chaque site afin d'éviter de proposer des solutions similaires de chaque coté !
La preuve : la solution proposée sur EXCEL-PRATIQUE ce matin à 01h13 est sensiblement la même que la mienne proposée hier à 17h39.
S'il avait su qu'une solution était trouvée, l'intervenant ne se serait pas cassé la tête pour rien, ou aurait pu trouver une autre solution.

Plutôt que de diffuser ma proposition , sur cet autre site il vaudrait mieux coller un lien vers cette discussion.

A+
 

Discussions similaires

Réponses
2
Affichages
252
Réponses
6
Affichages
314

Statistiques des forums

Discussions
314 190
Messages
2 106 991
Membres
109 733
dernier inscrit
chardou