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 :

Objet ContentControl : Comment détecter si une image a été téléchargée [WD-2013]


Sujet :

VBA Word

  1. #1
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut Objet ContentControl : Comment détecter si une image a été téléchargée
    Bonjour,
    Afin de rendre invisible lors de l'impression d'un document, les contrôles de contenu non utilisés, je cherche à détecter si une photo a été téléchargée ou pas.
    Soit dans l'image ci-dessous le contrôle entouré en rouge.

    Nom : Image photo.png
Affichages : 377
Taille : 30,3 Ko

    Pour les autres contrôles, j'ai trouvé la solution mais je cherche en vain pour le contrôle de contenu d'image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub HiddenControl()
      ' Masque les contrôles formulaire non utilisés
      Dim Ctrl As ContentControl
      For Each Ctrl In ThisDocument.ContentControls
        With Ctrl
         Select Case .Type
           Case 0 To 1, 3, 6 ' Texte enrichi, brut, liste déroulante, sélection date
             .Range.Font.Hidden = .Range = .PlaceholderText
           Case 2 ' d'image
             ' .Range.Font.Hidden = False
         End Select
        End With
      Next
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour Philippe,

    Au moment où tu charges (et décharges) ton image, as-tu moyen de renseigner la propriété tag du contentcontrol, pour t'en servir ensuite ?

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour Eric,
    Merci de te pencher sur mon problème.
    Le problème est que ce n'est pas par VBA que les photos sont chargées mais manuellement par l' utilisateur et j'avais bien pensé faute de mieux d'alimenter la propriété Tag de l'objet mais je devrais alors intercepter l'événement et je ne vois pas cet événement.
    Il y aurait bien une solution avec celui ci Document_ContentControlOnExit mais on peut sortir de l'événement en supprimant l'image et donc je me retrouve avec le même problème "Comment savoir s'il y a une image chargée ou pas"
    J'ai testé plusieurs propriétés mais sans succès et malheureusement l'enregistreur de macros de Word n'est pas très bavard.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut Solution momentannée
    Bonjour,
    En attendant mieux et en espérant qu'une meilleure solution existe, voilà ce que j'ai opté comme solution
    Les contrôles étant préinstallé dans un modèle, les tailles de ceux-ci sont identiques. Lorsque l'utilisateur chargera la photo la taille (largeur et hauteurà sera différentes.
    Je teste donc ceux-ci pour rendre visible ou pas le contrôle.
    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
    Sub HiddenControl()
      ' Masque les contrôles du contenu non utilisés
      Const dHeight As Double = 115.2, dWidth As Double = 115.2
      Dim Ctrl As ContentControl
      Dim Flag As Boolean
      '
      For Each Ctrl In ThisDocument.ContentControls
        With Ctrl
          Select Case .Type
            Case 0 To 1, 3, 6 ' Texte enrichi, brut, liste déroulante, sélection date
              Flag = .Range = .PlaceholderText
            Case 2 ' d'image
              With .Range.InlineShapes(1)
                Flag = .Height = dHeight And .Width = dWidth
              End With
          End Select
         .Range.Font.Hidden = Flag
        End With
      Next
    End Sub
    Je laisse pour l'instant la discussion ouverte; en espérant une solution propre
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Ce code te permet-il de différencier les controles vides ? Vrai si vide.

    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
     
    Sub VerifierLesContentsImages()
     
    Dim I As Integer
     
      With ActiveDocument
     
           For I = 1 To .ContentControls.Count
               With .ContentControls(I)
                    If .Type = wdContentControlPicture Then
                       Debug.Print I & ", " & .ShowingPlaceholderText
                    End If
            End With
           Next I
     
      End With
     
     
    End Sub

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour Eric,
    Génial, celle là je ne l'ai pas vue

    Du coup, mon code est réduit à sa plus simple expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub HiddenControl()
      ' Masque les contrôles du contenu non utilisés
      Dim Ctrl As ContentControl
      For Each Ctrl In ThisDocument.ContentControls
        With Ctrl
        .Range.Font.Hidden = .ShowingPlaceholderText
        End With
      Next
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

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