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 :

Tableau word vers Excel (suivant votre macro (Sub importTableWord_VersExcel())


Sujet :

Macros et VBA Excel

  1. #1
    re
    re est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 116
    Points : 43
    Points
    43
    Par défaut Tableau word vers Excel (suivant votre macro (Sub importTableWord_VersExcel())
    Bonjour
    Le code ci-dessous fonctionne parfaitement si dans le fichier Word il n'y a qu'un seul tableau.

    Voici mon petit souci :
    J'ai un fichier word qui est composé de plusieurs pages
    Pages 1 : tableau 3 lignes + un texte qui n'est pas dans un tableau
    Page 2 : le sommaire
    page 3 à 10 un seul tableau

    Si je lui indique ici : Set Tableau = WordDoc.Tables(1) => Tables(2) par exemple il ne va pas chercher le tableau 2 (j'ai compris comme ça)
    Tout est ok si je supprime les pages 1 & 2 et que je garde que le tableau.

    D'autre part, comment faire pour aller chercher le fichier avec un boite de dialogue ?

    Merci beaucoup de votre aide car je suis un peu nul en VBA mais j'aime bien l'utiliser ,-)


    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
    'https://excel.developpez.com/faq/?page=Word#ImportTableauWord
    Sub importTableWord_VersExcel()
    'Nécessite d'activer la référence:
        'Microsoft Word xx.x Object Library
     
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim Tableau As Word.Table
    Dim i As Integer, j As Integer
     
    'Création instance Word
    Set WordApp = New Word.Application
    'Masque Word pendant l'opération
    WordApp.Visible = False
     
    'Ouvre le document Word
    Set WordDoc = WordApp.Documents.Open("E:\test.docx")
     
    'Représente le premier tableau dans le document
    Set Tableau = WordDoc.Tables(1)
     
    'Boucle sur les colonnes du tableau
    For i = 1 To Tableau.Columns.Count
        'Boucle sur les cellules de claque colonne
        For j = 1 To Tableau.Columns(i).Cells.Count
            'Importe les données du tableau dans la feuille active
            ActiveSheet.Cells(j, i) = Tableau.Columns(i).Cells(j)
        Next j
    Next i

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    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 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par re Voir le message
    Bonjour
    Le code ci-dessous fonctionne parfaitement si dans le fichier Word il n'y a qu'un seul tableau.

    Voici mon petit souci :
    J'ai un fichier word qui est composé de plusieurs pages
    Pages 1 : tableau 3 lignes + un texte qui n'est pas dans un tableau
    Page 2 : le sommaire
    page 3 à 10 un seul tableau
    Ton sommaire est-il lui-aussi sous la forme d'un tableau ? Si ton sommaire est dans un tableau lui aussi, la tableau de la page 3, c'est le tableau 3. Parce que pour VBA, tout ce qui est dans un tableau est un tableau

    Juste pour être sur du nombre de tableaux (au sens de Word) dans ton document:

    Juste après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Ouvre le document Word
    Set WordDoc = WordApp.Documents.Open(le chemin d'accès")
    Ajoute temporairement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox(worddoc.tables.count)
    Et tu vas savoir si tu as 2 ou 3 tableaux





    Si je lui indique ici : Set Tableau = WordDoc.Tables(1) => Tables(2) par exemple il ne va pas chercher le tableau 2 (j'ai compris comme ça)
    Tout est ok si je supprime les pages 1 & 2 et que je garde que le tableau.
    Juste pour être sur tu a juste cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set Tableau = WordDoc.Tables(2)
    D'autre part, comment faire pour aller chercher le fichier avec un boite de dialogue ?
    Tu peux utiliser toutes les boîtes de dialogues de Word (et même d'Excel) en passant par collection Dialogs de Word (d'Excel)

    Article

    Liste des constantes à mettre entre les parenthèses pour afficher la bonne boîte

    Si cela ne fonctionne pas avec le nom de la constante, parce que c'est fréquent dans le cas de pilotage, essaie avec la valeur numérique.

    Vite fait, et sans test, ta ligne set devrait être remplacée par cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'Ouvre le document Word
     WordApp.Dialogs(wdDialogFileOpen).Show
    'Puisque dès qu'un document est ouvert,
    'il devient le document actif
    'on peut utiliser ActiveDocument
    'Mais ActiveDocument doit être utilisé
    'avec précaution
        Set worddoc = ActiveDocument
    End Sub

  3. #3
    re
    re est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 116
    Points : 43
    Points
    43
    Par défaut
    Bonjour Clément
    Merci pour ta réponse,ça fonctionne.
    Je ne sais pas si l'on peut y inclure un épurage du texte dans l'export, je le fais dans la feuille mais ça serait plus pratique sans ce qui semble être des retours chariot (?) impossible de faire le tri
    Pour info le sommaire n'est pas un tableau en tout cas pas reconnu comme tel.

    Encore merci
    Bonne journée

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    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 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Citation Envoyé par re Voir le message
    Bonjour Clément
    Merci pour ta réponse,ça fonctionne.
    Je ne sais pas si l'on peut y inclure un épurage du texte dans l'export, je le fais dans la feuille mais ça serait plus pratique sans ce qui semble être des retours chariot (?) impossible de faire le tri

    Bonne journée
    La solution que je vois durant l'export c'est de le faire dès que tu as lu la cellule dans Word.

    En reprenant ton code, mais sans avoir testé. (Je suis avec un portable sur la batterie et je n'ai pas beaucoup de réserves)
    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
    'https://excel.developpez.com/faq/?page=Word#ImportTableauWord
    Sub importTableWord_VersExcel()
    'Nécessite d'activer la référence:
        'Microsoft Word xx.x Object Library
     
        Dim WordApp As Word.Application
        Dim WordDoc As Word.Document
        Dim Tableau As Word.Table
        Dim i As Integer, j As Integer
        Dim Texte as string
        'Création instance Word
        Set WordApp = New Word.Application
        'Masque Word pendant l'opération
        WordApp.Visible = False
         'Ouvre le document Word
        Set WordDoc = WordApp.Documents.Open("E:\test.docx")
        'Représente le premier tableau dans le document
        Set Tableau = WordDoc.Tables(1)
        'Boucle sur les colonnes du tableau
        For i = 1 To Tableau.Columns.Count
           'Boucle sur les cellules de claque colonne
            For j = 1 To Tableau.Columns(i).Cells.Count
                 'récupérer le texte de la  cellule
                  texte = Tableau.Columns(i).Cells(j).textframe.textrange
                  'enlever les marques de de paragraphes
                  texte = replace(texte,chr(13))
                 'Importe les données du tableau dans la feuille active
                 ActiveSheet.Cells(j, i) = texte
          Next j
       Next i

    objet TextFrame
    replace

  5. #5
    re
    re est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 116
    Points : 43
    Points
    43
    Par défaut
    Bonjour,
    Désolé ça bloque ici : TextFrame
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Texte = Tableau.Columns(i).Cells(j).TextFrame.TextRange
    Merci encore si tu n'a pas le temps je me débrouillerais avec la formule ''épurage" en plus je ne suis pas sûr que le petit rectangle vertical à la fin de chaque ligne est bien un retour chariot
    Nom : rectangle.PNG
Affichages : 394
Taille : 733 octets


    D'autre part ici :
    Code :
    Set Tableau = WordDoc.Tables(1)

    comment remplacer le 1 (tableau 1) par la référence d'une cellule dans la feuille excel ?

    Très bonne journée

  6. #6
    re
    re est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 116
    Points : 43
    Points
    43
    Par défaut
    Bonjour
    Réponse partielle, code ci-dessous fonctionne
    puis => Set Tableau = WordDoc.Tables(x).

    Le problème est plus général au lancement de la 1er fois tout est ok mais si on relance la macro, word dit qu'il ne peut ouvrir qu'en lecture seule et effectivement le process word est présent et il y en a autant de fois que l'on lance la macro
    d'où l'idée de vérifier s'il y a un process word en cours et de le fermer avant de continuer.

    Merci pour l'aide

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    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 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Rendu là cela dépend de ce que tu veux vraiment faire:

    Si tu veux appliquer la même macro plusieurs fois au même document que tu n'as pas fermé essaie cela avec Word fermé au départ
    Autrement, il faut s'embarquer dans la gestion d'erreur et cela fait trop longtemps que je suis passé à un autre langage pour m'en souvenir

    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
    'https://excel.developpez.com/faq/?page=Word#ImportTableauWord
    Sub importTableWord_VersExcel()
    'Nécessite d'activer la référence:
        'Microsoft Word xx.x Object Library
         dim ouvert as boolean
         ouvert = false
         Dim WordApp As Word.Application
        Dim WordDoc As Word.Document
        Dim Tableau As Word.Table
        Dim i As Integer, j As Integer
        Dim Texte as string
        'Création instance Word
        select cas ouvert
              case false
                  Set WordApp = New Word.Application
                 ouvert = true
              case true
                Set WordApp = getobject(, Word.Application)
        end select
        'Masque Word pendant l'opération
        WordApp.Visible = False
         'Ouvre le document Word
        Set WordDoc = WordApp.Documents.Open("E:\test.docx")
      etc
    end sub
    Ou bien tu fermes Word et ton document en terminant ta macro (ce que tu devrais en quittant autrement)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    worddoc.save
    worddoc.close
    wordapp.quit
    end sub

  8. #8
    re
    re est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 116
    Points : 43
    Points
    43
    Par défaut
    Bonjour Clément,
    Merci beaucoup pour ton implication, je n'y arrive pas.
    Ne perd plus de temps, la solution la plus simple est de faire une fin de tache dans le gestionnaire de tâche et de ne lancer l'export qu'une seule fois ou bien WordApp.Visible = True puis d’arrêter word et tout relancer si besoin d'un autre export

    En tout cas encore merci c'est vraiment sympa
    Bonne journée

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/04/2012, 10h28
  2. transfert d'un tableau word vers excel en vba
    Par progaide dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/12/2008, 17h48
  3. Tableau word vers excel
    Par Invité(e) dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/10/2008, 16h22
  4. Macro import du texte Word vers Excel
    Par Bernard6773 dans le forum VBA Word
    Réponses: 6
    Dernier message: 05/09/2007, 10h42
  5. Réponses: 2
    Dernier message: 12/02/2007, 13h39

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