Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1214 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro Replace entre 2 fichiers excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Macro Replace entre 2 fichiers excel

n°2295921
jeanroc
Posté le 07-02-2017 à 02:46:34  profilanswer
 

Bonjour à tous
 
Je suis débutant complet en VBA et je réalise généralement des macros via l'enregistrement automatique mais j'ai un besoin urgent d'une macro que j'imaginais à la base simple mais je me suis perdu en cours de route et je ne retrouve plus le fil...
 
J'ai un fichier excel "dictionnaire" où je stocke des "mots clefs" de traduction sur 3 colonnes : Numéro d'ordre pour le classement par niveau d'importance, mot français, mot anglais.
 
Et de l'autre côté j'ai des fichiers excel avec une colonne de désignation à traduire...
 
L'objectif de la macro est de venir chercher le mot français et le mot anglais du "dico", et de remplacer le mot français par celui en anglais dans la colonne désignation du fichier de travail...
 
J'ai écrit cela à tout hasard mais je pense que je suis encore loin du compte...:
 

Code :
  1. Sub Macro11TEST()
  2. '
  3. ' Macro11TEST Macro
  4. '
  5. Windows("MOT CLEF TRADUCTION ANGLAISE.xlsx" ).Activate
  6. Sheets("Feuil5" ).Select
  7. Dim numero As Integer
  8. Dim nb_lignes As Integer
  9.     numero = 1
  10.     nb_lignes = WorksheetFunction.CountA(Range("A:A" ))
  11. While numero <= nb_lignes
  12.     Cells(numero, 1) = numero
  13.     fr = Cells(numero, 2)
  14.     en = Cells(numero, 3)
  15.    
  16.     Windows("ESSAI TRADUCTION.xlsx" ).Activate
  17.     Columns("B:B" ).Select
  18.     Selection.Replace What:="fr", Replacement:="en", LookAt:=xlPart, _
  19.         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
  20.         ReplaceFormat:=False
  21. numero = numero + 1
  22. End Sub


 
Je vous remercie par avance si vous pouvez m'aider
 
JeanRoc


Message édité par jeanroc le 07-02-2017 à 18:25:35
mood
Publicité
Posté le 07-02-2017 à 02:46:34  profilanswer
 

n°2295965
Marc L
Posté le 07-02-2017 à 16:42:50  profilanswer
 

 
             Bonjour !
 
             A tout hasard tu pourrais éditer ton post initial afin d'y baliser ton code comme expliqué dans les règles de ce forum,
             il y a même une icône dédiée dans l'éditeur !
 

n°2295968
Marc L
Posté le 07-02-2017 à 16:58:17  profilanswer
 

 
            Et dire qu'avec une simple formule de calculs un code est inutile !  :sarcastic:  
 

n°2295976
jeanroc
Posté le 07-02-2017 à 18:29:43  profilanswer
 

Marc L a écrit :

 
             Bonjour !
 
             A tout hasard tu pourrais éditer ton post initial afin d'y baliser ton code comme expliqué dans les règles de ce forum,
             il y a même une icône dédiée dans l'éditeur !
 


Bonjour
 
Désolé je ne connaissais pas... C'est chose faite

n°2295978
jeanroc
Posté le 07-02-2017 à 18:36:48  profilanswer
 

Marc L a écrit :

 
            Et dire qu'avec une simple formule de calculs un code est inutile !  :sarcastic:  
 


Cela me semblait trop compliqué pour une formule... J'ai beaucoup de fichier et l'utilisation des macros me semblait plus facile à réutiliser dans la durée... Sans compter l'intérêt de l'exercice... Bon je vais voir autrement.

n°2295989
Marc L
Posté le 08-02-2017 à 00:50:30  profilanswer
 

 
            Déjà dans ta ligne de code n°19, "fr" & "en" représentent juste du texte !
            Pour des noms de variables il faut juste retirer les guillemets.
 
            Sinon ces variables sont inutiles, à quoi bon pour ne les utiliser qu'une fois,
            autant utiliser directement les références aux cellules source …
 

n°2296125
jeanroc
Posté le 09-02-2017 à 17:23:34  profilanswer
 

Merci pour les informations et votre temps.
 
J'ai réussi à faire ce que je voulais hier surtout au niveau de la boucle et donc je vous partage le résultat qui fonctionne dans mon cas car j'aime bien avoir des posts complet avec la solution:
 

Code :
  1. Sub Macro11TEST()
  2. '
  3. ' Macro11TEST Macro
  4. '
  5. '
  6. Windows("MOT CLEF TRADUCTION ANGLAISE.xlsx" ).Activate
  7. Sheets("Feuil5" ).Select
  8. Dim numero_ligne As Integer
  9. Dim nb_lignes As Integer
  10. Dim fr As String
  11. Dim en As String
  12.     numero_ligne = Range("A1" )
  13.     nb_lignes = WorksheetFunction.CountA(Range("A:A" )) 'Fonction NBVAL
  14. While numero_ligne <= nb_lignes
  15.     fr = Workbooks("MOT CLEF TRADUCTION ANGLAISE.xlsx" ).Worksheets("Feuil5" ).Cells(numero_ligne, 2)
  16.     en = Workbooks("MOT CLEF TRADUCTION ANGLAISE.xlsx" ).Worksheets("Feuil5" ).Cells(numero_ligne, 3)
  17.     Windows("ESSAI TRADUCTION.xlsx" ).Activate
  18.     Columns("B:B" ).Select
  19.     Selection.Replace What:=fr, Replacement:=en, LookAt:=xlPart, _
  20.         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
  21.         ReplaceFormat:=False
  22. numero_ligne = numero_ligne + 1
  23. Wend
  24. End Sub


 
Je vais donc pouvoir enrichir mon dictionnaire de mot-clef à l'infini... Et aussi me lancer dans un autre programme qui aurai pour objectif de lister dans une colonne excel tous les mots uniques contenus dans un texte ou une colonne de désignation afin de pouvoir identifier très rapidement les mots à traduire en priorité...

n°2296133
Marc L
Posté le 09-02-2017 à 19:58:29  profilanswer
 

 
            Un bon code n'a pas besoin d'Activate ni de Select ni ne répète les références aux objets :
 

Code :
  1. Sub Macro1a()
  2.         Dim Rg As Range, R As Long
  3.         Set Rg = Workbooks("ESSAI TRADUCTION.xlsx" ).ActiveSheet.UsedRange.Columns(2)
  4.    With Workbooks("MOT CLEF TRADUCTION ANGLAISE.xlsx" ).Worksheets("Feuil5" )
  5.        For R = .Cells(1).Value To .Cells(1).CurrentRegion.Rows.Count
  6.            Rg.Replace .Cells(R, 2).Value, .Cells(R, 3).Value, xlPart
  7.        Next
  8.    End With
  9.         Set Rg = Nothing
  10. End Sub

n°2296155
jeanroc
Posté le 10-02-2017 à 01:26:27  profilanswer
 

Marc L a écrit :

 
            Un bon code n'a pas besoin d'Activate ni de Select ni ne répète les références aux objets :
 

Code :
  1. Sub Macro1a()
  2.         Dim Rg As Range, R As Long
  3.         Set Rg = Workbooks("ESSAI TRADUCTION.xlsx" ).ActiveSheet.UsedRange.Columns(2)
  4.    With Workbooks("MOT CLEF TRADUCTION ANGLAISE.xlsx" ).Worksheets("Feuil5" )
  5.        For R = .Cells(1).Value To .Cells(1).CurrentRegion.Rows.Count
  6.            Rg.Replace .Cells(R, 2).Value, .Cells(R, 3).Value, xlPart
  7.        Next
  8.    End With
  9.         Set Rg = Nothing
  10. End Sub



 
Testé et approuvé... C'est sûr que c'est plus propre et professionnel.
 
Merci pour votre retour


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro Replace entre 2 fichiers excel

 

Sujets relatifs
Macro qui lance application avec Utilisateur et mdp[EXCEL] Parsing .text --> Excel
VBA sur excelExcel/VBA: L'editeur supprime automatiquement mes espaces!
DOS - Déplacer fichiers contenus dans des sous dos[Aide] Requete site internet avec une textbox Excel
[RESOLU]FTP copie/deplacement de fichiersFusionner des classeurs Excel, mais pas que ...
Transfert de données Excel WEB 
Plus de sujets relatifs à : Macro Replace entre 2 fichiers excel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR