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 :

Erreur 91, remplacer des chaines de caractères depuis un excel [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut Erreur 91, remplacer des chaines de caractères depuis un excel
    Bonjour,

    Je créée un excel qui publie automatiquement un template word une fois les cases remplis.

    J'utilise des balise <nom> pour trouver et remplacer les champs. quand j’exécute mon code tout fonctionne bien jusqu'au moment où il doit remplacer le 2ième champ et j'ai une erreur 91, qui en prime ne m'indique pas où se situe mon erreur. Obligé d'utiliser le débogeur ligne par ligne

    j'ai parcouru tout internet je ne trouve pas mon erreur.
    Je débute et c'est la première fois que j'utilise ce forum, merci de votre aide
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    < Sub main()
    'Déclaration des variables utilisées dans le document
     
    Dim variable1 As String
    Dim variable_2 As String
    ...
    Dim variable19 As String
    'Déclaration des variables pour la lectures de donnéees
    Dim r As Long
    Dim c As Long
     
    'positionnement à la cellule sélectionnée
     
    r = ActiveCell.Row
    c = ActiveCell.Column
    'récuperation des valeurs
    variable1 = Cells(r, c + 3)
    ...
    variable19= Cells(c + 5, c + 10)
     
    'declaration des varaibles pour passer a un fichier word
    Dim wApp As Word.Application
    Dim wDoc As Word.Document
    Const filename_access = "chemin_acces"
     
    Set wApp = New Word.Application
    wApp.Visible = False
     
    With wDoc
    .Content.Find.Execute FindText:="<<balise1>>", _
    ReplaceWith:=nom_client, Replace:=wdReplaceAll
    End With
     
     
    .....
     
     
    With wDoc
    .Content.Find.Execute FindText:="<<balise2>>", _
    ReplaceWith:=num_projet, Replace:=wdReplaceAll
    End With
     
    end sub

  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
    Il y a un truc étrange dans ton programme : tu fais référence au contenu de wDoc (le premier With) sans jamais l'avoir renseigné...
    En somme, tu appliques une méthode à un document sans spécifier de quel document il s'agit.

    En plus, tu n'ouvres pas de document dans ta macro.
    Ce document pourrait être déjà ouvert, mais dans ce cas, pourquoi ouvrir une nouvelle cession Word (New Word.Application) ?
    Et si tu veux traiter un document vierge, ça signifierait que les balises que tu recherches se trouvent dans le modèle par défaut de Word, ce qui n'est pas impossible mais tout de même assez improbable.

    Ca ne va pas répondre directement à ta question, mais pour transférer des données de Excel à Word, il est plus simple d'utiliser des signets (Bookmark).
    Voir les explications dans ce sujet : https://www.developpez.net/forums/d1...ts-mise-forme/

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut erreur 424 et signets
    Merci de ta réponse Menhir cela m'a aidé j'ai modifié mon code tel que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Set wDoc = WordApp.Documents.Open("chemin d'acces de la template word")
    wApp.Visible = True
     
    wDoc.Bookmark("signet1").Range.Text = variable1
    ...
    wDoc.Bookmark("signet19").Range.Text = variable19
     
    end sub
    j'obtiens une erreur 424 quand je veux modifier les signets.
    J'ai pourtant prit cette ligne de code sur un autre forum d'un utilisateur qui affirmait que cela fonctionnait.

    Merci de votre aide

  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 joruf Voir le message
    J'ai pourtant prit cette ligne de code sur un autre forum d'un utilisateur qui affirmait que cela fonctionnait.
    Soit cet "utilisateur" était quelque peu présomptueux, soit tu n'as pas correctement recopié son code.
    Pour moi, quand on fait référence à un item d'une collection, la collection s'écrit toujours avec un "s" final.
    Donc Bookmark("signet1") est forcément une erreur.

    Regarde le code qui se code (et l'explication) du post #4 du lien que j'ai mis dans mon message.

    Autre détail : quand tu indiques une erreur, donne le message d'erreur. Parce que le numéro seul, ça n'est pas vraiment parlant à moins de disposer d'une mémoire eidétique.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut erreur 424 et signets
    J'ai rajouté le "s" à la fin de bookmark et j'ai utilisé "set" avant chaque ligne de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wDoc.Bookmarks("nom_client").Range.Text = nom_client
    Maintenant j'ai une erreur "erreur de compilation : utilisation incorrecte de la propriété" avec le ".text" surligné.
    Mes variables sont définies "As String".

    ----ton autre post----
    À quoi servent les caractères après le nom du signet dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DocWord.Bookmarks("BKTitre_" & .Cells(Lig, 1).Value).Range.Text
    Et à quoi servent ces termes:«, NewTemplate:=False, DocumentType:=0)» dans ton "GetObject" ?
    -------

    Encore une fois merci de ton aide.

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par joruf Voir le message
    J'ai rajouté le "s" à la fin de bookmark et j'ai utilisé "set" avant chaque ligne de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wDoc.Bookmarks("nom_client").Range.Text = nom_client
    Maintenant j'ai une erreur "erreur de compilation : utilisation incorrecte de la propriété" avec le ".text" surligné.

    Dans ce cas, il ne faut pas que tu mettes le set. Le Set n'est utilisé que dans la création de l'objet. Dans ton cas, l'objet existe, s'il n'a pas été effacé dans le document. Bien souvent quand on agit directement sur un signet, par VBA, il est détruit. Encore que dans ce cas, il ne devrait pas être détruit, sauf horreur de ma part.

    essaie avec juste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     wDoc.Bookmarks("nom_client").Range.Text = nom_client
    Ceci étant dit, est-ce que ton modèle est un vrai modèle au sens d'un modèle de Word. (Extension dotx (pas de macros) ou dotm (avec des macros)). En principe, si tu utilises un vrai modèle, cela crée un nouveau document. Tu fais enregistrer sous, pour enregistrer ton document. Et tant que tu quittes sans enregistrer ton modèle, les signets sont préservés.

    Mais, si tes signets sont déjà dans ton document Word, tu n'as pas besoin de passer par Find. Tu peux boucler sur la collection Bookmarks

    Objet Bookmark
    Collection Bookmarks (Contient un exemple pour ajouter un nouveau signet)

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     wDoc.Bookmarks("nom_client").Range.Text = nom_client
    Ceci étant dit, est-ce que ton modèle est un vrai modèle au sens d'un modèle de Word. (Extension dotx (pas de macros) ou dotm (avec des macros))
    j'ai essayé,
    mais il semblerait que maintenant c'est l'ouverture du fichier qui pose problème.
    J'ai pas mal parcouru le forum et voila ce que j'ai compris:

    Je déclare un objet "wDoc" qui est un "word.Document"
    Ensuite je veux que cet objet prenne la valeur d'un document word déjà construit, qui contient les signets dont j'ai besoin et qui est un vrai document word : .docx
    J'ai uilisé la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wDoc = wApp.Documents.Open("C:\Users\paul.larregle\Desktop\RMA\Retour d_équipement fr.docx")
    avec la variable "wApp" déclaré comme "word.application".

    ensuite je veux remplacer mes signets dans mon objets "wDoc" par des valeurs que j'ai stockés dans des variables types string. Tout ça au moyen des bibliothèques bookmarks
    j'utilise la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wDoc.Bookmarks("nom_client").Range.Text = nom_client
    (est ce que c'est valide ?)

    j'obtiens une erreur "erreur de compilation- Membre de méthode ou de données introuvable" avec le ".Bookmarks" surligné

  8. #8
    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
    Est-ce que tu as validé la bibliothèque d'objets Word (Menu Outils > Références) ?
    Est-ce que tu as créé les Signets aux noms correspondant dans le fichiers Word ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Est-ce que tu as validé la bibliothèque d'objets Word (Menu Outils > Références) ?
    Est-ce que tu as créé les Signets aux noms correspondant dans le fichiers Word ?
    oui et oui,

    j'ai suivis la procédure décrite par microsoft :
    https://support.office.com/fr-fr/art...e-a4009d99c2a0

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut UPDATE
    J'ai enfin trouvé !

    Le code etait bon ! j'avais définie mes signets comme des champs plutôt que comme des signets simple. That is why.

    Merci de votre aide, ce post m'a aidé :
    https://www.developpez.net/forums/d7...erreur-6028-a/

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/11/2018, 11h57
  2. Extraction des chaines de caractères depuis un fichier texte
    Par mond14 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 14/11/2013, 22h48
  3. Réponses: 15
    Dernier message: 31/05/2013, 16h57
  4. [RegEx] Remplacer les numéro par des chaines de caractères
    Par moukit233 dans le forum Langage
    Réponses: 3
    Dernier message: 31/12/2009, 13h22
  5. Repérer des chaines de caractères formatée dans du texte
    Par jeremiegrenoble dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 01/02/2006, 14h06

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