Remplacer plusieurs données d'une macro

Bonjour,

J'utilise aujourd'hui un classeur analytique contenant diverses macros que je viens mettre à jour régulièrement par des extractions système (SAP). Une des colonnes extraite me donne un code à deux caractères, chaque code correspondant à une spécialité.

Mon but original est qu'à la mise à jour de mon fichier de suivi, ces données soient remplacées par leur signification.

Pour l'instant, pour y parvenir j'ai codé une fonction Replace pour chaque valeur à remplacer :

Sub TypeSpé()
Application.ScreenUpdating = False
    Columns("J:J").Select
    Selection.Replace What:="A1", Replacement:="CHIRURGIE", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="A4", Replacement:="DENTAIRE", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="AH", Replacement:="ORL", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
...

Mon objectif a aujourd'hui évolué pour deux raisons :

  • Je ne dois pas remplacer une quinzaine de chaines (A1, A4, AH, etc...) mais environ 200 !
  • Je veux que ma "table de mapping" soit accessible depuis le classeur pour personnaliser facilement le remplacement sans passer par le code.

Je pense que la solution passe par un Array dans lequel j'impute les 200 équivalences à partir d'un tableau de mon classeur.

Puis que j'opère un Replace en jouant avec la première dimension de l'Array. Mais ça devient compliqué pour moi :S.

Une idée de code type pour ce genre de Replace ?

Merci pour votre temps !

waxscud

Bonsoir

Une solution

Ton tableau de correspondance en colonnes A:B

Sub TypeSpé()
Dim T1, I As Integer

  Application.ScreenUpdating = False
  T1 = Range("A1:B" & Range("A" & Rows.Count).End(xlUp).Row)

  With Columns("J:J")
    For I = 1 To UBound(T1)
      .Replace What:=T1(I, 1), Replacement:=T1(I, 2), LookAt:=xlPart, _
               SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
               ReplaceFormat:=False
    Next I
  End With
End Sub

Bonjour Banzai,

Encore un plaisir de voir que tu es toujours là quand il faut filer un coup de main!

Ton code était pour une fois seulement "presque" parfait

La propriété LookAt de la fonction Replace devait être fixée à xlWhole et non à xlPart.

Sans changer cela, la macro continuait de chercher dans les textes de remplacement si des codes à deux lettres apparaissaient pour à nouveau les remplacer par une équivalence etc...

Les champs se remplissaient donc sans aucune logique.

Hormis cela, tout roule !

Merci pour tout,

waxscud

Rechercher des sujets similaires à "remplacer donnees macro"