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 :

Utilisation de Word depuis Excel : argument ou appel de procédure incorrect


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 2
    Par défaut Utilisation de Word depuis Excel : argument ou appel de procédure incorrect
    Bonjour à tous,

    Je cherche à renseigner un document Word depuis une macro Excel. Rien de vraiment terrible.
    A l'exécution, j'ai une erreur "Argument ou appel de procédure incorrect" sur la commande ".Selection.Find.Text".

    Voici mon 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub DiffuserTmp()
        Dim AppWord As Word.Application
        Dim WordDocument As Object
     
        ' Initialisation des applications
        Set AppWord = CreateObject("Word.application")
        ' On ouvre la fiche de lecture pour pré-renseigner les champs
        With AppWord
            .Documents.Open Filename:="le chemin qui va bien"
            .Visible = True
            .Activate
     
            ' On va dans l'en-tête
            .ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
     
            ' Ajout du nom du projet
            .Selection.Find.Text = "PROJET :"
            .Selection.Find.Forward = True
            .Selection.Find.Wrap = wdFindContinue
            .Selection.Find.Execute
            .Selection.MoveRight
            .Selection.TypeText "TEST"
     
            ' On ferme le fichier
            .Documents.Close
        End With
     
        ' On ferme Word
        AppWord.Quit
    End Sub
    Il se trouve que je cherche le mot dans l'en-tête, mais ça fait pareil en dehors.

    Je travaille avec Word et Excel 2000, VBA 6.0.

    J'ai cherhcé un peu partout, mais je ne vois pas ce qui cloche !!

    Merci d'avance pour votre aide.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    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 Test()
    Dim appWd As Object
    Dim docWd As Object
        Set appWrd = CreateObject("Word.Application")
        Set docWord = appWrd.Documents.Open("D:\Doc\monDocument.doc")
        appWrd.Visible = True 'l'affichage de Word n'est pas indispensable
        With appWrd.Selection.Find
            .Text = "titre"
            .Forward = True
            If .Execute Then
                appWrd.Selection.MoveRight Unit:=1
                appWrd.Selection.TypeText "TEST"
            End If
        End With
        docWord.Close False
        appWrd.Quit
        Set docWord = Nothing
        Set appWrd = Nothing
    End Sub
    Explication sur "appWrd.Selection.MoveRight Unit:=1" :
    Quand tu crées une instance de Word depuis Excel, les paramètres des méthodes ne peuvent prendre qu'une valeur comme argument. En l'occurence l'argument "Unit:=wdCharacter" est remplacé ici par sa valeur, 1.
    Ce qui déplace la sélection d'un caractère par défaut.
    Pour déplacer de plusieurs caractères il faudrait ajouter le paramètre count:=nbre de caractères.
    Bonne nuit

  3. #3
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Il me semble que le plus simple est d'insérer un signet dans le document Word à l'endroit où le nom du Projet doit s'inscrire.

    Une fois le signet inséré et nommé par exemple "proj", tu peux procéder comme ceci :
    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 test_signet_word()
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim NomProj As String, CheminFich As String
     
    NomProj = "TEST" '<-- texte à insérer à l'endroit du signet
    CheminFich = "D:\test1.doc" '<-- chemin et nom à adapter
     
    Set WordApp = CreateObject("word.application") '<-- ouvre une session Word
    Set WordDoc = WordApp.Documents.Open(CheminFich) '<-- ouvre le document Word
    WordApp.Visible = False '<-- Word est masqué pendant l'opération
     
    'le signet du document Word se nomme "proj"
    'écriture à l'endroit du signet
    WordDoc.Bookmarks("proj").Range.Text = NomProj
     
    WordDoc.Close True '<-- ferme le document word en sauvegardant les modifications
    WordApp.Quit '<-- ferme la session Word
    End Sub
    Salut Ousk

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 2
    Par défaut
    Merci pour vos réponses,

    Bon, ça n'a pas marché tel que... Mais ça m'a mis sur la voix.

    L'appel de la procédure "Selection.Find" sur l'application Word échoue (AppWord.Selection.Find)

    MAIS l'appel de la même procédure sur la fenêtre active du document ouvert fonctionne (WordDoc.ActiveWindow.Selection.Find)

    Le code qui marche est donc le suivant :
    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
    22
    23
    24
    25
    Sub DiffuserTmp()
        Dim AppWord As Word.Application
        Dim WordDocument As Object
     
        ' Initialisation des applications
        Set AppWord = CreateObject("Word.application")
        ' On ouvre la fiche de lecture pour pré-renseigner les champs
        Set WordDocument = AppWord.Documents.Open("chemin\fichier.doc")
        AppWord.Visible = True 'l'affichage de Word n'est pas indispensable
        With WordDocument.ActiveWindow.Selection.Find
            .Text = "PROJET :"
            .Forward = True
            If .Execute Then
                AppWord.Selection.MoveRight Unit:=1
                AppWord.Selection.TypeText "TEST"
            End If
        End With
        WordDocument.Close False
        AppWord.Quit
        Set WordDocument = Nothing
        Set AppWord = Nothing
     
        ' On ferme Word
        AppWord.Quit
    End Sub

    Je n'ai pas essayé avec les signets car je ne peux pas modifier le template initial (template standard d'entreprise, je ne peux pas y ajouter de signets !!).

    Merci encore pour votre aide

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    L'appel de la procédure "Selection.Find" sur l'application Word échoue (AppWord.Selection.Find)

    MAIS l'appel de la même procédure sur la fenêtre active du document ouvert fonctionne (WordDoc.ActiveWindow.Selection.Find)
    Oui, tu as déclaré
    Dim AppWord As Word.Application
    Dim WordDocument As Object
    alors que moi je propose
    Ce qui évite en outre d'avoir à valider la référence Microsoft WORD XX.X library application
    Bonne nuit... si tu passes par là

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/01/2011, 22h28
  2. [XL-2003] Shell et Erreur d'exécution 5: Argument ou appel de procédure incorrect
    Par akr54 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/06/2010, 14h15
  3. Erreur d'exécution 5 ; Argument ou appel de procédure Incorrect
    Par amirad dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 31/12/2009, 19h34
  4. Workbooks.Open : Erreur "Argument ou appel de procédure incorrect"
    Par Kropernic dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 31/07/2008, 09h49
  5. Argument ou appel de procédure incorrect lors du lancement d'un .bat
    Par 512banque dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 17/03/2008, 17h23

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