[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:
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
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:
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:
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:
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.