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 :

[VBA] Macro search/replace + changement de référence


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Automaticien
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Par défaut [VBA] Macro search/replace + changement de référence
    Bonjour,
    J'ai besoin de réaliser un grand nombre de traduction de variables dans un fichier excel d'un quinzaine de feuilles. On trouve sur chaque feuille, d'un côté un schéma de fonctionnement comprenant les variables à traduire, et à coté la liste de variables ainsi que leur traductions. Après avoir traduit la moitié de la 1er feuille en rechercher/remplacer manuellement, je me suis dis que ça serait plus sympa et moins fastidieux avec VBA.
    Débutant avec VBA, j'avance doucement depuis 2/3 jours en corrigeant les bugs avec l'aide des forums, avant d'en découvrir d'autres 2 lignes en dessous. Résultat je ne suis plus sûr de gagner tant de temps que prévu.
    A ce stade deux solutions: soit ma macro fonctionne avant lundi, soit je réactive le mode chinois avec les rechercher/remplacer à la main..

    En résumé, j'aimerais:
    _exécuter un 1er search/replace avec la 1er ligne de mon tableau de traduction
    _une fois que la recherche est terminée, passer à la 2ème ligne, puis la 3ème...jusqu'à la dernière ligne du tableau non vide
    _passez à la feuille suivante

    Actuellement quand j'exécute, excel me renvoit une erreur "objet requis" à la ligne14. Il semble il y voir un problème de syntaxe à la ligne1

    J'ai rajouté des commentaires pour que vous puissiez suivre ce que je souhaite/espère réaliser à la ligne suivante:
    La structure peut vous paraitre illogique, c'est le fruit de plusieurs post sur différents forums en ajoutant mes bidouillages perso


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Dim Trouve As Range, PlageDeRecherche As Range
    Dim Valeur_Cherchee, Valeur_remplacement, AdresseTrouvee As String
    Dim i, w, nb_remplacement As Integer
     
    'w:nombre de cases non vides dans la colonne X (=colonne avec les mots à traduire)
    w = Application.WorksheetFunction.CountA(Feuil1.Range("X:X"))
    Set PlageDeRecherche = Sheets(1).Cells
     
    'Décalage mise en page
    For i = 7 To w + 4
        Valeur_Cherchee = Sheets(1).Cells(i, 24).Formula
        Valeur_remplacement = Sheets(1).Cells(i, 28).Formula
        Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookIn:=xlFormulas, LookAt:=xlWhole).Activate
        ActiveCell.Replace(Valeur_Cherchee, Valeur_remplacement, xlPart, xlByRows)
    'gestion erreur
            If Trouve Is Nothing Then
                msgbox (Valeur_Cherchee + " " + "introuvable")
            Else
        AdresseTrouvee = Trouve.Address
            'boucle pour prochain résultat de la recherche
            Do
                PlageDeRecherche.FindNext(After:=ActiveCell).Activate
                ActiveCell.Replace what:="Valeur_Cherchee", Replacement:="Valeur_remplacement", LookAt:=xlPart, SearchOrder:=xlByRows
                nb_remplacement = nb_remplacement + 1
            Loop While Not Trouve Is Nothing
     
            msgbox (Trouve + " " + "remplacé" + nb_remplacement + "fois")
            End If
    Next i
     
    'vidage des variables
    Set PlageDeRecherche = Nothing
    Set Trouve = Nothing
     
    End Sub
    J'espère avoir été assez clair, j'attends vos suggestions avec impatience!
    Merci pour votre aide et bonne journée

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut Macro search/replace + changement de référence
    je crois que nous ne pouvons pas charger et activer en même temps

    pour les lignes 14 & 15

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookIn:=xlFormulas, LookAt:=xlWhole).Activate
        ActiveCell.Replace(Valeur_Cherchee, Valeur_remplacement, xlPart, xlByRows)
    Je pense que ceci fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Set Trouve = PlageDeRecherche.Cells.Find(What:=Valeur_Cherchee, LookIn:=xlFormulas, LookAt:=xlWhole)
            If Trouve Is Nothing Then
                MsgBox (Valeur_Cherchee + " " + "introuvable")
            Else
        Trouve.Activate
        ActiveCell.Replace Valeur_Cherchee, Valeur_remplacement, xlPart, xlByRows
    end if
    Si tu n'a pas besoin de selectionner la cellule dans ton code

    je pense que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Set Trouve = PlageDeRecherche.Cells.Find(What:=Valeur_Cherchee, LookIn:=xlFormulas, LookAt:=xlWhole)
            If Trouve Is Nothing Then
                MsgBox (Valeur_Cherchee + " " + "introuvable")
            Else
        Trouve.Replace Valeur_Cherchee, Valeur_remplacement, xlPart, xlByRows
     
        End If

    fonctionne aussi et me semble meilleur.

    Bonne journée.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Automaticien
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Par défaut
    Merci de ta réponse a_diard!

    En effet, en retirant le .activate, je supprime des erreurs...
    L'activation de cellule me servait juste de contrôle visuel sur la feuille de calcul après l'exécution de la macro. Ca alourdit un peu le code mais c'est temporaire.

    En revanche, je bute toujours sur le .findnext et la boucle pour continuer la recherche..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'boucle while pour prochain résultat
                Do
                    Set Trouve_next = PlageDeRecherche.FindNext(Trouve)
                    Trouve_next.Replace what:="Valeur_Cherchee", Replacement:="Valeur_remplacement", LookAt:=xlPart, SearchOrder:=xlByRows
                    nb_remplacement = nb_remplacement + 1
                Loop While Not Trouve Is Nothing
    La console me retourne une erreur d'objet non défini sur la ligne 5

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    comme clairement indiqué dans l'exemple de l'aide VBA interne concernant cette méthode Find
    et aussi pourtant dans la réponse qui t'a été donnée, il faut déjà contrôler / vérifier le résultat …

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

Discussions similaires

  1. [XL-2007] Macro search/replace + changement de référence
    Par timi6315 dans le forum Excel
    Réponses: 2
    Dernier message: 24/02/2017, 16h14
  2. Réponses: 8
    Dernier message: 16/10/2006, 18h54
  3. [VBA]Macros sous BO Reporter 5.1.8
    Par dieu08 dans le forum SDK
    Réponses: 10
    Dernier message: 11/10/2006, 15h46
  4. [VBA]macro Word avec données de MySQL
    Par Taz_8626 dans le forum VBA Word
    Réponses: 3
    Dernier message: 17/07/2006, 11h39
  5. Search/Replace, avez vous plus rapide ?
    Par Bruno13 dans le forum Langage
    Réponses: 7
    Dernier message: 30/01/2006, 15h49

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