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

Détruire programme xla

5 réponses
Avatar
M41
Bonjour

Comment concevoir un programme en VBA qui supprime un tableur xla précis de
la base de registre (puisqu'il semble que celà ne peut pas se faire
simplement ou sans ouvrir Regedit manuellement) ?

Cordialement

M41

5 réponses

Avatar
Frédéric Sigonneau
Lorsqu'Excel est ouvert, tu peux désinstaller en VBA une macro complémentaire
avec une instruction comme :

Application.Addins("TitreDeLaMacroXLA").Installedúlse

mais la base de registre n'est mise à jour (suppression de la clé OPEN de la
macro complémentaire) qu'à la fermeture d'Excel. (Ce qui n'est pas vraiment un
problème AMA puisque la macro est désinstallée de toute façon).

Pour intervenir directement dans la base de registre, Excel doit être fermé. Tu
peux essayer du VBA dans Word ou autre, ou un .vbs, mais ce n'est plus tout à
fait ta question (telle que je l'ai comprise du moins).

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Bonjour

Comment concevoir un programme en VBA qui supprime un tableur xla précis de
la base de registre (puisqu'il semble que celà ne peut pas se faire
simplement ou sans ouvrir Regedit manuellement) ?

Cordialement

M41




Avatar
M41
Bonjour et merci

En fait mon objectif est de remplacer un tableur1. xla contenant des macros
par un autre tableur2.xla contenant une version évoluée des macros du 1er,
macros ayant les mêmes noms.

Celà signifit il que, vue la réponse, il me faudra créer un tableur2.xls qui
à l'ouverture (programme dans thisworkbook) et après une question
OK/Annuler:
1- désactivera toutes les macros xla du tableur1.xla
2- détruira le fichier tableur1.xla
3- s'auto sauvergardera en tableur2.xla
4- auto réactivera toutes ses macros, avec de nouvelles éventuellement
5- fermera Excel

Il faudra sans doute qu'entre les phases 3 et 4, le tableur2.xls devenu xla
ferme tout seul Excel et qu'on ne passe qu'à la phase 4 en seconde ouverture
de la version xls (moyennant une macro xla de nom constant il pourrait
détecter la version maintenant en place).
C'est possible ?
N'y aurait il pas plus simple ?

Ma question me semble une question très générique par rapport à la
maintenance des xla....

Cordialement

M41




"Frédéric Sigonneau" a écrit dans le message de news:

Lorsqu'Excel est ouvert, tu peux désinstaller en VBA une macro
complémentaire avec une instruction comme :

Application.Addins("TitreDeLaMacroXLA").Installedúlse

mais la base de registre n'est mise à jour (suppression de la clé OPEN de
la macro complémentaire) qu'à la fermeture d'Excel. (Ce qui n'est pas
vraiment un problème AMA puisque la macro est désinstallée de toute
façon).

Pour intervenir directement dans la base de registre, Excel doit être
fermé. Tu peux essayer du VBA dans Word ou autre, ou un .vbs, mais ce
n'est plus tout à fait ta question (telle que je l'ai comprise du moins).

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Bonjour

Comment concevoir un programme en VBA qui supprime un tableur xla précis
de la base de registre (puisqu'il semble que celà ne peut pas se faire
simplement ou sans ouvrir Regedit manuellement) ?

Cordialement

M41





Avatar
MichDenis
' La déclaration au début d'un module standard
Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" ( _
ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long


Tu peux faire tout ce qui suit en conservant Excel ouvert.
Attention, tu dois t'assurer que ton fichier n'est pas utilisé
comme références par un usager.

'--------------------------------------------
Sub test()

'Enlève la référence au classeur ou Workbook("nomduClasseur")
With ThisWorkbook.VBProject.References
'Denis n'est pas le nom du classeur mais de la bibliothèque
.Remove .Item("denis")
End With

'Ferme le classeur contenant les macros complémentaires
'Workbooks("tttttttttt.xla").Close False

'Tu écrases ton fichier de macro complémentaire par 'le récent
'Chemin nouveau fichier macro complémentaire (même nom)
x = "c:AAA tttttttttt.xla"
'Où est l'actuel fichier de mes macros complémentaires
y = "C:Documents and SettingsDenisApplication DataMicrosoftMacros
complémentairestttttttttt.xla"

If CopyFile(x, y, False) = False Then
MsgBox "Problème Copie"
End If

'Ajoute à nouveau la référence du classseur (macro complémentaire)
With ThisWorkbook.VBProject.References ou Workbook("nomduClasseur")
.AddFromFile y
End With

End Sub
'--------------------------------------------





"M41" a écrit dans le message de news:
481c6f37$0$869$
Bonjour et merci

En fait mon objectif est de remplacer un tableur1. xla contenant des macros
par un autre tableur2.xla contenant une version évoluée des macros du 1er,
macros ayant les mêmes noms.

Celà signifit il que, vue la réponse, il me faudra créer un tableur2.xls qui
à l'ouverture (programme dans thisworkbook) et après une question
OK/Annuler:
1- désactivera toutes les macros xla du tableur1.xla
2- détruira le fichier tableur1.xla
3- s'auto sauvergardera en tableur2.xla
4- auto réactivera toutes ses macros, avec de nouvelles éventuellement
5- fermera Excel

Il faudra sans doute qu'entre les phases 3 et 4, le tableur2.xls devenu xla
ferme tout seul Excel et qu'on ne passe qu'à la phase 4 en seconde ouverture
de la version xls (moyennant une macro xla de nom constant il pourrait
détecter la version maintenant en place).
C'est possible ?
N'y aurait il pas plus simple ?

Ma question me semble une question très générique par rapport à la
maintenance des xla....

Cordialement

M41




"Frédéric Sigonneau" a écrit dans le message de news:

Lorsqu'Excel est ouvert, tu peux désinstaller en VBA une macro
complémentaire avec une instruction comme :

Application.Addins("TitreDeLaMacroXLA").Installedúlse

mais la base de registre n'est mise à jour (suppression de la clé OPEN de
la macro complémentaire) qu'à la fermeture d'Excel. (Ce qui n'est pas
vraiment un problème AMA puisque la macro est désinstallée de toute
façon).

Pour intervenir directement dans la base de registre, Excel doit être
fermé. Tu peux essayer du VBA dans Word ou autre, ou un .vbs, mais ce
n'est plus tout à fait ta question (telle que je l'ai comprise du moins).

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Bonjour

Comment concevoir un programme en VBA qui supprime un tableur xla précis
de la base de registre (puisqu'il semble que celà ne peut pas se faire
simplement ou sans ouvrir Regedit manuellement) ?

Cordialement

M41





Avatar
Frédéric Sigonneau
Tu n'as pas à passer par un classeur Excel et tu n'as même pas besoin de changer
le nom de ta macro complémentaire. Je fais ça depuis des années avec une xla qui
évolue régulièrement et qui porte le même nom depuis presque 10 ans !
Le principe est de désinstaller la 1ère version, de détruire son fichier xla
puis de réinstaller la 2ème version.
Ce qui donne ce genre de code générique :

'======================== Sub ChangeVersionXla()
Dim AncienTitreXla, NouveauTitreXla
Dim CheminVersionInstallée, CheminNouvelleVersion

AncienTitreXla = "MonTitre1"
NouveauTitreXla = "MonTitre2"

'1- supprimer la version précédente
'on récupère l'emplacement de l'ancienne version (si besoin)
CheminVersionInstallée = Application.AddIns(AncienTitreXla).FullName
'désinstallation
Application.AddIns(AncienTitreXla).Installed = False
'suppression du fichier .xla
Kill CheminVersionInstallée

'2- installation de la nouvelle version
CheminNouvelleVersion = "Lecteur:DossierSousDossierEtcFichier.xla"
'introduction de la nouvelle xla dans la liste
'des macros complémentaires d'Excel
Workbooks.Open CheminNouvelleVersion
'installation
ThisWorkbook.Activate 'l'ouverture de la xla lui a transmis le focus
'qu'il faut récupérer
Application.AddIns.Add(CheminNouvelleVersion).Installed = True
'vérification de la réussite de l'opération
If Application.AddIns(NouveauTitreXla).Installed = True Then
MsgBox "OK"
Else
MsgBox "Problème"
End If
End Sub
'========================
FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Bonjour et merci

En fait mon objectif est de remplacer un tableur1. xla contenant des macros
par un autre tableur2.xla contenant une version évoluée des macros du 1er,
macros ayant les mêmes noms.

Celà signifit il que, vue la réponse, il me faudra créer un tableur2.xls qui
à l'ouverture (programme dans thisworkbook) et après une question
OK/Annuler:
1- désactivera toutes les macros xla du tableur1.xla
2- détruira le fichier tableur1.xla
3- s'auto sauvergardera en tableur2.xla
4- auto réactivera toutes ses macros, avec de nouvelles éventuellement
5- fermera Excel

Il faudra sans doute qu'entre les phases 3 et 4, le tableur2.xls devenu xla
ferme tout seul Excel et qu'on ne passe qu'à la phase 4 en seconde ouverture
de la version xls (moyennant une macro xla de nom constant il pourrait
détecter la version maintenant en place).
C'est possible ?
N'y aurait il pas plus simple ?

Ma question me semble une question très générique par rapport à la
maintenance des xla....

Cordialement

M41




"Frédéric Sigonneau" a écrit dans le message de news:

Lorsqu'Excel est ouvert, tu peux désinstaller en VBA une macro
complémentaire avec une instruction comme :

Application.Addins("TitreDeLaMacroXLA").Installedúlse

mais la base de registre n'est mise à jour (suppression de la clé OPEN de
la macro complémentaire) qu'à la fermeture d'Excel. (Ce qui n'est pas
vraiment un problème AMA puisque la macro est désinstallée de toute
façon).

Pour intervenir directement dans la base de registre, Excel doit être
fermé. Tu peux essayer du VBA dans Word ou autre, ou un .vbs, mais ce
n'est plus tout à fait ta question (telle que je l'ai comprise du moins).

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Bonjour

Comment concevoir un programme en VBA qui supprime un tableur xla précis
de la base de registre (puisqu'il semble que celà ne peut pas se faire
simplement ou sans ouvrir Regedit manuellement) ?

Cordialement

M41








Avatar
M41
Bon ba maintenant il n'y a plus qu'à étudier tout çà. Merci

M41

"M41" a écrit dans le message de news:
481b266b$0$894$
Bonjour

Comment concevoir un programme en VBA qui supprime un tableur xla précis
de la base de registre (puisqu'il semble que celà ne peut pas se faire
simplement ou sans ouvrir Regedit manuellement) ?

Cordialement

M41