Recherche et Remplacement d'une valeur en fonction d'autres valeurs

Bonjour à tous,

Je suis tout nouveau ici et aussi nouveau en VBA et après mes recherches j'ai l'impression de commencer avec une question complexe et j'espère que vous me direz le contraire.. ou pas :)

Je suis amené à télécharger un fichier avec plusieurs colonnes (client, commercial...) et lorsque j'ouvre ce dernier des cellules apparaissent en TBD (to be determined). Or jusqu'à présent je m'occupais de remplacer les TBD manuellement, et c'est ici que le VBA pourrait m'aider j'en suis sûr.

Mon but est donc de remplacer tous les TBD du fichier qui peuvent se retrouver à plusieurs endroits (voir exemple) et ce en fonction des autres données présentent dans ce fichier, comme par exemple pour les TBD présent dans la colonne Business Unit se remplace par le mot adéquat en fonction de la colonne Centre De Profit.

Pour la colonne commercial les TBD sont à remplacer en fonction de la colonne Id Client.

Est-ce possible sans aide d'un fichier annexe avec la liste des ID/Commercial ou encore BusinessUnit/CentreDeProfit pour ensuite intégrer des fonctions tels que rechercheX dans le code ?

Est-ce possible simplement avec des SI ? Mais cela sera lourd dans le code j'ai l'impression.

Donc il faudrait rechercher tous les TBD de la plage, il faudrait une condition sur la colonne où se trouve le TBD qui déterminera où aller chercher l'informations.. est- possible ?

Merci d'avance.

29support-macro.xlsx (49.95 Ko)

Bonjour et bienvenue

Pour être certain de comprendre, tu veux remplacer

  • le "TBD" en C14, par le "66956" qui figure juste à sa gauche
  • le "TBD" en D22, par le "480FR", deux colonnes à droite
  • et ainsi de suite

Mais quid des TBD en colonne E ? Par quoi les remplacer ? Pourrait-il y avoir d'autres colonnes concernées ? Tu as une cinquantaine de lignes dans ton exemple, mais combien de lignes/colonnes en réalité (le volume à traiter peut-il être important) ?

Bonjour U.Milité,

Non pas exactement. Mauvaise description de ma part. Je veux remplacer les TBD présent comme tu dis par exemple en c14 par le nom du commercial responsable en fonction du code présent dans la colonne B, car on sait quel commercial est responsable de quel client.

Le fonctionnement serait le même pour les autre TBD présent dans les autres colonne, la colonne D se remplirait (remplacement des TBD) par le code présent en dernière colonne, si "480FR" sur la même ligne que le TBD alors on remplace par Fruit etc... Même fonctionnement pour la search key en se basant sur le code client. En cherchant je me dis qu'une simple fonction replace ferait l'affaire mais ça m'a l'air plus complexe que cela car quand l'on arrive au fameux "replace" il dépend d'une condition. Et ce serait long et fastidieux de faire des SI vu qu'il y a beaucoup de cas possible, d'où ma question me faudrait-il un fichier annexe qui fait le lien entre client livré et commercial responsable par exemple.

Pour répondre à tes questions:

- il pourrait il y avoir d'autre colonne concerné mais je ne pense pas que cela soit un problème à l'avenir, les colonnes les plus importantes sont celles ci.

-On parlerait de fichier contenant des milliers de lignes, mais seulement des dizaines de TBD à trouver, dont je m'occupe manuellement à l'heure actuelle.

Pour info chaque ligne correspondrait à une commande en gros.

En espérant t'avoir éclairci.

Re,

S'il faut trouver des correspondances ... il faudra bien une table des correspondances quelque part !

Que tu le fasses par formules, à l'aide de PowerQuery ou par VBA, les 3 sont envisageables : avec les deux premiers, tu créeras sans doute un nouveau tableau, tandis qu'en VBA, on peut remplacer directement dans le tableau de départ. Mais dans tous les cas, il faut une liste exhaustive de "quoi doit aller où et dans quel cas"

Merci de ta réponse.

Donc dans mon cas la solution la plus approprié serait le VBA. Une rechercheV marcherait si je l'imbrique dans le replacement de la fonction replace ?

Merci de ta réponse.

Donc dans mon cas la solution la plus approprié serait le VBA. Une rechercheV marcherait si je l'imbrique dans le replacement de la fonction replace ?

Euuuuuh ... tu vas utiliser VBA pour inscrire des formules ??

Et puis, je n'ai pas dit que VBA était "le mieux" ... Tant qu'on ne sait pas clairement de quoi tu disposes, on peut difficilement recommander une solution plutôt qu'une autre ! Et une macro qui va inscrire des formules sur des milliers de lignes, non, décidément, je n'ai pas dit que c'était la solution la plus appropriée !

Quand tu parles de formule c'est en dur dans la cellule que je veux changer ? Je ne connais pas du tout PowerQuery..

Le VBA me permettrait d'automatiser ce remplacement des TBD.. de ce que j'ai compris si c'est possible de coder quelque chose comme ça.

le vrai problème das ce que je veux faire est qu'il y a une condition pour le remplacement de TBD je pense.

Sub remplace_TBD()

Dim sht As Worksheet
Dim shtCorre As Worksheet
Dim lastrow As Range

Set sht = ActiveWorkbook.Sheets(1)
Set shtCorre = GetObject("CheminApproprié")

Set lastrow = sht.Range("A" & Rows.Count).End(xlUp).Rows

For i = 1 To lastrow

sht.Range("D2:D" & i + 1).replace What:="TBD", Replacement:="Application.xlookup(sht.Range(F & i + 1).Value, shtCorre.Range("E:E"), shtCorre.Range("F:F"))", LookAt:=xlWhole

Next i

End Sub

J'ai fait un premier jet de mon code pour remplacer les TBD dans la colonne D, et ensuite je le généraliserais aux autres colonnes concernées. J'ai un fichier avec mes correspondance que je stocke dans shtCorre, que je réutilise lors de ma rechercheX. Apparemment j'ai un problème de syntaxe dans ma fonction replace si quelqu'un peut me débloquer ?

J'ai réussi à faire un code qui me remplace tous les TBD par LOL pour faire en sorte que ça marche, si quelqu'un sait comment au lieu de remplacer par lol je peux faire une rechercheV ou X sur ce que je veux ?

Sub remplace_TBD()

Dim sht As Worksheet
Dim Corre As Workbook
Dim replac As Variant
Dim shtCorre
Dim i As Integer

Set sht = ActiveWorkbook.Sheets(1)
Set Corre = Workbooks.Open("chemin approprié") 
'le chemin vers mon fichier avec les correspondances pour la rechercheV/X, pour l'instant ne sert à rien vu que je n'arrive pas à faire une rechercheV

Set shtCorre = Corre.Sheets(1)

For i = 1 To sht.Range("C" & Rows.Count).End(xlUp).Row

sht.Range("D2:D" & i + 1).Replace What:="TBD", Replacement:="LOL", Lookat:=xlWhole

Next i

End Sub

Et ensuite je pourrais généraliser à toutes les colonnes que je veux..

Je poste ma solution au cas où quelqu'un aurait un problème similaire et tomberait sur ce sujet voilà :)

Sub remplace_TBD()

Dim sht As Worksheet
Dim Corre As Workbook
Dim shtCorre As Worksheet
Dim i As Integer

Set sht = ActiveWorkbook.Sheets(1)
Set Corre = Workbooks.Open("chemin")

Set shtCorre = Corre.Sheets(1)

For i = 1 To sht.Range("C" & Rows.Count).End(xlUp).Row

sht.Range("D2:D" & i + 1).Replace What:="TBD", Replacement:=Application.WorksheetFunction.XLookup(sht.Range("F2:F" & i + 1), shtCorre.Range("E:E"), shtCorre.Range("F:F")), Lookat:=xlWhole

sht.Range("E2:E" & i + 1).Replace What:="TBD", Replacement:=Application.WorksheetFunction.XLookup(sht.Range("B2:B" & i + 1), shtCorre.Range("A:A"), shtCorre.Range("C:C")), Lookat:=xlWhole

sht.Range("C2:C" & i + 1).Replace What:="TBD", Replacement:=Application.WorksheetFunction.XLookup(sht.Range("B2:B" & i + 1), shtCorre.Range("A:A"), shtCorre.Range("B:B")), Lookat:=xlWhole

Next i

Corre.Close

End Sub
Rechercher des sujets similaires à "recherche remplacement valeur fonction valeurs"