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

VBA Word Discussion :

Donnée d'une cellule excel vers une variable word [WD-2010]


Sujet :

VBA Word

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    RAS
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : RAS
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 25
    Points
    25
    Par défaut Donnée d'une cellule excel vers une variable word
    Bonjour,

    Pour un besoin de dialogue entre Word et excel, j'ai récupéré ce bout de code.
    -> Coller une plage de cellules Excel dans Word

    Le but de mon fichier Word est de crée un rapport d'activité du mois en cours.
    mon Pb :
    • Mes connaissances en VBA Word
    • Trop de signet dans mon fichier Word
    • Transformer la valeur d'excel en variable Word pour un traitement ultérieur


    Mon code mais je tourne en rond depuis une semaine avec la variable...
    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 VariableExcelDansWord3()
     
    '   Param Excel
        Dim XlAppli
        Dim XlCl
        Dim Xlfl
        Dim Plage
     
        Set XlAppli = CreateObject("Excel.Application") 
        ' -> L'appli Excel
            Set XlCl = XlAppli.Workbooks.Open("E:\Planning\Planning_2015.xlsm")
            ' -> le classeur
            Set Xlfl = XlCl.Worksheets("Rapport") 
            ' -> la feuille
     
    '   Param Word
    '   code original pour recuperation d'une valeur excel vers un signet Word
        ' ActiveDocument.Bookmarks("A_P01_NumDeJour_S04").Select
            ' Insertion de la valeur de la cellule
            ' Selection.TypeText Text:=Xlfl.Range("AO41").Value
            ' DoEvents
     
    '   Mon test de code recuperation d'une valeur excel vers une variable  Word
        ' ThisDocument.Range.Text = maVariableWord
        maVariableWord = ActiveDocument.Select
     
            Selection.TypeText Text:=Xlfl.Range("B1").Value
            DoEvents
     
        MsgBox "maVariableWord : " & maVariableWord
     
    '   Ferme Excel
                XlCl.Close False 'ferme le classeur Excel sans enregistrer
                    DoEvents ' laisse au système le temps de fermer le classeur
                XlAppli.Quit ' Ferme Excel
        Set XlAppli = Nothing ' supprime les instances
        Set XlCl = Nothing
        Set Xlfl = Nothing
    End Sub

    Merci d'avance de votre Aide.

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Voici une macro Word qui récupère la valeur de la cellule A1 de la feuille "Feuil1", du classeur 392.xlsx. Faire les adaptations qui s'imposent. Comme je déteste CreateObject() et que j'aime avoir l'aide de VBA Excel dans VBA Word, je passe par la liaison précoce et j'ajoute la référence à Excel, dans Outils-Références.
    Donc, si tu n'ajoutes pas la référence à Excel dans VBA Word, mon code va planter.

    SVP, pas de plainte si la référence n'a pas été ajoutée.

    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
    Sub RécupérerDansExcel()
        'Ajouter la référence à Microsoft Excelxx Object Library
        'Sinon ne pas se plaindre
        'Pour les fins de la discussion,
        'mon classeur Excel se nomme 392.xlsx,
        'Il est dans Mes documents
        'Et il a 392 dans la cellule A1
        'de la Feuil1
        'Au besoin, faire les ajustements qui s'imposent
        Dim AppXL As Excel.Application
        Set AppXL = New Excel.Application
        AppXL.Visible = True
        Dim Classeur As Excel.Workbook
        Set Classeur = AppXL.Workbooks.Open("392.xlsx")
        Dim LaFeuille As Excel.Worksheet
        Set LaFeuille = Classeur.Sheets("Feuil1")
        Dim LaVariableWord As Integer
        LaVariableWord = LaFeuille.Range("A1").Value
        MsgBox (LaVariableWord)
        AppXL.Quit
    End Sub
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    RAS
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : RAS
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 25
    Points
    25
    Par défaut
    Bonjour clementmarcotte,

    Un grand merci pour ton aide

    Il me reste un grosse question, par rapport a une de tes remarques.
    Comme je déteste CreateObject() et que j'aime avoir l'aide de VBA Excel dans VBA Word, je passe par la liaison précoce
    • En quoi "CreateObject()" est si désagréable.
    • il a l'avantage de ne pas être obligé d'Ajouter la référence à Microsoft Excelxx Object Library
    • pratique si mon fichier Word et utilisable par plusieurs PC



    La deuxième question, si elle est compliqué je ferais une suite dans une autre discussion
    • J'ai réussi à intégrer ma variable dans un signet Word.
    • ActiveDocument.Bookmarks("Boucle").Range.Text
    • C'est le "range" qui m'embete un peux, mais ça fonctionne
    • -> est-ce correcte, quand même?

    Mon bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ' remplace dans word le signet = Boucle
        ActiveDocument.Bookmarks("Boucle").Range.Text = LaVariableWord1

    Voici mon code avec une boucle pour récupérer plusieurs cellules et en faire une variable.
    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
    Sub JojoSs_Boucle()
        Dim AppXL As Excel.Application
            Set AppXL = New Excel.Application
            ' AppXL.Visible = False
            AppXL.Visible = True
        Dim Classeur As Excel.Workbook
            Set Classeur = AppXL.Workbooks.Open("E:\Planning\Planning_2015.xlsx")
        Dim LaFeuille As Excel.Worksheet
            Set LaFeuille = Classeur.Sheets("Rapport")
     
    ' Valeurs de la cellule de départ
        Dim XlsCellsColonne As Integer
            XlsCellsColonne = 12
        Dim XlsCellsLigne As Integer
            XlsCellsLigne = 56
     
     ' Valeur dans la boucle au départ
        Dim LeCompteurBoucle As Integer
            LeCompteurBoucle = 0
        Dim LaVariableWord1 As String
        Dim LaVariableWord2  As String
     
    ' Debut de Boucle
        For LeCompteurBoucle = 1 To 20
     
            LaVariableWord2 = LaFeuille.Cells(XlsCellsLigne, XlsCellsColonne).Value
            DoEvents
     
            LaVariableWord1 = LaVariableWord1 + LaVariableWord2
            XlsCellsColonne = XlsCellsColonne + 1
            MsgBox "LeCompteurBoucle : " & LeCompteurBoucle & "/20" & vbCrLf & _
                    "XlsCellsColonne : " & XlsCellsColonne & vbCrLf & _
                    "LaVariableWord1 : " & LaVariableWord1 & vbCrLf & _
                    "LaVariableWord2 : " & LaVariableWord2
     
        Next LeCompteurBoucle
            MsgBox "Fin de boucle"
     
    ' Remplace dans word le signet = Boucle
        ActiveDocument.Bookmarks("Boucle").Range.Text = LaVariableWord1
     
    End Sub

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Je suis comme clementmarcotte, je préfère de loin utiliser l'EarlyBinding.
    L'avantage est l'intellisense du VBA, ça évite les erreurs.
    Et si mon projet doit être porté sur plusieurs versions, ce n'est qu'on dernier moment que je bascule vers le LateBinding.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par JojoSs Voir le message
    Bonjour clementmarcotte,

    Un grand merci pour ton aide

    Il me reste un grosse question, par rapport a une de tes remarques.

    • En quoi "CreateObject()" est si désagréable.
    • il a l'avantage de ne pas être obligé d'Ajouter la référence à Microsoft Excelxx Object Library
    • pratique si mon fichier Word et utilisable par plusieurs PC
    Pour ajouter à la réponse de Heureux-Oli, je dois dire que le plus gros de mon utilisation de VBA se limite à ma propre machine avec tous les inconvénients évités en ce qui a trait au déploiement dans un parc de machines hétéroclites. Mais, à part le débat sur le gain de performance et l'économie de ressources, ce que j'apprécie le plus avec l'ajout de la référence (à Word dans Excel, ou à Excel dans Word) c'est l'accès direct à l'aide VBA de l'autre application. Dommage que l'aide de VBA Powerpoint (2010, pour 2013 ????) ne soit pas débugguée à cet égard.

    Quand on clique sur un mot-clef dans l'Éditeur et que l'on utilise , on a le choix, entre le mot-clef pour Excel ou pour Word. Une fois habitué, on ne peut plus s'en passer.

    La deuxième question, si elle est compliqué je ferais une suite dans une autre discussion
    • J'ai réussi à intégrer ma variable dans un signet Word.
    • ActiveDocument.Bookmarks("Boucle").Range.Text
    • C'est le "range" qui m'embete un peux, mais ça fonctionne
    • -> est-ce correcte, quand même?
    C'est comme cela, c'est le modèle-objet de VBA - Word qui est comme cela. En gros, il y a deux objets dans VBA Word qui permettent de sélectionner, ajouter ou modifier du texte; l'objet Selection et l'objet Range.

    Sauf problème de mémoire de ma part, pour ajouter du texte à des formes, des tableaux et différents objets, il faut presque toujours utiliser un objet Range à quelque part dans l'instruction. L'inconvénient d'utiliser l'Objet Range est que le texte sélectionné dans un Objet Range n'apparaît pas en surbrillance dans le texte.

    Par contre, le texte sélectionné dans un Objet Selection est en surbrillance dans le texte. Et, ce que j'aime bien de l'objet Selection, c'est que même sans texte sélectionné, la "Selection" existe quand même; c'est tout simplement le point d'insertion.

    Je ne sais pas vraiment pourquoi, mais il y a des gourous qui disent que l'objet Range est mieux que l'objet Selection.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    RAS
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : RAS
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 25
    Points
    25
    Par défaut
    Un très grand merci pour votre aide à vous deux

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/11/2011, 10h04
  2. Macro : Exporté donnée d'une cellule Excel vers Word
    Par roidurif dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/03/2011, 18h13
  3. Réponses: 3
    Dernier message: 17/06/2008, 17h05
  4. Importer le contenu d'une cellule Excel vers Access
    Par deaqu1 dans le forum Access
    Réponses: 7
    Dernier message: 05/11/2005, 15h26
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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