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 :

Macro de recherche dans doc Word fait planter Excel [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 5
    Points
    5
    Par défaut Macro de recherche dans doc Word fait planter Excel
    Bonjour les gens !

    Petit problème aujourd'hui en voulant développer une macro sous Excel (2003) qui ouvre un document Word (2003 aussi, du coup), fait des recherches sur des mots-clés, copie ces mots-clés de Word et les colle dans Excel.

    J'ai donc un fichier Excel avec ma macro, et un fichier Word quelconque que j'ouvre via la macro.

    Voilà un bout de code qui ouvre le fichier Word et lance la recherche :
    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
     
    'ouverture du fichier word
    Set AppliW = New Word.Application   'ouverture d'une instance Word
        AppliW.Visible = True   'rend Word visible
        AppliW.WindowState = wdWindowStateMaximize
        Set DocW = AppliW.Documents.Open(AdressW)   'ouverture du fichier, "AdressW" contient l'adresse absolue du fichier
     
    'Recherche des mots-clés
    With AppliW.Selection.Find
        .Forward = True
        .ClearFormatting
        .MatchWholeWord = False
        .MatchCase = False
        .Wrap = wdFindContinue
        .MatchWildcards = True
        .Text = "PR?SENTATION DE LA MODIFICATION"    'le texte est en majuscules, il peut y avoir ou non un accent en fonction des préférences du rédacteur, d'où le "?" en tant que caractère générique
    End With
    AppliW.Selection.Find.Execute
    (Je vous fais grâce de la suite, en gros ça copie la sélection et ça boucle jusqu'à ce que j'aie fini mon traitement).

    Le problème, c'est que ce code fait planter Excel. Même pas de message d'erreur, juste crash complet.
    En remplaçant le code pour la recherche par celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DocW.Content.Find.Execute findText:="PR?SENTATION DE LA MODIFICATION", MatchCase:=False, MatchWholeWord:=False, MatchWildcards:=True, Forward:=True, Wrap:=wdFindContinue
    j'obtiens cette fois un message d'erreur. Voici la page du support microsoft sur cette erreur : ici.

    L'erreur est donc "Method 'Execute' of object 'Find' failed", mais j'avoue ne pas tout comprendre de cette page d'aide... Ça parle de late binding, mais je ne vois pas quoi en faire. Il faudrait déclarer en late binding la recherche ? L'objet "Find" ? La méthode "Execute" ? Le document Word lui-même ? Comment faire ça ?


    Par ailleurs, j'ai une autre macro sur le même fichier Excel, qui fonctionne un peu de la même façon : ouverture d'un document Word, et recherche & remplace dans ce document. L'ouverture du fichier est identique au code plus haut, et le code de la recherche est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DocW.Content.Find.Execute findText:=Cells(i, 1), ReplaceWith:=Cells(i, 2), Replace:=wdReplaceAll
    Et ce code fonctionne parfaitement, re-testé à l'instant au cas où...

    Si quelqu'un a une idée, merci d'avance !
    (Et désolé d'avance si pas réactif ce soir, je serai de retour demain...)

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    Victoire \o/ !

    Ça y est, problème résolu en fouillant un peu plus : je ne comprenais pas d'où venait l'erreur, ni comment la résoudre en faisant du late binding comme le proposait le support microsoft... parce que je n'avais pas déclaré ma "selection". Donc pour moi, je faisais déjà du late binding, quelque part. (Et comme je suis pas familier du VBA sous Word, je pensais pas qu'on pouvait / devait déclarer une "selection").

    Donc, pour ceux que ça intéresse : il faut déclarer l'objet "selection" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim SelW As Word.Selection
    Sauf que cette manière de le déclarer, c'est du early binding, donc on s'approche de la solution, mais c'est pas encore ça. En fait, il faut déclarer la sélection, mais sans dire que c'est une sélection : de manière générique, on le déclare en tant qu'objet. Ce qui donne :
    Par la suite, c'est en utilisant "Find" sur cette variable "SelW", que ça la définit comme une sélection, on fait donc du late binding dans ce cas.

    Au final, le code devient (en incluant les déclarations, que je n'avais pas recopiées dans mon premier message) :
    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
     
    Dim FichierW As FileDialog
    Dim AdressW As String
    Dim AppliW As Word.Application
    Dim DocW As Word.Document
    Dim SelW As Object
     
    'Sélection fichier word
    On Error GoTo Err_Selection
    Set FichierW = Application.FileDialog(msoFileDialogFilePicker)  'initialisation boite de dialogue de sélection du fichier
    FichierW.Show   'affichage de la boite de dialogue, pour sélection par l'opérateur
    AdressW = FichierW.SelectedItems(1)
    On Error GoTo 0
     
    'ouverture fichier word : si déjà ouvert, récupération du fichier ; sinon, ouverture
    If verif_doc_ouvert(AdressW) = True Then
        Set AppliW = GetObject(, "Word.Application")
        AppliW.WindowState = wdWindowStateMaximize
        Set DocW = AppliW.Documents(AdressW)
    Else
        Set AppliW = New Word.Application   'ouverture d'une instance Word
        AppliW.Visible = True   'rend Word visible
        AppliW.WindowState = wdWindowStateMaximize
        Set DocW = AppliW.Documents.Open(AdressW)   'ouverture du fichier en passant l'adresse du fichier sélectionné
    End If
     
    Set SelW = AppliW.Selection
     
     
    'Recherche dans le document sélectionné
     
    SelW.HomeKey Unit:=wdStory     'positionne le curseur au début du document (au cas où le doc était déjà ouvert avec un curseur positionné sur une autre page, pour commencer la recherche du début)
     
    With SelW.Find
        .Forward = True
        .ClearFormatting
        .MatchWholeWord = False
        .MatchCase = False
        .Wrap = wdFindContinue
        .MatchWildcards = True
        .Text = "PR?SENTATION DE LA MODIFICATION"
    End With
     
    SelW.Find.Execute
    L'instruction pour lancer la recherche peut aussi s'écrire en une seule ligne, comme ceci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SelW.Find.Execute findText:="PR?SENTATION DE LA MODIFICATION", MatchCase:=False, MatchWholeWord:=False, MatchWildcards:=True, Forward:=True, Wrap:=wdFindContinue

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

Discussions similaires

  1. [XL-2010] Bug dans macro qui reunit plusieurs doc word en 1 seul
    Par dany13 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/05/2012, 11h23
  2. [XL-2003] Macro VBA copie valeur cellule excel et colle dans doc word
    Par tony020422 dans le forum Macros et VBA Excel
    Réponses: 54
    Dernier message: 03/06/2009, 09h21
  3. Macro VB recherche puce dans doc Word
    Par elliotttt dans le forum VBA Word
    Réponses: 1
    Dernier message: 08/01/2009, 19h05
  4. L'appel de la bibliothèque Word fait planter Excel
    Par quangdao dans le forum VBA Word
    Réponses: 3
    Dernier message: 03/12/2008, 18h23
  5. Macro de recherche dans WORD
    Par damall dans le forum VBA Word
    Réponses: 11
    Dernier message: 25/08/2007, 11h13

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