IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Impossible de choisir le type de protection via une macro VBA [WD-2010]


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Impossible de choisir le type de protection via une macro VBA
    Bonjour à tous,

    J'ai un problème tout con mais qui n'est pas encore résolu malgré mes recherches...Je me tourne vers vous!

    J'ai un doc Word. Ce document à pour but de remplir une demande (d'habilitation), puis, en appuyant sur un bouton poussoir de la sauvegarder et d'envoyer un message mail (Cette partie fonctionne).

    A la base ce document est protégé de la façon "remplissage de formulaire". Je souhaite, qu'après le "click" du bouton poussoir, faire que cette protection devienne "en lecture seule". Le problème est le suivant :

    J'arrive à enlever le protection d'origine, puis à remettre une protection MAIS celle ci reste celle d'origine (Remplissage de formulaire). Je n'arrive pas à choisir mon type de protection....

    Please help! Voici ma macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub CommandButton1_Click()
        Dim ol As Object, monItem As Object
        Set ol = CreateObject("outlook.application")
        Set monItem = ol.CreateItem(olMailItem)
        
        CommandButton1.Enabled = False
        
        ActiveDocument.Unprotect
        ActiveDocument.Protect wdAllowOnlyReading, NoReset = True
        
        ActiveDocument.SaveAs FileName:="\\TERRE\Donneesidbc\Candidature Hebergement web\agrément\Test demande d'habilitation\demande essai\Demande de révocation-suspension du compte " & TextBox1.Text & " " & Format(Date, "dd") & "-" & Format(Date, "mm") & "-" & Format(Date, "yy") & ".doc"
        
        monItem.To = " foger@a2com.fr "
        monItem.Subject = "Demande de révoquation-suspension d'un compte utilisateur"
        monItem.Body = "Bonjour," & vbCrLf & vbCrLf & "Une demande de révoquation-suspension blablabla."
        
        monItem.Send
        Set ol = Nothing
        MsgBox "la demande a bien été transmise "
       
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Le ReadOnly passe par la méthode SaveAs du document.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Salut,

    Bon en fait, ce sont mes boîtes de texte de formulaire que je n'arrive pas à protéger...

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    J'étais déjà allé voir ce lien...mais rien n'y fait.

    Par contre j'ai eu une autre idée, je voulais créer une boucle sur mes textbox et checkbox qui fasse passer leur statut "Locked" à True au lieu de false.

    Je comptais intégrer cette macro avant la sauvegarde.

    Problème toutes les macros que j'ai testées ne fonctionnent pas, et je suis allé voir sur bcp de pages...

    Pourrais-tu m'aider une dernière fois?

    Ps: Je viens de m'apercevoir que je me suis trompé de catégorie, je suis sous Word 2007...je ne sais pas si cela change bcp ou pas.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Voici un code qui fonctionne chez les autres mais pas chez moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim ctl As Control
     
     'Pour chaque contrôle du formulaire
    For Each ctl In Me.Controls
     
        ' On verifie que le contrôle soit bien une zone de texte
        If TypeOf ctl Is textBox Then
     
                ctl.Locked = True
     
        End If
    Next ctl
    Il me renvoie Erreur de compilation sur "Me.Controls"

  7. #7
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Quels types de champs de formulaire utilises-tu ?

    Je pense que c'est la source des problèmes.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Salut,

    Quels types de champs de formulaire utilises-tu ?

    Je pense que c'est la source des problèmes.
    Voici un lien vers mon fichier :

    http://cjoint.com/?0CDkEk0MKBq

  9. #9
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    ce ne sont pas des contrôles, mais des objets ActiveX qui sont des objets OLE
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Salut,

    ce ne sont pas des contrôles, mais des objets ActiveX qui sont des objets OLE
    Ma première tentative avait été avec cela mais j'avais le code erreur suivant "erreur de compilation, type défini par l'utilisateur non défini" avec "Dim obj As OLEObject" surligné...

  11. #11
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Pour avoir une idée, lance l'enregistreur de macro et ajoute un contrôle sur ton document.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Pour avoir une idée, lance l'enregistreur de macro et ajoute un contrôle sur ton document.
    Voici ce que cela donne :

    Selection.InlineShapes.AddOLEControl ClassType:="Forms.TextBox.1"

  13. #13
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    ça je le savais, mais c'est de là que tu dois partir, mais c'est pas gagné, comme on commence avec des inlineshapes, il faut faire une boucle sur les inlineshapes, ensuite en fonction du type, tu peux travailler sur ces objets.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Pour le moment, j'en suis là (on m'a aidé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim mesctl As InlineShape
     
    For Each mesctl In ActiveDocument.InlineShapes
     
            'If.....Then
            'Action
     
     
              End If
     
     
    Next mesctl

    Et là je cherche la bonne formulation pour la condition et pour l'action.

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Voilà c'est enfin fini!

    voici donc le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Dim mesctl As InlineShape
     
     
    For Each mesctl In ActiveDocument.InlineShapes
     
            If Left(mesctl.OLEFormat.Object.Name, 7) = "TextBox" Then
            mesctl.OLEFormat.Object.Locked = True
    End If
     
     
     
    Next mesctl
     
     
     
    End Sub
    Merci à vous et merci à "Le Pingou" qui a écrit ce code!

    Bonne fin de journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2002]Tester le type de VBComponent via une macro
    Par kesimon63 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/12/2010, 15h51
  2. Réponses: 1
    Dernier message: 03/01/2010, 12h49
  3. Réponses: 1
    Dernier message: 31/12/2009, 11h22
  4. Réponses: 4
    Dernier message: 19/03/2009, 09h57
  5. Comment choisir un type d'attribut d'une classe?
    Par chevy dans le forum Langage
    Réponses: 8
    Dernier message: 18/05/2007, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo