IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro remplacement de string avec tableau de 2 colonnes comme source [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Macro remplacement de string avec tableau de 2 colonnes comme source
    Bonjour,
    J’espère que ma question n’a pas déjà été posée, sinon je vous prie de m’en excuser .J’ai fait pas mal de recherche ici et sur Google, j’ai trouvé des questions relativement proches (mais trop différentes quand même) et je n’ai pas réussi à adapter et à faire marcher le code…

    Voilà :
    J’ai une longue colonne A dans une feuille Sheet1
    j’ai une Sheet2 qui comprend 2 colonnes assez longue également A (toFind) et b (replacementStr).

    Je voudrais simplement parcourir la colonne Sheet1.A et chercher si une chaine de la colonne Sheet2.A existe
    Si oui la remplacer par la valeur de Sheet2.B (par exemple, si la valeur est trouvée en Sheet2.A12, remplacer par Sheet2.B12)
    Sinon ne rien faire…

    Je suis assez nul en VB comme vous pouvez le constater. J'espère être assez clair dans l'énoncé de mon problème sinon n'hésitez pas

    Merci d’avance de votre aide !
    Fred

  2. #2
    Membre habitué Avatar de Klin89
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 119
    Points : 178
    Points
    178
    Par défaut
    Bonsoir Archyfred,

    J'ai considéré qu'il n'y avait pas d'en-têtes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Option Explicit
    Sub remplace()
    Dim a, b, i As Long, x
        a = Sheets("Feuil2").Range("a1").CurrentRegion.Value
        With Sheets("Feuil1").Range("a1").CurrentRegion
            b = .Value
            For i = 1 To UBound(b, 1)
                x = Application.Match(b(i, 1), Sheets("Feuil2").Columns(1), 0)
                If Not IsError(x) Then
                    b(i, 1) = a(x, 2)
                End If
            Next
            .Value = b
        End With
    End Sub
    klin89

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonsoir Klin89,

    C'est beau, ça a l'air limpide comme ça en tous cas merci pour ta réponse rapide !
    Je mets ça en pratique demain matin et je met à jour le post.

    Fred

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Par macro tu insert un rechercheV sur la novelles colonne et ensuite tu replace la valeur de la colonne considérer si le rechercheV donne un résulta et enfin tu supprime la colonne que tu viens d'ajouter.

    http://fauconnier.developpez.com/tut...el/recherchev/

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci rdurupt, c'est une mine d'information mais ça va me prendre du temps de digérer tout ça pour l'utiliser.

    Klin89, ta solution marche très bien mais c'est pour du match exact et j'ai besoin d'utiliser Replace(str, strAChercher, strRemplacement) pour un truc du genre:
    je passe la chaine "on est bien ici", je trouve "ici" en A5 de la colonne de ma feuille de mapping, je remplace par le contenu de B5 ("sur Developpez.net"), ce qui me donne "on est bien sur Developpez.net"

    j'essaye d'adapter mais
    Fred

  6. #6
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Peut-être pas très élégant mais le plus compréhensible pour moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Sub ReplaceValues()
        Dim ws1 As Worksheet
        Dim ws2 As Worksheet
        Dim rows1 As Long
        Dim rows2 As Long
     
        Dim row1 As Long
        Dim row2 As Long
     
        Set ws1 = Worksheets("Sheet1")
        Set ws2 = Worksheets("Sheet2")
     
        rows1 = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row
        rows2 = ws2.Range("A" & ws2.Rows.Count).End(xlUp).Row
     
        For row1 = 1 To rows1
            For row2 = 1 To rows2
                ws1.Cells(row1, 1).Value = Replace(ws1.Cells(row1, 1).Value, _
                                                   ws2.Cells(row2, 1).Value, _
                                                   ws2.Cells(row2, 2).Value)
            Next
        Next
    End Sub
    Merci encore pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo