Remplacer un texte en fonction d'une BD

lolobala

XLDnaute Nouveau
Bonjour à tous,

Je cherche désespérément une macro qui serait capable de me convertir un texte en fonction d'une "bd".
Je m'explique dans le fichier joint :
Par exemple si C3 est égal à "SANS" le remplacer par "043010" si F3 est égal à "10BR"
ou encore si C15 = "SANS" le remplacer par "040020" si F15="IN20BR"

J'avais éssayé :

Dim nb_lignes As Integer

nb_lignes = WorksheetFunction.CountA(Range("A:A")) 'compte le nombre de ligne à analyser

For I = 2 To nb_lignes

If Cells(I, 3) = "SANS" And Cells(I, 6) = "10BR" Then
Cells(I, 3) = "'043010"
End If
If Cells(I, 3) = "SANS" And Cells(I, 6) = "IN20BR" Then
Cells(I, 3) = "'040020""
End If

ça marche mais le code est beaucoup trop long.
Ce que je voudrai c'est le résumé en utilisant une "BD".
J'ai essayé avec la fonction .find mais je n'y arrive pas.

Auriez vous une idée ?
Merci d'avance pour votre aide.
 

Pièces jointes

  • test.xlsx
    12.1 KB · Affichages: 45
  • test.xlsx
    12.1 KB · Affichages: 43
  • test.xlsx
    12.1 KB · Affichages: 40

Efgé

XLDnaute Barbatruc
Re : Remplacer un texte en fonction d'une BD

Bonjour lolobala,
Une proposition
VB:
Sub test()
Dim Rng As Range, R As Range
With Sheets("TEST")
    Set Rng = .Range(.Cells(2, 8), .Cells(Rows.Count, 3).End(xlUp).Offset(0, 5))
    Rng.FormulaLocal = "=SI(C2=""SANS"";RECHERCHEV(F2;BD!$A$2:$B$13;2;0);"""")"
    Rng.Value = Rng.Value
    Set Rng = Rng.SpecialCells(xlCellTypeConstants)
    For Each R In Rng.Areas
        R.Copy Cells(R(1, 1).Row, 3).Resize(R.Rows.Count, 1)
    Next R
    .Columns(8).ClearContents
End With
End Sub
Cordialement
 

Pièces jointes

  • test(2).xls
    44.5 KB · Affichages: 39
  • test(2).xls
    44.5 KB · Affichages: 43
  • test(2).xls
    44.5 KB · Affichages: 41

lolobala

XLDnaute Nouveau
Re : Remplacer un texte en fonction d'une BD

Bonjour Efgé et merci pour votre réponse.

Après avoir testé je me suis aperçu que le 0 de 043010 par exemple disparaissait.
Y'aurait-il un moyen de palier à ce problème ?

Aussi, pour adapter au mieux votre programme à mon cas, je souhaiterai avoir un rapide descriptif des étapes.
Etant débutant dans le VBA je suis un peu largué.

Merci pour votre aide.
 

Efgé

XLDnaute Barbatruc
Re : Remplacer un texte en fonction d'une BD

Re
J'ai commenté le code et modifié la formule pour conserver les numéros au format texte.
Cordialement
 

Pièces jointes

  • test(3).xls
    46.5 KB · Affichages: 32
  • test(3).xls
    46.5 KB · Affichages: 26
  • test(3).xls
    46.5 KB · Affichages: 30
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Remplacer un texte en fonction d'une BD

Re
Une version plus simple, plus courte et plus rapide.
Le code est commenté dans le classeur
VB:
Sub test_2()
Dim Rng As Range, R As Range
With Sheets("TEST")
    Set Rng = .Range(.Cells(2, 3), .Cells(.Rows.Count, 3).End(xlUp)).Offset(0, 5)
    With Rng
        .FormulaLocal = "=SI(C2=""SANS"";""'"" & RECHERCHEV(F2;BD!$A$2:$B$13;2;0);C2)"
        .Value = .Value
        .Copy .Parent.Range("$C$2")
        .ClearContents
    End With
End With
End Sub
Cordialement
 

Pièces jointes

  • Test_V2.xls
    46 KB · Affichages: 33
  • Test_V2.xls
    46 KB · Affichages: 33
  • Test_V2.xls
    46 KB · Affichages: 31

lolobala

XLDnaute Nouveau
Re : Remplacer un texte en fonction d'une BD

C'est pas évident mais je pense avoir compris.
Encore une petite question sur cette formule

Rng.FormulaLocal = "=SI(C2=""SANS"";""'"" & RECHERCHEV(F2;BD!$A$2:$B$13;2;0);C2)"

Peut-on écrire ?
Rng.FormulaLocal = "=SI(C2=""SANS"";""'"" & RECHERCHEV(F2;'[modifier le csv.xlsm]BD!'$A$2:$B$13;2;0);"""")"

Faisant référence à un autre classeur ?
Ou faut-il passer par workbooks ?

Merci.
 

Efgé

XLDnaute Barbatruc
Re : Remplacer un texte en fonction d'une BD

Re
D'après moi, oui, mais tu devrais essayé pour vérifier.
Comme le dit si bien Victor21 (que je salut au passage):
Le manque de curiosité est un vilain défaut :D

Regarde ma version 2 Elle est plus simple.

Cordialement
 

lolobala

XLDnaute Nouveau
Re : Remplacer un texte en fonction d'une BD

Bonjour Efgé.

Je tenais à te remercier pour ton aide précieuse.
Après avoir fait de nombreux test, j'ai pu faire ce que je désirai.
J'ai encore beaucoup de chose à apprendre.

Encore merci.
A +

Le sujet est résolu.
 

Discussions similaires

Réponses
0
Affichages
177

Statistiques des forums

Discussions
312 504
Messages
2 089 087
Membres
104 026
dernier inscrit
bernard58