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 :

Ecrire dans word depuis Excel: quel logique utiliser ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Points : 102
    Points
    102
    Par défaut Ecrire dans word depuis Excel: quel logique utiliser ?
    Bonjour à tous,

    Ici ma question est vraiment orientée logique... Je m'explique:

    Grâce à l'enregistreur de macro de word, j'ai pu récupérer des macro qui m'intéressent: écrire un titre, saute de page, ...

    Ma question est donc :

    Est-ce que je dois incorporer mes macro word à excel et les utiliser depuis Excel (pour écrire dans word) ?

    Ou est-ce que je dois déclencher mes macro word (qui sont donc dans word) depuis Excel ?

    Dans un cas comme dans l'autre, comment déclencher ces macro ?

    Merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 121
    Points : 9 948
    Points
    9 948
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    personnellement, je pilote tout depuis la macro Excel.
    je ne fais jamais d'automation sur word, plutôt entre Excel et Outlook (dans un sens comme dans l'autre), et ça fonctionne sur le même principe.

    voici par exemple comment une macro Outlook ouvre un classeur Excel et écris des choses dedans
    tu constatera que je suis en Late Binding, mais on pourrait travailler en Early Binding (que je déconseille pour des soucis de compatibilité si tu dois diffuser ton fichier)


    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
    Option Compare Text
     
    Sub EcrireDansExcelDepuisOutlook()
     
        Dim ListeFeuilleBDD() As Variant
     
        ' variables pour Excel
        ' on va travailler en liaison tardive
        Dim xlApp As Object
        Dim xlWb As Object
        Dim xlShBDD As Object
     
        Set xlApp = CreateObject("Excel.Application")
        xlApp.Visible = True
     
        xlApp.Workbooks.Open Chemin
     
        On Error Resume Next
        xlApp.Activate
        On Error GoTo 0
     
        Set xlWb = xlApp.Workbooks("NomClasseur")
     
        For n = LBound(ListeFeuilleBDD) To UBound(ListeFeuilleBDD)
     
            Set xlShBDD = xlWb.Worksheets(ListeFeuilleBDD(n))
     
            xlShBDD.AutoFilterMode = False
            xlShBDD.UsedRange.EntireRow.Delete
            xlWb.Save
     
            xlShBDD.Cells(xlShBDD.UsedRange.Rows.Count, 1) = "Boite mail"
            xlShBDD.Cells(xlShBDD.UsedRange.Rows.Count, 2) = "MEDIA"
            xlShBDD.Cells(xlShBDD.UsedRange.Rows.Count, 3) = "EQUIPE"
            xlShBDD.Cells(xlShBDD.UsedRange.Rows.Count, 4) = "POLE"
            xlShBDD.Cells(xlShBDD.UsedRange.Rows.Count, 5) = "PRODUIT"
            xlShBDD.Cells(xlShBDD.UsedRange.Rows.Count, 6) = "ITEM"
            xlShBDD.Cells(xlShBDD.UsedRange.Rows.Count, 7) = "DOSSIER5"
            xlShBDD.Cells(xlShBDD.UsedRange.Rows.Count, 8) = "DOSSIER6"
            xlShBDD.Cells(xlShBDD.UsedRange.Rows.Count, 9) = "NB"
            xlShBDD.Cells(xlShBDD.UsedRange.Rows.Count, 10) = "PLUS ANCIEN"
     
     
        Next n
     
        xlWb.Close True
        xlApp.Quit
     
    End Sub

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Points : 102
    Points
    102
    Par défaut Re
    Re re,

    On est abonné on dirait

    Si j'ai bien compris ce que tu as dit, les macro que j'ai crées via l’enregistreur de macro dans Word peuvent "simplement" être copiées-collées dans Excel ? Et donc, pour qu'elles agissent sur le document word, il faut comme tu as fait, ouvrir le document (ou créer) le document word ?


    Petites questions sur ton code maintenant:

    1. "chemin", je suppose qu'il a été défini en dehors de cette macro et qu'il contient l'adresse du document Excel que tu souhaites ouvrir.
    2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       For n = LBound(ListeFeuilleBDD) To UBound(ListeFeuilleBDD)
    Je ne comprends pas bien cette ligne :/ Qu'est-ce que "ListeFeuilleBDD" concrètement ?

    3. C'est quoi le late Binding et le early Binding ? ^^" (j'ai commencé à lire le tuto sur les ADO mais dur dur)

    Merci à toi, encore une fois, pour ton aide !

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 121
    Points : 9 948
    Points
    9 948
    Billets dans le blog
    5
    Par défaut
    En fait, le code que je t'ai montré est beaucoup plus complexe (environ 1000 lignes)

    j'ai supprimé tout ce qui avait trait direct à Outlook (variables, navigations dans les dossiers, recherches de mails par classe ou par restriction etc...)

    Chemin était le chemin complet du fichier excel à ouvrir, j'ai juste rendu anonyme le chemin dans mon exemple
    ListeFeuilleBDD est simplement un array dans lequel j'ai stocké le nom de plusieurs feuilles de mon fichier Excel. Je faisais une boucle sur chaque feuille


    Pourquoi t'ai-je montré ce code alors ? Tout simplement pour que tu constates qu'on peut très bien manipuler les objets d'une application office (Excel ici) depuis une autre application office (Outlook)

    j'utilise des Worksheets, des Ranges, des Cells etc... de manière transparente, car j'ai crée une instance Excel ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set xlApp = CreateObject("Excel.Application")
    donc tout ce que je rattache à cette instance devient Excel compatible en termes d'objet, méthodes, propriétés


    Il me semble cohérent de penser que l'automation Excel-Word est aussi transparente ... mais je n'utilise jamais Word, je ne peux dont pas le certifier.
    Charge à toi de nous dire si j'ai eu raison quand tu auras testé

    Concernant le Early et Late Binding, c'est toujours un grand débat
    plutôt que d'entrer dedans, je t'invite à bien assimiler ça : http://mhubiche.developpez.com/vba/f...endre/binding/


    tu comprendras pourquoi je te préconise du Late Binding en termes de compatibilité ... car en Early Binding, tout utilisateur de tes macros devront avoir coché la bonne référence dans leur VBE !

    ceci se fera cependant avec quelques inconvénients, en Late Binding :

    - tu perds la saisie intuitive de tes méthodes et objets, ainsi que la mise en forme orthographique (majuscule automatique sur un type d'objet, une méthode etc..)

    - le code est plus long à tourner, car on demande à VBA un effort supplémentaire pour manipuler les objets etc...

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Points : 102
    Points
    102
    Par défaut Re
    Ben écoute, merci vraiment pour tes explications et je m'engage à poster la réponse, ici même, incessamment sous peu !


    Bonne soirée

Discussions similaires

  1. Rechercher/remplacer par dans word depuis Excel
    Par ANOVA dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/08/2011, 17h00
  2. Réponses: 7
    Dernier message: 03/04/2011, 20h37
  3. Trouver un caractère spécial dans Word depuis Excel en VB
    Par JJMB92 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 11/02/2010, 17h00
  4. en-tête et pied de page dans Word depuis Excel
    Par fabfaz dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 09/04/2008, 20h28
  5. coller une plage dans word depuis excel
    Par tarmin dans le forum VBA Word
    Réponses: 7
    Dernier message: 18/01/2006, 10h16

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