Besoin de votre avis sur la conception d'un outil

GeoTrouvePas

XLDnaute Impliqué
Re : Besoin de votre avis sur la conception d'un outil

Bonjour tout le monde,

Etant relativement tenace quand j'ai une idée derrière la tête, j'ai continué sur mon idée de départ qui consistait à faire un classeur capable de mettre à jour tous ses modules, userform et modules de classe en important ceux contenus dans un nouveau classeur.

Je peux vous dire qu'après moult test et prises de tête, j'y suis enfin arrivé. Mais je dois dire que le résultat n'est pas aussi satisfaisant que ce que j'attendais. Il semble en effet que la présence de variables publiques dans certains modules puissent poser problèmes. De plus, ce mode de fonctionnement posera problème pour mettre à jour la procédure de mise à jour elle même.

Je vais donc me pencher sur la solution de Cafeine proposée par Staple qui consiste "simplement" à enregistrer la macro complémentaire sous un autre nom, la décocher de la liste des macros complémentaires puis rajouter la nouvelle version à cette liste.

Pour que ce boulot n'ait pas servi à rien, voici 3 procédures que j'ai adaptées depuis les sources de Ce site n'existe plus à cette occasion et qui pourront peut être vous servir un jour :

Supprimer tous les modules, userform et modules de classe de ThisWorkBook :
Code:
Sub SupprimerModules()
    Dim ObjectToKill As Object
    For Each ObjectToKill In ThisWorkbook.VBProject.VBComponents
        If ObjectToKill.Type <> 100 Then
            ThisWorkbook.VBProject.VBComponents.Remove ObjectToKill
        End If
    Next
End Sub

Exporter tous les modules, userform et modules de classe d'un classeur (désigné par l'argument "Chemin") vers un répertoire (désigné par l'argument "Temp") :
Code:
Sub ExporterModules(ByVal Chemin As String, ByVal Rep_Temp As String)
    Dim BookToExport As Workbook
    Dim ObjectToExport As Object
    Application.EnableEvents = False
    Set BookToExport = Workbooks.Open(Chemin)
    Application.EnableEvents = True
    For Each ObjectToExport In BookToExport.VBProject.VBComponents
        Select Case ObjectToExport.Type
        Case 1
            ObjectToExport.Export Rep_Temp & ObjectToExport.Name & ".bas"
        Case 2
            ObjectToExport.Export Rep_Temp & ObjectToExport.Name & ".cls"
        Case 3
            ObjectToExport.Export Rep_Temp & ObjectToExport.Name & ".frm"
        End Select
    Next
    BookToExport.Close
End Sub


Importer dans ThisWorkbook tous les modules, userform et modules contenus dans un répertoire (désigné par l'argument "Rep_Source") :
Code:
Sub ImporterModules(ByRef Rep_Source)
    Dim ObjectToImport As String
    ObjectToImport = Dir(Rep_Source & "\*.*")
    Do While ObjectToImport <> ""
        Application.VBE.ActiveVBProject.VBComponents.Import (Rep_Source & ObjectToImport)
        ObjectToImport = Dir
    Loop
End Sub


Je vous remercie tous de m'avoir fait part de vos interrogations, de vos doutes, de vos suggestions et de vos idées au cours de ce fil !
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Besoin de votre avis sur la conception d'un outil

Bonjour à tous ;),

Merci pour tes codes, c'est toujours intéressant :).
Pour ma part je resterais tout de même sur une version plus "bourrin" à savoir : si une mise à jour est nécessaire (test de version par exemple, à toi de voir où stocker cette version) on copie la version du réseau et on écrase celle en local (remplacement simple de fichier). Comme préconisé par Staple ça nécessitera peut-être de désactiver la macro complémentaire sur les postes, même si quand les utilisateurs pointent sur une version réseau j'arrive manuellement à la remplacer même si elle est chargée sur leur poste, pas testé en local ce que ça donne...
 
Dernière édition:

GeoTrouvePas

XLDnaute Impliqué
Re : Besoin de votre avis sur la conception d'un outil

Bonjour Tototiti,

C'est grosso modo ce que propose Cafeine dans sa solution :
- tu installes la macro complémentaire (en autorisant la copie en local histoire de pouvoir fonctionner hors réseau)
- tu fais la mise en à jour avec :
Sauvegarde de la macro complémentaire V1 sous un autre nom :
Code:
ThisWorkbook.SaveAs Left(ad.FullName, Len(ad.FullName) - 4) & "(old).xla"
Copie de la macro complémentaire V2 à la place de la V1 :
Code:
FileCopy "\\LecteurReseau\...\Divers\MyAddin.xla", ad.FullName

Je constate au passage que ça ne nécessite même pas de cocher / décocher quoi que ce soit dans la liste des macros complémentaires. Il suffit de redémarrer Excel pour que la mise à jour soit prise en compte.

Sauf si j'ai mal compris ton message, il me semble que ça correspond à ce que tu décris non ? (qui soit dit en passant n'est pas si bourrin que ça :D)
 

GeoTrouvePas

XLDnaute Impliqué
Re : Besoin de votre avis sur la conception d'un outil

Alors on s'est bien compris :D
Au passage, je m'en veux de pas avoir pensé à une solution aussi simple dès le départ.

Il me reste plus qu'à trouver la façon de procéder pour la mise à jour.
Je pense que je vais éviter de passer par un fichier .ini ou de fonctionner par rapport aux dates de modification du fichier. J'ai peur que ces méthodes me jouent des tours si jamais je veux faire revenir les utilisateurs sur une version antérieur ou autre cas similaire.
Je crois plutôt que je vais stocker le numéro de version dans une Constante de type String (genre Num_Version = "Boite à outils V2.xls") et que je vais définir un répertoire où stocker les mise à jour.
Si le fichier présent dans ce répertoire ne correspond pas à Num_Version alors je lance la mise à jour. Sinon, je sors.
 

Staple1600

XLDnaute Barbatruc
Re : Besoin de votre avis sur la conception d'un outil

Bonsoir à tous

Je rejoins tototiti2008.

En effet, si tu dois mettre ton fichier à jour, autant être radical, et remplacer (en écrasant donc) l'ancienne version par la nouvelle.
Et là un simple script vbs transparent pour l'utilisateur suffit... sauf que je ne sais pas ce qui se passe si l'ancien fichier est ouvert quand tu veux faire la mise à jour.

Dans ce cas, je suppose qu'il faut fermer le *.xla et Excel sur le poste distant, et donc former la fermeture avec sauvegarde des classeurs actifs.
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 136
Membres
112 667
dernier inscrit
foyoman