VBA remplace caractères par formule

Résolu

Bonjour,

J'ai un petit souci sur ma VBA.

J'ai des cellules qui contiennent trop de mot. Je voudrais donc modifier la cellule avec une partie de celle-là. (propager dans toutes les cellules de la colonne).

J'ai par exemple une cellule avec VIR MARCHAND X MARCHAND VIR, je voudrais qu'elle se modifie en MARCHAND VIR avec une formule pour que chaque nom différent de MARCHAND.

J'ai le même souci avec une cellule indiquant VIREMENT POUR MARCHAND COMPTE  1233123 MARCHAND VIR, j'aimerais transformer en MARCHAND VIR

Actuellement j'ulise une fonction qui marche avec le texte, mais n'arrive pas à intégrer une formule :

Selection.Replace What:="*VIR MARCHAND*", Replacement:="VIR MARCHAND", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

Avec ce VBA ça m'oblige à créer une ligne par marchand. Ce qui n'est pas très rapide.

Pour le premier prendre à partir du X espace et l'autre entre VIREMENT POUR ET COMPTE en rajouter espace VIR après, simplifirais les choses.

Avez-vous une idée,

Merci beaucoup,

3 réponses

  1. Contributeur Ambassadeur

    bonjour,

    Dans ta description, tu expliques que tu veux obtenir "MARCHAND VIR".  Si je lis bien ta formule, cela crée "VIR MARCHAND".

    Je me trompes?

    Tes exemples et ta description ne sont pas clairs.  Donne des exemples plus complets, avec plusieurs situations.

    Que veux-tu dire par " Ce qui n'est pas très rapide."?  Tu as une liste des marchands, que tu voudrais utiliser dans une boucle?

    0
    1. par exemple jai plusieurs cellule suivantes :

      VIR MARCHAND X MARCHAND VIR

      VIR VENDEUR X VENDEUR VIR

      VIR IMPORT X IMPORT VIR

      VIR EXPORT X EXPORT VIR

      VIREMENT POUR MARCHAND COMPTE  1233123 MARCHAND VIR

      VIREMENT POUR VENDEUR COMPTE  1233123 VENDEUR VIR

      VIREMENT POUR EXPORT COMPTE  1233123 EXPORT VIR

      VIREMENT POUR IMPORT COMPTE  1233123 IMPORT VIR

      Je veux REMPLACER ces cellules par celle ci-dessous :

      MARCHAND VIR

      VENDEUR VIR

      IMPORT VIR

      EXPORT VIR

      MARCHAND VIR

      VENDEUR VIR

      EXPORT VIR

      IMPORT VIR

      Le problème, c'est que c'est une longue liste, du coup, je voudrais utiliser le principe de remplacement en ulisant une formule pour prendre seulement les caractères après le X ou la série de chiffre.

      0
      1. Contributeur Ambassadeur

        Tout ces exemples commencent et se terminent par VIR.

        Pourrait-on faire ainsi:

        • pour chaque cellule de la sélection, 
        • si les trois premiers caractères sont "VIR" et les quatre derniers sont " VIR",
        • alors on ne garde que les deux derniers mots
        0
      2. @yg_be

        Bonjour,

        oui en macro, ce serait parfait.

        Tu as une idée ?

        Merci

        0
      3. Contributeur Ambassadeur
        @caroouline

        une idée:

        Dim rg As Range, cl As Range, n As Integer
        Set rg = Selection
        For Each cl In rg
            If Left(cl, 3) = "VIR" And Right(cl, 4) = " VIR" Then
                n = InStrRev(Left(cl, Len(cl) - 4), " ")
                cl = Right(cl, Len(cl) - n)
            End If
        Next cl
        1
    2. Bonjour yg-be,

      Je te remercie, ça marche parfaitement. C'est magique!!!

      Je te souhaite une bonne journée.

      0