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 :

insertion cellules Excel à la place de variables dans word


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut insertion cellules Excel à la place de variables dans word
    Bonjour,

    Je souhaite faire une macro pour importer des cellules (B1 et B4 par exemple) d'une feuille Excel (onglet feuille 2) dans un fichier word "toto.doc" (en remplacant la variable <<var1>> par le contenu de la cellule B1 et la variable <<var2>> par le contenu de la cellule B2). Puis, je souhaite importer les contenues des cellules A4 et B5 de la feuille Excel (onglet feuille 1) dans le même fichier "toto.doc" (avec var 3 et var4).

    Débutant en VBA, j'avance pas à pas. j'ai tapé ca mais ca ne fonctionne pas, normal je débute (d'ailleur je me demande s'il n'y a pas plus optimum)

    (J'utilise Excell 2002 mais si la nouvelle version d'office est plus adéquat, je changerais)

    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
    Sub Macro1() 
    ' Macro enregistrée le 20/02/2009 par UTILISATEUR 
    ' 
    'selection de la cellule B3 sur la feuille toto (je ne sais pas comment dire onglet feuille 2)
    Worksheets("toto").Activate 
    Range("B1").Select 
    'ouverture du document word 
    Set wrdApp = CreateObject("Word.Application") 
    Set wrdDoc = wrdApp.Documents.Open("C:\Documents and Settings\utilisateur\Mes documents\toto.doc") 
    wrdApp.Visible = True 
    'remplace dans le texte <<var1>> par B1
    doc.Select 
    Selection.Find.ClearFormatting 
    Selection.Find.Replacement.ClearFormatting 
    With Selection.Find 
    .Text = "Selection.copy" 
    .Replacement.Text = "<<var1>>" 
    .Forward = True 
    .Wrap = wdFindContinue 
    .Format = False 
    .MatchCase = True 
    .MatchWholeWord = False 
    .MatchKashida = False 
    .MatchDiacritics = False 
    .MatchAlefHamza = False 
    .MatchControl = False 
    .MatchWildcards = False 
    .MatchSoundsLike = False 
    .MatchAllWordForms = False 
    End With 
    Selection.Find.Execute Replace:=wdReplaceAll 
    End Sub
    Merci pour votre aide

  2. #2
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    un exemple de solution ici

  3. #3
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Salut,
    si tu as des questions complémentaires, pose les, mais JAMAIS par MP.

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Citation Noa56 (extraite d'un MP)
    Wdoc.Fields(1).Result.Text = .Range("D1")
    .Range("D1) je comprends que c'est la cellule de la feuille exel , mais Wdoc.Fields(1).Result.Text je ne voit pas trop ce que c dans mon doc word (j'ai essayé $1 , 1, <<1>> mais ca ne fonctionne pas)

    ca doit etre pour ca qu'il met une erreur du type "L'indice n'appartient pas a la selection" et ensuite il me dit qu'il attend l'execution d'une OLE.

    Sinon, je ne connais pas le publipostagz, c vrai que je me prends peut etre la tete !!!! en tout ca merci.
    je commence par le publiposte, qui est le plus simple et qui convient dasn beaucoup de cas.

    La source de tes données est ici un fichier excel. cas simple.
    Tu crées un modèle Word et via l'assistant de publipostage (mailmerge) tu fixe des signets où tu inidiques d'insérer telle variable (colonne) de ta database (ton ficheir excel), et ainsi de suite avec chaque variable.
    Une fois cela fait pour tous les champs, tu lances la fusion via l'assistant et puis c'est tout.

    Si maintenant tu dois faire des choses plus tordues du genre, insérer un graphique diférent pour chaque personne, imprimer un document différent en fonction de certaines variable (langue), ou que sais-je, laors tu peux passer par du code excel.

    Wdoc.Fields(1).Result.Text = .Range("D1")
    .Range("D1) je comprends que c'est la cellule de la feuille exel , mais Wdoc.Fields(1).Result.Text je ne voit pas trop ce que c dans mon doc word
    Wdoc.Fields(1).Result.Text correspond comme indiqué dans mon explication (il faut lire un peu quand même ) à la première zone variable (d'où le 1) dans l'ordre des varriables de ton document.

    je n'ai jamais fait le test, mais je suppose que tu devrais aussi pouvoir l'appeler par son nom de variable (à tester)

    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Wdoc.Fields("NomdeLaVariable1").Result.Text = .Range("D1")

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    je pense que je ne sais pas créer une "zone variable" ou un "champs nominatif" dans mon document word :
    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 OuvrirWord()
    Dim WdApp As Object
    Dim WdDoc
        Set WdApp = CreateObject("Word.Application")
        Set WdDoc = WdApp.Documents.Open(Filename:="C:\Documents and Settings\utilisateur\Mes documents\Domus Diags\essai.doc")
        DoEvents
        WdApp.Visible = True 'ou False'ton code d'insertion du texte
          With Worksheets("toto").Activate
                 Wdoc.Fields("NomdeLaVariable1").Result.Text = .Range("D1")
    Debogeur met erreur d'execution 424 Objet requis.... je me souviens lorsque je programmais que les variables s'appellaient $NomdelaVariable mais j'ai essayé (Nomdela.., $Nom..., "Nom...", <<Nom....>> , rien n'y fait) 
          End With
    '<<<<< modif
     '...
        DoEvents
        WdDoc.Close True 'Enregistre le document et le ferme
        DoEvents
        WdApp.Quit 'Ferme Word
        Set WdApp = Nothing
        Set WdDoc = Nothing
    End Sub
    J'ai regardé le publipostage, et ce n'est pas adapté car mon but est de créer plusieurs documents words avec les mêmes variables...et non pas avec des données de type tableau

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    RE,
    les variables sont a créer manuellement dans ton document word avant d'exécuter le script VBA exceL, mais je suppose que tu l'as fait.

    Insertion -> Champ -> Champ de fusion -> tu précise le nom de ton champ.

    Pour l'erreur d'exécution, 2 causes qui se cumulent :
    1) Il y a une erreur dans mon code .
    2) Je viens d'essayer de travailler avec le nom du champ, mais cà ne semble pas passer. Il faut utiliser l'index.


    Donc remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Wdoc.Fields("NomdeLaVariable1").Result.Text = .Range("D1")
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WdDoc.Fields(1).Result.Text = .Range("D1")
    en supposant que ta variable est la première.

    J'ai testé, ça marche.

    Sorry pour la boulette.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Le champs de fusion n'existe pas sur word 2002, je vais regardr sur la dernier version et en faire l'aquisition si c OK.....a +

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut retour....
    Bonjour, suite de la discution:
    dans mon doc word,

    je fais champ => MergeField (ChampFusion), je renseigne le Nom du champs (1) ......puis je lance la macro et là :
    Ereur d'éxécution '424' : objet requis.
    il met le débogueur sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WdDoc.Fields(1).Result.Text = .Range("D1")
    sinon, tu parlais de l'index pour l'insertion d'un champs de fusion...c quoi l'index ?
    Merci

Discussions similaires

  1. Variables dans word
    Par Deciprog dans le forum VBA Word
    Réponses: 6
    Dernier message: 26/01/2015, 16h38
  2. [WD-2003] Importer des données Excel en fonction de variables dans Word
    Par kabidan dans le forum VBA Word
    Réponses: 15
    Dernier message: 04/05/2013, 17h26
  3. [WD-2007] Variable dans word
    Par gadaana dans le forum Word
    Réponses: 1
    Dernier message: 11/12/2012, 15h49
  4. Réponses: 4
    Dernier message: 26/04/2011, 13h29
  5. VBA Excel, modifier une lettre type dans word
    Par morgan47 dans le forum VBA Word
    Réponses: 2
    Dernier message: 26/06/2006, 21h02

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