D'accord! Mais les macros sont tellement simples que je crois que les transcrire ici sera aussi utile. Mais je dois vous expliquer un peu plus en détails.
Le premier fichier est un registre. Voilà ce qu'il contient:
Sub Aut
pen()
If Dir("P:\play\prog\regmaj_on.ini") = "" Then Exit Sub
Application.Run "'P:\play\prog\MAJ.xlsm'!maj"
End Sub
Vous voyez que cette macro s'active automatiquement et ne s’exécute que si un fichier existe. Ce fichier sert d'interrupteur et est mis en place par un programme batch, lequel ouvre les différents registres un par un. Le but est de mettre à jour leur structure, par exemple en ajoutant ou en modifiant des colonnes. Cette macro, intégrée d'origine dans tous les registres, lance une macro créée ultérieurement et contenue dans un autre fichier.
Voici maintenant ce que contient la macro de mise à jour:
Sub maj()
On Error Resume Next
If Not (Range("P4") Like "*Version 0.3*") Then Application.Quit
'================================
'modifications
Range("M6:M10").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 49407
.TintAndShade = 0
.PatternTintAndShade = 0
End With
'================================
ActiveWorkbook.Save
Application.Quit
End Sub
Les modifications de la structure du fichier sont entre les lignes. Les modifications écrites ici n'ont aucun sens et servent seulement pour mes tests. Dans le futur, c'est entre ces lignes que je transcrirais une macro selon mes besoins.
La fonction qui était problématique sert à vérifier la version du fichier de registre afin que les modifications ne soient pas appliquées par erreur à un registre pour lequel elles ne sont pas conçues. Et ce numéro est justement écrit dans la cellule P4.
Finalement, le fichier est sauvegardé et l'application est fermée, ce qui permet au programme batch de continuer son exécution et d'ouvrir le prochain fichier excel.