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

Macros et VBA Excel Discussion :

Création Signet word à partir VBA excel : erreur 450


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Par défaut Création Signet word à partir VBA excel : erreur 450
    je galère sur un problème qui me paraissait simple.
    Je veux simplement créer un signet sur une zone sélectionnée dans un word et j'ai l'erreur 450 (Nombre d'arguments incorrect ou affectation de propriété incorrect).

    Cela peut provenir du contexte un peu particulier mais je ne pense pas.
    En effet, l'objectif est de remplacer dans un document les champs de liaisons par des Signets codifiés.

    C'est sur la ligne de création du signet après avoir sélectionné mon champs que j'ai l'anomalie. Cependant j'ai fait plusieurs test et même si je sélection une autre partie de de texte qui n'est pas un champ de liaison j'ai le même problème.

    Pouvez-vous m'aider un ne pas perdre plus de cheveux que je n'ai déjà plus beaucoup ???

    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
    Dim loWordApp As Word.Application
    Dim loWordDoc As Word.Document
     
      Set loWordApp = CreateObject("Word.Application")
      loWordApp.Visible = True
     
          Set loWordDoc = loWordApp.Documents.Open("c:\tempo\toto.docx", ReadOnly:=False)
     
          For Each Field In loWordDoc.Fields
              Field.Select
     
    	  ' Création d'un signet sur le champ sélectionné
              with loWordDoc	
    	    .Bookmarks.Add Name:="Signet1", Range:=Selection.Range  ' <- ligne avec l'erreur
                .DefaultSorting = wdSortByName
                .ShowHidden = False
              end with
     
    	 ' Remplacement du champ par une valeur'	
             loWordApp.Selection.TypeText Text:="toto"
          Next Field

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par sass666 Voir le message
    C'est sur la ligne de création du signet après avoir sélectionné mon champs que j'ai l'anomalie.
    Quel est le message d'erreur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          For Each Field In loWordDoc.Fields
    Déjà, donner à un variable le nom d'un objet, c'est vraiment chercher les ennuis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
              Field.Select
              with loWordDoc	
    	    .Bookmarks.Add Name:="Signet1", Range:=Selection.Range
    Cette question devrait être posée dans la rubrique VBA Word.
    Je ne suis pas spécialiste de la question mais, dans l'aide Word, je ne vois pas de propriété Range pour les objets Field.

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Par défaut
    Pour le nom du signet j'avais mis dans le code "toto" mais pour faire plus propre j'ai remplacé par "Signet1". Ce n'est donc pas cela.

    Ta 2ème remarque est plus intéressante.

    Effectivement cela peut être lié à la sélection du "Field".
    Selon mon approche, la sélection du "Field" car c'est bien lui que je veux remplacer, à pour objectif de sélectionner du texte, texte sur lequel je veux tout d'abord mettre un signet et pour ensuite remplacer par une valeur.

    Je ne suis pas sûr que l'anomalie vienne de cela car si je prends la main juste après le "Field.Select" pour sélectionner une autre partie du document word ouvert, j'ai la même anomalie.

    Je suis bien sûr prêt a changer l'approche si le résultat est celui attendu.

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par sass666 Voir le message
    Pour le nom du signet j'avais mis dans le code "toto" mais pour faire plus propre j'ai remplacé par "Signet1". Ce n'est donc pas cela.
    Je ne parlais pas de "Signet1" mais de "Field" : c'est une variable à qui tu donnes le nom d'un objet existant.
    Ce genre d’ambigüité peut causer des erreurs difficile à démêler alors qu'il est si facile d'éviter ce type de piège dès la conception du code.

    A moins que tu imagines que "Field" soit le nom générique qu'il faut utiliser pour gérer ce type d'objet.
    Dans ce cas, tu es dans l'erreur. Ce "Field" sera forcément une variable et comme elle n'est pas déclarée, ce sera une variable de type Variant, ce qui ajoute aux risques d'ambiguïté.

    Je te conseille donc de remplacer ce nom par n'importe quoi n'étant pas un nom réservé (par exemple "Champ") et de déclarer la variable : Dim Champ As Word.Field.

    Pour ce qui est d'associer un Range à un Field, je n'ai pas de certitude (Word n'est pas vraiment mon domaine d'expertise).
    Mais l'expérience me dit que lorsqu'une propriété n'est pas dans la liste des membres d'un objet dans l'aide VBA, il est rare qu'il soit possible de l'utiliser.
    A lire : https://docs.microsoft.com/fr-fr/off...api/word.field

  5. #5
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Par défaut
    J'ai fait un test en simplifiant mon code, je sélectionne simplement un texte dans le Word sans parcourir les champs de liaisons et j'ai la même erreur.

    J'ai fait aussi un enregistrement d'action en macro sous Word avec la création d'un signet, cela produit le même code que celui dans mon VBA excel.

    Donc, mon problème provient de la manière d'appeler les objets Word à partir d'Excel.
    Par exemple le remplacement du texte ce fait au niveau de l'application Word -> loWordApp.Selection.TypeText Text:="toto".
    Alors que pour l'ajout des signet je suis au niveau de l'instance du document :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with loWordDoc
      .Bookmarks.Add Name:="Signet1", Range:=Selection.Range ' <- ligne avec l'erreur
    Je pense que c'est à ce niveau que je me prend les pieds dans le tapis.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    J'ai l'impression que tu ne lis pas les messages que j'écris. Il est donc inutile que je poursuive.
    Bonne chance pour la suite.

Discussions similaires

  1. [E-02] VBA : Récupérer du texte dans Word à partir d'Excel
    Par jmric49 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/03/2009, 18h21
  2. Initialiser un signet word à partir d'excel
    Par HAFNI84 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/05/2007, 01h08
  3. [VBA] exécuter macro Word à partir d'excel
    Par le_niak dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/05/2007, 09h26
  4. [VBA-E] ouverture de fichier word à partir d'Excel
    Par aramge dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/08/2006, 09h18
  5. [VBA-E]Insérer des autotext dans Word à partir d'excel
    Par noordman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/04/2006, 15h34

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