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 :

[VBA-E] liaison entre Excel et Word


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 26
    Points
    26
    Par défaut [VBA-E] liaison entre Excel et Word
    A partir d'excel je souhaite qu'un nouveau doc. Word s'ouvre en format paysage. Mon code ne fonctionne pas corectement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'Ajoute un nouveau document
    With appword
        .Visible = True
        Set docword = .Documents.Add
        .Activate
    End With
     
    'Mise en page paysage
    With ActiveDocument.PageSetup
        .Orientation = wdOrientLandscape
    End With

    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    cette synthaxe fonctionne chez moi

    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
     
    Dim appWord As Word.Application
    Dim docWord As Word.Document
     
    Set appWord = CreateObject("Word.Application")
     
    'Ajoute un nouveau document
    With appWord
        .Visible = True
        Set docWord = .Documents.Add
        .Activate
    End With
     
    'Mise en page paysage
    docWord.PageSetup.Orientation = wdOrientLandscape

    bon apres midi
    michel

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    Merci Michel, le code fonctionne maintenant correctement.
    Je me suis aperçu d'un nouveau problème qui est le suivant:
    Lors de la liaison avec Word, le code permet de coller les graphiques et tableaux réalisés dans Excel.
    Cependant une fois Word ouvert, si l'utilisateur relance la demande l'erreur suivante apparaît:

    Erreur 5356
    Erreur définie par l'application ou par l'objet.

    Par quel moyen est-il possible de supprimer cette erreur 5356 et d'afficher une information. Par exemple "Le document est déjà ouvert"

    Mon code réalisé à l'aide d'un bouquin et de "bricolage" est 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
     
    Private Sub CopieDansWord_Click()
    Dim appword As New Word.Application
    Dim docword As New Word.document
    Dim rng As Range
     
    'Ajoute un nouveau document
    With appword
    .Visible = True
    Set docword = .Documents.Add
    .Activate
    'Mise en page paysage
    docword.PageSetup.Orientation = wdOrientLandscape
    End With
     
    'Ajoute une ligne de titre et la met en forme
    With appword.Selection
    .TypeText Text:=""
    .HomeKey Unit:=wdLine
    .EndKey Unit:=wdLine, Extend:=wdExtend
    .ParagraphFormat.Alignment = wdAlignParagraphCenter
    .Font.Size = 1
    With .Font
    .Name = "Arial"
    .Bold = False
    .Italic = False
    .smallcaps = False
    End With
     
    'Copie le tableau excel "reception" dans le presse-papiers
    Range("B2:N4").Copy
     
    'Colle le tableau dans Word avec liaison
    .EndKey Unit:=wdLine
    .TypeParagraph
    .TypeParagraph
    .PasteSpecial link:=True, DataType:=wdpastOLEObject, Placement:=wdInLine, DisplayAsIcon:=False
     
     
    '###########################################################
     
    'Copie le tableau excel "reception" dans le presse-papiers
    Range("B11:N22").Copy
     
    'Colle le tableau dans Word avec liaison
    .EndKey Unit:=wdLine
    .TypeParagraph
    .TypeParagraph
    .PasteSpecial link:=True, DataType:=wdpastOLEObject, Placement:=wdInLine, DisplayAsIcon:=False
     
    'Copie le graphique "reception" dans le presse-papiers
    Worksheets("TB Activité").ChartObjects(1).Activate
    ActiveChart.ChartArea.Select
    ActiveChart.ChartArea.Copy
     
    'Colle le graphique dans Word avec liaison
    .TypeParagraph
    .TypeParagraph
    .PasteAndFormat (wdchartlinked)
     
    '#########################################################
     
    'Copie le tableau excel "stockage" dans le presse-papiers
    Range("B23:N34").Copy
     
    'Colle le tableau dans Word avec liaison
    .EndKey Unit:=wdLine
    .TypeParagraph
    .TypeParagraph
    .PasteSpecial link:=True, DataType:=wdpastOLEObject, Placement:=wdInLine, DisplayAsIcon:=False
     
    'Copie le graphique "stockage" dans le presse-papiers
    Worksheets("TB Activité").ChartObjects(2).Activate
    ActiveChart.ChartArea.Select
    ActiveChart.ChartArea.Copy
     
    'Colle le graphique dans Word avec liaison
    .TypeParagraph
    .TypeParagraph
    .PasteAndFormat (wdchartlinked)
     
     
    '#############################################################
     
     
    'Copie le tableau excel "préparation" dans le presse-papiers
    Range("B35:N46").Copy
     
    'Colle le tableau dans Word avec liaison
    .EndKey Unit:=wdLine
    .TypeParagraph
    .TypeParagraph
    .PasteSpecial link:=True, DataType:=wdpastOLEObject, Placement:=wdInLine, DisplayAsIcon:=False
     
    'Copie le graphique "préparation" dans le presse-papiers
    Worksheets("TB Activité").ChartObjects(3).Activate
    ActiveChart.ChartArea.Select
    ActiveChart.ChartArea.Copy
     
    'Colle le graphique dans Word avec liaison
    .TypeParagraph
    .TypeParagraph
    .PasteAndFormat (wdchartlinked)
     
     
    '#############################################################
     
     
    'Copie le tableau excel "expédition" dans le presse-papiers
    Range("B47:N58").Copy
     
    'Colle le tableau dans Word avec liaison
    .EndKey Unit:=wdLine
    .TypeParagraph
    .TypeParagraph
    .PasteSpecial link:=True, DataType:=wdpastOLEObject, Placement:=wdInLine, DisplayAsIcon:=False
     
    'Copie le graphique "expédition" dans le presse-papiers
    Worksheets("TB Activité").ChartObjects(4).Activate
    ActiveChart.ChartArea.Select
    ActiveChart.ChartArea.Copy
     
    'Colle le graphique dans Word avec liaison
    .TypeParagraph
    .TypeParagraph
    .PasteAndFormat (wdchartlinked)
     
    '#############################################################
     
    End With
     
    With docword
    'Enregistre le document Word dans le même dossier que le classeur excel
    .SaveAs ThisWorkbook.Path & "\TB Activité.doc", Allowsubstitutions:=True
     
    'Aperçu du résultat dans Word
    .PrintPreview
     
    End With
    'Réinitialise l'objet
    Set appword = Nothing
     
    End Sub
    Je souhaite également savoir comment modifié mon code si je supprime l'ajout de la ligne de titre et sa mise en forme.
    Je ne comprend pas:
    . EndKey Unit:=wdLine
    . TypeParagraph
    . TypeParagraph

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    rebonjour


    tu pourrais par exemple bloquer l'utilisation du bouton en debut de procédure


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub CopieDansWord_Click()
    Dim appword As New Word.Application
    Dim docword As New Word.document
    Dim rng As Range
     
    Feuil1.CopieDansWord.Enabled = False
     
    'Ajoute un nouveau document
    With appword
    .Visible = True
    '
    '
    '....


    et débloquer quand le document Word est refermé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.CopieDansWord.Enabled = True


    bonne soiree
    michel

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    J'ai résolu le problème (erreur lors d'une seconde ouverture de word) par la fermeture automatique de Word. L'utilisateur est alors informé par le message: Votre doc. est crée dans le dossier...

    Pour l'enregistrement du Doc. Word, est-il possible d'associer au nom du fichier, la valeur d'une cellule qui correspond à une date (année seulement).

    With docword
    'Enregistre le document Word dans le même dossier que le classeur excel
    .SaveAs ThisWorkbook.Path & "\TB Activité & ???? .doc", Allowsubstitutions:=True


    Merci encore pour l'aide

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    tu peux tester cette adaptation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim laDate As Long
     
    laDate = Format(Sheets("Feuil2").Range("A1"), "yyyy")
     
    With docword
    'Enregistre le document Word dans le même dossier que le classeur excel
    .SaveAs ThisWorkbook.Path & "\TB Activité" & laDate & ".doc", Allowsubstitutions:=True
    '
    '...
    '

    la date est récupérée dans la cellule A1 de la Feuil2

    bonne journée
    michel

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 26
    Points
    26
    Par défaut Limiter la saisie dans une inputbox
    Bonjour,

    Comment limiter la saisie dans une inputbox à 4 chiffres (année).

    Voici l'invite de la boite de dialogue:

    Annee = InputBox(Prompt:="Veuillez entrer une année, par exemple 2000", _
    Title:="Impression impossible", Default:="Année")

    Merci

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    Quelqu'un à une idée ?
    Après plusieurs tests je n'arrive toujours pas à utiliser la boucle For...Next pour la barre de progression lors de la liaison avec Word (Copier/Coller).

    Merci d'avance

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour Fred


    je ne sais pas s'il est possible de limiter le nombre de caracteres dans un InputBox , mais tu peux essayer cette procedure:
    la boite de dialogue restera affichée jusqu'a ce qu'une valeur numerique de 4 caracteres soit saisie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Annee As Variant
    Do
    Annee = _
    Application.InputBox(Prompt:="Veuillez entrer une année, par exemple 2000")
        'enlever cette ligne pour ne pas autoriser l'utilisation du bouton 
        'annuler & la croix de fermeture 
        If VarType(Annee) = vbBoolean Then MsgBox "Operation annulée": Exit Sub
    Loop While Not IsNumeric(Annee) Or Len(Annee) <> 4

    ta procedure de copier/coller ne se prete pas vraiment à l'utilisation d'une barre de progression :
    dans le meilleur des cas tu pourrais afficher un message d'attente , par exemple dans la barre de statut ...


    L'ideal pour rendre invisible la sélection des tableaux et graphiques ....est de ne pas utiliser les Activate et les Select dans la procedure ...
    de plus cela réduira le temps de calcul
    tu peux auss utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    pour figer l'ecran


    bonne apres midi
    michel

  10. #10
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Salut Silky,
    Moi, j'aime bien faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.InputBox("Veuillez entrer une année, par exemple 2000", "", Annee)

    Just pour t'embêter

    A+

    PS - Je te croyais sous le soleil...

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Merci Michel pour les réponses.

    Pour afficher un message d'attente lors de la procédure (copier/coller Excel vers Word), j'ai crée un formulaire.

    Le code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'En début de procédure
    Load.Attente
    Attente.Show
     
    '.....
    '.....
     
    'En fin de procèdure
    Attente.Hide
    Le formulaire s'affiche correctement, cependant le label1 ("Patientez") n'apparait pas. On ne voit que la fenêtre du formulaire et l'intérieur est blanc ??

  12. #12
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Place un "DoEvents" ou un "LUserform.repaint" ou les deux dans Sub Userform_Initialize()

    Tu dis

    A+

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 26
    Points
    26
    Par défaut [VBA6 E] Pied de page Word
    Bonjour,

    Merci pour la réponse...

    Lors de la liaison d'excel vers Word je souhaite insérer une image dans le pied de page du Doc. Word (logo de l'entreprise), cependant je ne trouve pas le code approprié. Quelqu'un à une idée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Insertion d'un pied de page
    With docword.Sections(1)
    .Footers(wdHeaderFooterPrimary).Range.Text = "- Désignation de l'entreprise -"
    .Footers(wdHeaderFooterPrimary).Range.Paragraphs.Alignment = wdAlignParagraphCenter
    .Footers(wdHeaderFooterPrimary).PageNumbers.Add
    End With

  14. #14
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Le sujet de discussion ayant changé, tu devrais mettre Résolu pour le précédent et poster une nouvelle discussion... A moins que ce ne soit déjà fait.

    A+

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

Discussions similaires

  1. VBA nouvelle liaison entre 2 fichiers excel
    Par Rynn dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/09/2012, 22h27
  2. Liaison entre Excel(E03- VBA) & DB AS400 (ADO)
    Par Godzestla dans le forum AS/400
    Réponses: 11
    Dernier message: 20/01/2009, 14h46
  3. [VBA-A] liaison entre deux tables
    Par lumbroso dans le forum VBA Access
    Réponses: 16
    Dernier message: 01/06/2006, 10h22
  4. [VBA-E]Insertion graphique Excel dans Word
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/04/2006, 14h26
  5. [VBA-E]Problème entre Excel et Word
    Par Ritter dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 08/02/2006, 19h03

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