Rechercher et remplacer selon conditions
Bonjour,
Je suis débutant en VBA et je cherche à l'utiliser pour automatiser mes excels. Je recherche une fonction pouvant détecter une chaîne de caractère dans une colonne déterminé, j'ai tenté avec instr mais excel m'a renvoyé un message d'erreur.
-Dans le cadre de mon travail, je dois souvent aller mettre à jour des liaisons dans plusieurs onglets différents. Pour le faire, je regarde la date de la dernière maj de l'onglet (par ex \02 - Février\) et je la remplaçais par celle du mois en cours(par ex vers \12 - décembre\ si on est en décembre).
Cependant comme c'est assez répétitif et long, j'ai pensé à l'automatiser.
En effet, les liens que je modifie sont du type :\x....\2019\04 - Avril\... 2019 01 05 - Maj.xslsx (2019 01 05 car on revoie les projets d'avril en mai, le temps d'avoir toutes les données) et sont toujours dans la colonne G.
Par conséquent ,pour les mettre à jour, il suffit juste que je rendre le mois de la dernière Maj dans "rechercher" et que je fasse "remplacer" par le mois que je désire.
La seule chose qui change c'est donc ce que je vais mettre dans le champ "rechercher", car chaque onglet a sa propre date de Maj. Le mois vers lequel je souhaite mettre à jour est TOUJOURS le même, il est invariable.
Par exemple si la dernière maj d'avril ,je ferai:
rechercher: "\04 - Avril\" et "2019 01 05 -MAJ.xslsx"
par
remplacer tout par: \12 - Décembre`" et 2020 01 01"
Puis je refais ça pour chaque onglet, et quand il y en a 30 c'est un peu long quand même
-J'ai donc pensé à écrire un code VBA, qui suivrait 3 étapes: d'abord aller dans les onglets à modifier(étape 1), ensuite détecter dans la colonne G le dernier mois de Maj(étape 2), puis faire un rechercher et remplacer approprié(étape 3).
Comme il y a 12 mois possibles, il suffirait juste d'indiquer dans le VBA : si mois janvier détecté quoi faire, si mois février quoi faire etc, et le rechercher et remplacer se ferait automatiquement.
Pour l'instant, j'ai réussi à coder l'étape 1 et 2 (aller dans le bon onglet, faire un rechercher et remplacer), mais je bloque sur créer la fonction qui détecterait le dernier mois de MAJ, je pense que je n'utilise pas la bonne fonction.
Le début de mon code renseigne le mois vers lequel je souhaite mettre à jour et les onglets qui seront modifiés :
Sub Test_Un_réel()
Dim YYY As Variant
YYY = "2019\12 - Décembre\"
Dim ZZZ As Variant
ZZZ = "2020 01 01 - Maj.xslx"
Sheets(Array("777")).Select)
Le second cherche alors à tester si \01 -Janvier\ existe dans l'onglet G, et si oui quoi faire, si non on test février etc jusqu'à détecter le bon mois(12 cas possibles donc car il existe 12 mois).
Pour m'aider, j'ai utilisé la fonction "If Instr" qui détecte les chaînes de caractère, afin de détecter dans la colonne G quel est le dernier mois de Maj.
Par exemple, si la fonction détecte que "\11- Novembre\" est dans la colonne G, alors la dernière maj date de novembre et mon rechercher et remplacer sera du type: rechercher :" \11 - Novembre\", remplacer par `"\12 - Décembre\".
Ensuite, j'ai donc tapé les 12 cas possibles afin que le recherche et remplacer sache quoi faire pour chaque mois.
Ici, j'ai copié coller un exemple que j'ai fais sur Novembre
If InStr(1, Range("G"), "*2019\11 - Novembre\*", vbTextCompare) <> 0 Then
Columns("G").Select
Selection.Replace What:="2019`\11 - Novembre\", Replacement:="YYY", LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Selection.Replace What:="2019 01 12 - MAJ.xlsx", Replacement:="ZZZ", LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
end if
End Sub
Mais la fonction ne semble pas marcher, excel m'indique que if instr contient une erreur.
Du coup , je me demandais si j'avais fait une erreur sur la syntaxe ou s'il y avait des fonctions plus appropriées pour ce type d'opération que je pourrais étudier?