Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Modification de code par macro

2 réponses
Avatar
ThierryP
Bonjour le forum,

Pour automatiser le traitement de fichiers d'inventaire, je dois les ouvrir.
Ces fichiers sont rangés par année (C:\Inventaires\2019,C:\Inventaires\2020, etc...). J'ai donc créé des constantes pour les chemins d'accès.

Avec cette procédure, je change l'année dans les constantes d'un module :
Sub MÍ J_Année()
Dim Ancien As String, Nouveau As String, Cible As String, Wbk As Workbook
Application.DisplayAlerts = False
Set Wbk = Workbooks("Thierry.xla")
Set LeModule = Wbk.VBProject.VBComponents("SAP_Inventaire")
If MsgBox("Année de référence : " & Année & vbCrLf & "Est-ce la bonne année ?", vbYesNo) = vbNo Then Année_en_Cours = InputBox("Entrez l'année :")
If Not IsNumeric(Année_en_Cours) Or Len(Année_en_Cours) <> 4 Then MsgBox "Erreur de saisie": Exit Sub
Ancien = CStr(Val(Année_en_Cours) - 1)
Nouveau = Année_en_Cours
On Error GoTo suite
For i = 1 To 6
Cible = LeModule.CodeModule.Lines(i, 1)
Cible = Replace(Cible, Ancien, Nouveau)
LeModule.CodeModule.ReplaceLine i, Cible #########
Next i
suite:
Wbk.Save
Application.DisplayAlerts = True
Call Préparation_Inventaire
End Sub

Problème : quand je passe sur la ligne #########, j'ai un message d'erreur de VBA "impossible d'entrer en mode Arrêt", ce que je comprends, puisque je modifie le code par lui-même ! J'ai tenté de mettre le code sur une feuille de mon xla, mais pareil... Le truc, c'est que les modifications sont bien effectuées si je clique sur "Continuer", mais le "On error goto" ne fonctionne pas et donc la procédure se termine.

Y a-t-il un moyen de contourner, ou faut-il absolument lancer ce code depuis un autre fichier ?

Merci d'avance,

ThierryP

2 réponses

Avatar
MichD
Le 10/12/21 Í  07:31, ThierryP a écrit :
Ces fichiers sont rangés par année (C:Inventaires2019,C:Inventaires2020, etc...)

Le nom des fichiers est : 2019.xlsm...etc
Qu'est-ce que tu veux changer exactement? le nom du fichier?
Est-ce que l'année que tu recherches et que tu veux remplacer dans le
code du module est l'année dans le mois du fichier?
Tu veux traiter tous les fichiers de ce répertoire "C:Inventaires"?
Pour cela, tu veux les ouvrir Í  tour de rÍ´le et modifier un des modules.
Comment s'appelle ce module? Est-ce le même nom pour chacun des
fichiers. Si oui, quel est-il son nom?
Tu veux remplacer cette année par quelle année exactement?
Est-ce que ce remplacement doit se faire dans tous les modules de chacun
des fichiers?
MichD
Avatar
ThierryP
Bonjour Denis,
En fait, j'ai annulé ce message, mais tu as été plus rapide que moi !!!
Mon souci était de modifier par macro des constantes (chemin d'accès aux différents fichiers) dans mon xla, et évidemment ça plante puisque le code est "en mémoire" et donc j'avais un message d'erreur.
Je m'en suis sorti en inscrivant les valeurs de ces constantes sur une feuille de mon xla, et lÍ  je peux modifier comme je veux et récupérer la bonne valeur.
Merci de ton retour, tu es toujours aussi efficace !
ThierryP