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 :

Copier des données dans Excel et les Coller dans Word. [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 215
    Points : 523
    Points
    523
    Par défaut Copier des données dans Excel et les Coller dans Word.
    Bonjour,

    Je cherche une macro me permettant de copier des données (pourcentages calcul grace à une formule) puis de coller le résultat (collage spécial) à un endroit bien précis dans une lettre faite avec Word.

    Ex : Dans Excel => De A1:A100, j'inscris aléatoirement "OUI" ou "NON"
    En A101 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI(A1:A100;"oui")/100
    Format de cellule : Pourcentage.

    Ce qui me calcule le pourcentage de "OUI" par rapport au "NON", par exemple : 64%

    Ensuite, la macro doit ouvrir une lettre type déjà tapée sur Word et à un endroit précis du texte de cette lettre, le résultat doit venir se coller.

    Ex : Dans Word => Monsieur XXXX, veuillez constater que le pourcentage de "OUI" s'élève à 64% pour le mois d'octobre 2012.

    Quelqu'un saurait il me dépatouiller de cette galère ?

    Cordialement,
    Graphikris.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut graphikris

    Voici un code que j'utilise au boulot, à adapter

    Il faut activer la référence "Microsoft Word xx.x Object Library"

    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
      ' Chemin d'accès du document Word
      VPath = ThisWorkbook.Path & "\"
      ' Nom du fichier
      VFic = "fichier_modele.doc"
      ' Créer une instance de Word
      Set AppWd = New Word.Application
      ' Ouvrir le fichier et Afficher l'application
      AppWd.Documents.Open VPath & VFic
      AppWd.Visible = True
      Set WdDoc = AppWd.ActiveDocument
      ' Se positionner sur la balise <TABLEAU> qui est inscrite dans le document Word
      With AppWd.Selection.Find
        .ClearFormatting
        .Text = "<TABLEAU>"
        .MatchWildcards = False
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
      End With
      AppWd.Selection.Find.Execute
      ' Copier le tableau de la feuille "Rappels" dans excel
      With Sheets("Rappels")
        DLigR = .Range("F" & Rows.Count).End(xlUp).Row
        .Range("A1:F" & DLigR).Copy
        ' Le coller dans Word
        AppWd.Selection.Paste
      End With
    J'espère que ce code sera assez explicite

    A+
    Dernière modification par Invité ; 18/05/2013 à 18h19.

  3. #3
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 215
    Points : 523
    Points
    523
    Par défaut
    Bjr et merci,
    je vais essayé de bidouiller ton code afin de l'adapter à ce que je veux faire.
    Je te tiens au courant (abonnes toi à la discussion de mon post).

    Cordialement
    Graphikris.

    N'arrivant pas à adapter ce code aimablement envoyé, je recherche a nouveau quelqu'un qui saurait faire car dans le code transmis, c'est pour coller un tableau mais pour mon post, c'est des chiffres à différents endroits dans le fichier Word.
    Si vous désirez que je vous transmette les 2 fichiers (excel et word), demandez le moi.

    Cordialement,
    Graphikris.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Désolé,

    Je ne l'avais pas compris ainsi

    Tu peux donc utiliser ceci à la place
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ' Chemin d'accès du document Word
      VPath = ThisWorkbook.Path & "\"
      ' Nom du fichier
      VFic = "fichier_modele.doc"
      ' Créer une instance de Word
      Set AppWd = New Word.Application
      ' Ouvrir le fichier et Afficher l'application
      AppWd.Documents.Open VPath & VFic
      AppWd.Visible = True
      Set WdDoc = AppWd.ActiveDocument
      ' Inscrire la valeur à la place de la balise <POURCENTAGE>
      VTemp = Format(Range("A1"),"0.00%")
      Ecriture_balise "POURCENTAGE", VTemp
    La Sub d'écriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Sélection et remplacement de toutes les balises du modèle word associées à la ligne par la chaîne de caractères associée
    Sub Ecriture_balise(LibBalise As String, ValBalise As String)
      Dim Balise As String
      Balise = "<" & LibBalise & ">"
      ' Remplacement de "<Balise>" par "Valeur_balise" dans le document
      WdDoc.Content.Find.Execute FindText:=Balise, ReplaceWith:=ValBalise, Replace:=wdReplaceAll  'Remplacement"
    End Sub
    A+

  5. #5
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 215
    Points : 523
    Points
    523
    Par défaut
    Merci,
    mais c'est quoi la Sub écriture ?
    Je place où les modules ?
    Excel, Word ?

    Cordialement

  6. #6
    Invité
    Invité(e)
    Par défaut
    Whouaouuuu, indique le dans ta signature que tu es débutant

    Dans un MODULE
    Tu crées un Sub Toto()
    Dans laquelle tu mets le premier code
    Ensuite tu copie et colles la sub écriture à la fin du même module

    Dans ton modèle Word tu mets les balises souhaitées en écrivant entre "<" & ">" le nom de la balise

    Tu n'as plus qu'à lancer le code de la première sub

    a+

  7. #7
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 215
    Points : 523
    Points
    523
    Par défaut
    Ok merci, juste une chose dans word pour la balise, si j'ai bien compris, je fais un truc du genre :

    Monsieur,
    le chiffre du mois précédent est <X>%
    le chiffre de ce mois est <Y>%

    mais comment je fais dans la macro pour que par exemple, si c'est la cellule B8 de la feuil1 qui correspond à X et la cellule D3 qui correspond à Y ?

    Cordialement,
    Graphikris.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re,

    Je ne le fais pas en général, mais un exemple sera plus parlant

    A+
    Fichiers attachés Fichiers attachés

  9. #9
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Regarde avec ce qui suit et adapte. Il faut que tu crée un signet dans ton document Word appelé "Pourcent" (tu surligne "s'élève à" puis Insertion > Signet "Pourcent" > Ajouter), le pourcentage sera inséré juste après lui. Dans mon exemple, il te faut adapter le chemin du document Word (ici, "D:\Test.doc") :
    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
     
    Sub ExcelVersWord()
     
        Dim AppWord As Word.Application
        Dim Doc As Word.Document
     
        'crée une instance de Word
        Set AppWord = CreateObject("Word.Application")
     
        With AppWord
     
            'la rend visible
            .Visible = True
     
            'ouvre un document
            Set Doc = .Documents.Open("D:\Test.doc")
     
            With Doc
     
                'insère le texte après le signet
                .Bookmarks("Pourcent").Range.InsertAfter " " & Format(Range("A101"), "0.00%")
     
            End With
     
        End With
     
    End Sub
    Hervé.

    Ah, J'ai oublié de te dire qu'il te faut cocher la référence à Word : Outils > Références > "Microsoft Word xx.x Object Library", xx.x étant la version que tu possède.

    Hervé.

  10. #10
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 215
    Points : 523
    Points
    523
    Par défaut
    Bonjour Theze,

    Ton code marche à merveille, reste une question que je n'arrive pas à résoudre.
    Il faudrait qu'une fois le fichier word ouvert avec les données collées au bon endroit, que je puisse imprimer le document et qu'à l'issue les données collées soient supprimées pour éviter que lorsque je redéclenche la macro le mois suivant les données précédentes soient toujours là.
    En fait après l'impression, le fichier Word devrait se fermer automatiquement sans enregistrer les modif.

    Cordialement
    Graphikris.

  11. #11
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Essai avec ceci, ça devrait convenir :
    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
     
    Sub ExcelVersWord()
     
        Dim AppWord As Word.Application
        Dim Doc As Word.Document
     
        'crée une instance de Word
        Set AppWord = CreateObject("Word.Application")
     
        With AppWord
     
            'la rend visible
            .Visible = True
     
            'ouvre un document
            Set Doc = .Documents.Open("D:\Test.doc")
     
            With Doc
     
                'insère le texte après le signet
                .Bookmarks("Pourcent").Range.InsertAfter " " & Format(Range("A101"), "0.00%")
     
                'impression
                .PrintOut
     
                'aperçu avant impression
                '.PrintPreview
     
            End With
     
            'quitte l'application sans enregistrer
            .Quit False
     
        End With
     
    End Sub
    Hervé.

  12. #12
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 215
    Points : 523
    Points
    523
    Par défaut
    Bjr Theze,

    çà fonctionne bien mais lorsque le fichier Word se ferme, il me demande de l'enregistrer en : normal.dot car il me dit que le fichier est ouvert par une autre application (je suppose que c'est la macro) ! ! !

    Cordialement,
    Graphikris.

  13. #13
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Essai de mettre la ligne suivante après l'impression :
    Ceci indique au compilateur que le document n'a été modifié depuis sa dernière ouverture.
    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
     
    Sub ExcelVersWord()
     
        Dim AppWord As Word.Application
        Dim Doc As Word.Document
     
        'crée une instance de Word
        Set AppWord = CreateObject("Word.Application")
     
        With AppWord
     
            'la rend visible
            .Visible = True
     
            'ouvre un document
            Set Doc = .Documents.Open("D:\Test.doc")
     
            With Doc
     
                'insère le texte après le signet
                .Bookmarks("Pourcent").Range.InsertAfter " " & Format(Range("A101"), "0.00%")
     
                'impression
                .PrintOut
     
                'aperçu avant impression
                '.PrintPreview
     
                'indique au compilateur que le document n'a pas été modifié
                .Saved = True
     
            End With
     
            'quitte l'application sans enregistrer
            .Quit False
     
        End With
     
    End Sub
    Hervé.

  14. #14
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 215
    Points : 523
    Points
    523
    Par défaut
    Theze

    çà fonctionne.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/10/2010, 14h31
  2. Copier des données d'un xls et coller dans le workbook
    Par baleiney dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/08/2009, 17h11
  3. [MySQL] Récupérer des données de MySQL et les envoyer dans un PDF
    Par cdevl32 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 16/03/2009, 20h53
  4. trier des données sur excel via les MFC
    Par craryb dans le forum MFC
    Réponses: 1
    Dernier message: 22/03/2007, 14h51
  5. [VBA-A]Copier des données d'Excel vers Word
    Par soad029 dans le forum VBA Word
    Réponses: 15
    Dernier message: 16/03/2006, 11h56

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