Enregistrer sous sans certaines macro

Bonjour maîtres VBA

J'ai un formulaire qui invite (force) l'utilisateur de faire un enregistrement sous à son ouverture afin d'éviter qu'il utilise le formulaire d'origine (que je souhaite conserver vierge à chaque ouverture). J'aurai aimé forcer l'enregistrement sous sans l'option d'annuler, mais pour l'heure, c'est là où en j'en suis...

Je vous écris surtout pour savoir s'il est possible de faire l'enregistrement sous sans les macro ou en les désactivant, mais pas totalement. J'aimerais pouvoir conserver celle du BeforClose.

Auriez-vous une solution à me proposer.

Merci beaucoup

Salut Michel,

Je n’arrive pas à ouvrir ton fichier, il y a toujours un message d’erreur. Dans la mesure du possible (limite à 300 ko, je crois), il vaut mieux passer par les moyens du Forum. Autrement le site C-Joint et très bien.

Amicalement.

joindre un fichier forum c joint 2013

Bonjour Yvouille

voici le lien du site Cjoint:

https://www.cjoint.com/c/FBsv5t7vA6q

merci encore

Bonjour Yvouille

Encore merci pour le lien.

Il y a la macro Supprimer toutes les procédures contenues dans ThisWorkbook qui m’intéresse, mais je souhaite supprimer uniquement la procédure d'ouverture (WorkbookOpen), et non pas celle de fermeture!

Sub Supprimer_Code_ThisWorbook()

With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
    .DeleteLines 1, .CountOfLines
    .CodePane.Window.Close
End With

End Sub

Est-il possible de l'adapter d'une manière spécifique?

Est-ce que ce type de macro s'installe dans un module ou simplement dans le ThisWorkbook?

Merci

Salut Michel,

Je suis désolé, mais là je ne peux pas t’aider plus. J’ai cherché sur Internet, j’ai trouvé d’autres codes, mais je n’arrive pas à les faire fonctionner

Si tu n’obtiens pas d’autres réponses sur ce fil, je te conseille de l’indiquer comme ‘’Résolu’’ et d’en ouvrir un autre car peu de membres s’intéressent à un fil déjà bien commencé.

Amicalement.

Bonjour,

Je constate qu'à l'ouverture de ton formulaire, on commence à être assailli par une demande de mise à jour de liens externes...

C'est toujours irritant ! Et tu devrais commencer par éliminer cette anomalie, s'agissant d'un fichier à communiquer.

Ensuite, tu devrais faire en sorte que ton Userform Liste ne s'ouvre que quand c'est requis (il s'ouvre à la sélection de colonne !), et si tu veux que les lignes soient remplies dans l'ordre, il faut coupler son ouverture à la sélection auto de la ligne qui doit être servie.

Ceci étant, la question posée, pardonne-moi, me paraît idiote ! Enregistrer le formulaire vierge sur son disque est l'affaire de l'utilisateur qui l'a reçu. En tout état de cause, s'il l'a reçu, il l'a...

Tu peux lui conseiller tout au plus de l'enregistrer vierge pour le conserver (bien que l'ayant reçu, il pourra toujours le récupérer à la source), mais ce sur un support qu'il pourra supprimer après lecture (soit une zone de texte par exemple) mais pas ce dispositif qui va se déclencher à chaque ouverture !

Par contre, si tu dois recevoir les formulaires remplis en retour, ton problème serait surtout d'imposer un enregistrement des formulaires retournés sous un nom qui les différencie et te permette de les identifier.

Cordialement.

Bonjour,

Je viens d'aller voir le lien fourni par Yvouille.

Il est bien plus complet que ce que tu dis.

Il y a aussi :

  • Supprimer toutes les procédures contenues dans une feuille
  • Supprimer un UserForm
  • Supprimer un Module
  • Supprimer une Macro bien précise dans un Module
Ce qui a l'air de couvrir largement ton besoin non ?

afin d'éviter qu'il utilise le formulaire d'origine (que je souhaite conserver vierge à chaque ouverture).

Il suffit de l'enregistrer en modèle (*.xlt), une copie sera crée à chaque ouverture. Tant qu'à faire tu peux ne laisser dans cette version que les macros nécessaires...

Garde une version .xls pour faire tes évolutions

eric

Bonjour MFerrand et ériiic

Désolé pour les assaillantes mise à jour de liens externes! Je croyais avoir fait le nécessaire. Mes modifications des options n'ont sans doute pas suivi dans cette version.

Pour l'userform Liste, c'est exactement ce que je souhaite avoir, mais je ne saurais, comme vous dite, « coupler son ouverture à la sélection auto de la ligne qui doit être servie ». Vous m'attribuez plus de compétence que j'en aie.

je comprends votre point de vue sur ma question posée, et suivant vos remarques, je constate que j'ai mal planifié le scénario d'utilisation du formulaire, et par conséquent, mal posé ma question.

Effectivement, il s'agit de « recevoir des formulaires remplis en retour ». C'est pourquoi je force l'enregistrement sous à l'ouverture du formulaire sous un autre nom. C'est dans la suite du traitement de la demande que je souhaitais que les macros ne soient pas fonctionnelles. D'un côté, le requérant bénéficie des macro pour remplir le formulaire, mais, de l'autre, celui qui traite la demande n'a besoin que des renseignements. Donc, quand la personne traite la demande, il serait mieux que le fichier s'ouvre sans le message d'accueil, sans la requête d'enregistrer sous, etc.

Je vais également explorer l'option d'enregistrer en modèle (*.xlt) . Vous avez raison le lien d'Yvouille est très complet, mais mon problème est ma capacité à les adapter. Déjà, comme mentionné dans le poste précédent, j'aimerais savoir où les intégrer pour commencer des tentatives d'adaptation.

Encore mille mercis pour vos bons conseils. Comme vous, j'aimerais d'avantage maîtriser le vba, mais j'avoue que sans votre aide, je suis, plus souvent qu'à mon tour, assez perdu.

Bonjour,

mais, de l'autre, celui qui traite la demande n'a besoin que des renseignements. Donc, quand la personne traite la demande, il serait mieux que le fichier s'ouvre sans le message d'accueil, sans la requête d'enregistrer sous, etc.

S'ils sont peu nombreux à traiter les demandes, plus simplement tu pourrais tester l'ident utilisateur (Application.UserName) et ne lancer les macros concernées que pour ceux qui n'appartiennent pas à cette liste.

Et en cas de besoin ils peuvent avoir leurs macros spécifiques.

eric

MFerrand a écrit :

Ensuite, tu devrais faire en sorte que ton Userform Liste ne s'ouvre que quand c'est requis (il s'ouvre à la sélection de colonne !), et si tu veux que les lignes soient remplies dans l'ordre, il faut coupler son ouverture à la sélection auto de la ligne qui doit être servie.

Bonjour MFerrand

je voudrais savoir si je suis près de la solution pour ce que vous m'indiquiez! Je n'arrive pas à bien programmer le code!

merci

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$A$2" Then Calendrier.Show

    If Not Application.Intersect(Target, Range("A13:A27")) Is Nothing And Target.Count = 1 Then
        If Application.Count(Range("A13:A27")) > 0 Then
            Userform1.Hide
        Else
            Userform1.Show
        End If
     End If

End Sub

Tout dépend de ce que tu veux faire !

Là tu comptes le nombre de valeurs numériques dans la plage A13:A27 : s'il y en a tu masques le Userform, sinon tu l'affiches.

Bonjour MFerrand

donc, je suis sur la mauvaise voie, car c'est du texte qu'il y a dans la palge ("A13:A27").

J'essai de suivre votre suggestion: lorsque A:13 est rempli que l'userform1 ne s'affiche pas si on clique sur A:13, ainsi de suite.

pas facile le vba...

merci

Tu testes simplement s'il y a quelque chose dans la cellule alors :

If Target.Value <> "" Then Userform1.Show

Inutile de masquer le Userform s'il l'est déjà.

Bonjour MFerrand

D'accord, merci.

Mais j'ai beau viré ça dans tous les sens, cela provoque une incompatibilité de type, erreur d'exécution 13

Bonsoir le forum...

Bonsoir VDMICHEL, ériiic et MFerrand

Si tu n’obtiens pas d’autres réponses sur ce fil, je te conseille de l’indiquer comme ‘’Résolu’’ et d’en ouvrir un autre car peu de membres s’intéressent à un fil déjà bien commencé.

Tout dépend comment on y est reçu...

Je vais regarder ce fichier car ces posts me donnent l'eau à la bouche

@ bientôt

LouReeD

Bonjour

super LouReed, merci d'embarquer dans la résolution de ce projet, et merci à tous pour votre aide.

Pour le bénéfice de tous, si je peux résumer ce projet ainsi:

Le formulaire est une demande de service utilisé par un requérant et un exécutant.

1. Message d'accueil à l'ouverture

2. Forcer la création d'une version à transmettre à l'exécutant (=forcer à l'ouverture, l'enregistrement sous)

3. Désactiver les macros lorsque le requérant ferme et enregistre sa demande, mais reçoit quand même un message avant la fermeture.

4. L'exécutant ouvre la demande sans que les macro s'exécutent.

Ce qui reste à résoudre:

1. que l'userform1 (la liste) s'active seulement quand on clic dans l'ordre d'une cellule vide à l'autre de la plage A13:A27

2. intégrer une macro pour supprimer certaines macros.

je suis parfaitement conscient du privilège que vous m'accordez. merci encore

Bonjour,

3. Désactiver les macros lorsque le requérant ferme et enregistre sa demande, mais reçoit quand même un message avant la fermeture.

4. L'exécutant ouvre la demande sans que les macro s'exécutent.

Je t'ai fait une suggestion restée sans suite pour ça.

Peut-être ne l'as-tu pas vue ?

eric

eriiic a écrit :

S'ils sont peu nombreux à traiter les demandes, plus simplement tu pourrais tester l'ident utilisateur (Application.UserName) et ne lancer les macros concernées que pour ceux qui n'appartiennent pas à cette liste.

Et en cas de besoin ils peuvent avoir leurs macros spécifiques.

eric

Bonjour eriiic,

j'ai bien vu cette proposition, mais je dois vous avouer que c'est vraiment trop avancer pour moi. Je ne saurais par quel bout commencer. Je prévoyais m'inspirer de lien de Youville tel que vous me le suggériez. Mais pour l'heure, je ne sais pas où intégrer ces macros. Dans la feuille, dans le ThisWorrBook, dans un module (malheureusement ce n'est pas indiqué)... J'imagine que c'est relatif à la macro que je choisis.

J'ai fait quelques tentatives qui demeurent pour l'heure sans succès. J'y travaille encore.

merci pour le suivi!

C'est pourtant beaucoup plus simple que de supprimer des macros :

' dans un module standard
Public Const agentTraitement As String = ",Eric,Pierre,Paul," 'identifiants des agents de traitement

' dans tout autre module
Sub test()
    If InStr(agentTraitement, "," & Application.UserName & ",") = 0 Then
        ' c'est un utilisateur qui rempli une demande
        ' je met la macro
    Else
        ' c'est agents de traitement
        ' je ne fais rien ou bien autre chose
    End If
End Sub

Il faut qu'au moins les agents de traitement aient leur identifiant de déclaré dans les options excel.

Ca et l'enregistrement en xltm pour les demandeurs et tu as tout il me semble.

eriiic a écrit :

Il faut qu'au moins les agents de traitement aient leur identifiant de déclaré dans les options excel.

Bonjour eriiic,

est-ce que vous voulez dire, déclarer dans Outils>Option>Général>Nom de l'utilisateur ou dans liste personnalisée?

je ne suis pas certain de pouvoir modifier quoique soit à ce niveau, car aucun d'entre nous ne peut être administrateur.

Merci


Yvouille a écrit :

Pour ta demande, est-ce que la réponse est dans le fil ci-après ...

Bonjour Yvouille, j'ai essayé plusieurs tentatives de faire fonctionner l'une des macros du lien, mais aucune ne semble fonctionner?

Aurais-tu une piste?

Cordialement

Rechercher des sujets similaires à "enregistrer certaines macro"