Macro Replace entre 2 fichiers excel

Macro Replace entre 2 fichiers excel - VB/VBA/VBS - Programmation

Marsh Posté le 07-02-2017 à 02:46:34    

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
Reply

Marsh Posté le 07-02-2017 à 02:46:34   

Reply

Marsh Posté le 07-02-2017 à 16:42:50    

 
             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 !
 

Reply

Marsh Posté le 07-02-2017 à 16:58:17    

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

Reply

Marsh Posté le 07-02-2017 à 18:29:43    

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

Reply

Marsh Posté le 07-02-2017 à 18:36:48    

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.

Reply

Marsh Posté le 08-02-2017 à 00:50:30    

 
            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 …
 

Reply

Marsh Posté le 09-02-2017 à 17:23:34    

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é...

Reply

Marsh Posté le 09-02-2017 à 19:58:29    

 
            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

Reply

Marsh Posté le 10-02-2017 à 01:26:27    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed