J'ai créé un modèle dans lequel, il y a une action d'importation via l'activation d'un bouton qui fait appel à une macro d'importation. L'utilisateur fait appel au modèle via l'option Nouveau/Selection du modèle. Il active l'importation et enregistre le classeur (xlsm).
Ma question est la suivante, comment puis-je interdire une nouvelle importation à partir du classeur ainsi enregistré ?
Je n'ai pas d'idées sur les moyens ou le test à faire via Vba pour réaliser cela.
Le classeur enregistré est propre à chaque utilisateur. Ce dernier peut y faire des modifications, mais pas de nouvelle importation (au moins le prévenir que s'il fait une nouvelle importation, il risque de perdre ses modifications et saisies). Car l'importation initialise tous le classeur.
L'idée que j'ai en tête est de mettre dans le classeur, un indicateur dans une cellule protegée (avec un format invisible) et de tester cet indicateur à l'appel de l'importation. Mais cela me parait 'bidouillage' et avec le risque que l'utilisateur bousille l'indicateur.
Cordialement et à te lire de nouveau
Ré-édition : Comme quoi en écrivant on arrive à des solutions possibles
La solution que je vais, probablement mettre en place serait la suivante : Renommer le fichier source de l'importation (en modifiant son extension) ainsi si le nom avec le nouvelle extension existe, c'est que l'importation est déjà faite. Si non on importe les data du fichier, bien sur s'il existe.
Si je comprends bien, le nouveau classeur est créé en faisant une copie et donc avec le code du modèle.
Pourquoi ne pas essayer d'inclure une instruction d'effacement (kill je crois) du code en fin d'importation dans le nouveau fichier.
Cà posera peut être des problèmes avec la politique de sécurité de ton ordi. J'ai eu le cas il y a quelques années.
Sinon, supprime le bouton d'envoi de la macro sur le nouveau fichier.
Oui c'est envisageable. Dans ce cas, si utilisateur veux restaurer les données initiales, il doit repartir du modèle, pourquoi pas. Toutefois, l'importation n'est qu'une partie de la fonction du ce modèle (il Contient d'autres fonctionnalités comme l'exportation après validation, la génération de synthèses en TCD, de la saisie et des calculs via du Vba).
Bonjour Zdz16, Abel, Salut Job
Une idée :
Créer un nom caché, invidsible das le gestionnaire de nom ce qui évitera que l'utilisateur le supprime "par erreur ".
Puis vérifier si le nom existe avant l'import.
Ce qui donne:
VB:
Sub Macro3()
Dim Nm As Name
For Each Nm In ActiveWorkbook.Names
If Nm.Name = "Fait" Then Exit Sub
Next Nm
ActiveWorkbook.Names.Add Name:="Fait", RefersToR1C1:=" ", Visible:=False
End Sub