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 :

Transfert de tableau word dans variable tableau excel et sanitisation [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de Bragu Demon
    Homme Profil pro
    Intégrateur d'Explopitation
    Inscrit en
    Juin 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Intégrateur d'Explopitation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 125
    Points : 117
    Points
    117
    Par défaut Transfert de tableau word dans variable tableau excel et sanitisation
    Bonjour le forum,


    Je vous demande de l'aide pour un projet bien compliqué pour moi :

    J'ai des fichiers word 2010 qui contiennent des tableaux.
    Je dois récupérer certaines valeurs de ces tableaux pour aller enrichir une base de donnée (mySQL 5.5.10)
    J'ai donc commencé par prendre tout le contenu d'un tableau word pour le transférer dans une variable tableau par une macro sous excel 2010.

    Voici un exemple type :
    Nom : tbl2.png
Affichages : 314
Taille : 5,3 Ko

    Voici le code que j'utilise actuellement :
    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
     
    Sub test()
     
    Dim oTbl As Table
    Dim i, nbItem As Integer
    Dim tbl2
     
    ' *** comptage du nombre de tableau dans le document
    For Each oTbl In ActiveDocument.Tables
    i = i + 1
    Next oTbl
     
    tbl2 = ActiveDocument.Tables(2)
    tbl2 = Split(tbl2, "") ' en hexa : 07
    nbItem = UBound(tbl2)
     
    i = 0
    ' parcourir toutes les lignes du tableau pour supprimer le dernier caractères
    For i = 0 To nbItem
        If i > nbItem Then Exit For
        If tbl2(i) = Chr(13) Or tbl2(i) = Chr(10) Then tbl2(i).Delete ' Exit For
        i = i + 1
        MsgBox "[" & item & "]"
        item = Left(tbl2(i), Len(tbl2(i)) - 1)
        item = Trim(item) ' Supprime lesespaces à gauche et à droite
        MsgBox "[" & tbl2(i) & "]"
    Next i
     
    end sub
    le caractère délimiteur ne s'affichant pas, voici la ligne :
    Nom : carac.png
Affichages : 114
Taille : 1,6 Ko

    Le tableau que je vous donne en exemple est le tableau numéro 2
    mon split me permet de supprimer ce caractère exotique (certainement de changement de ligne et de cellule) et transfère les données dans mon tableau tbl2
    Ma boucle me permet de lire ligne à ligne le contenu pour nettoyer tout ça.

    Je n'arrive donc pas à réaliser ce nettoyage, à savoir :
    supprimer les enregistrements vide de mon tableau (ou qui contiennent chr(10) ou chr(13) ),
    un bête trim pour supprimer les espace à droite et à gauche (qui fonctionnera quand je réécrirai dans mon tableau).
    Remettre les données nettoyées dans le tableau (je pense que c'est tout bête et que je ne fois que le doigt et non la lune ...)

    Comme j'ai plusieurs tableaux, je vais devoir faire la même chose pour chaque tableau afin d'avoir un tableau de type gros-gros dans lequel je pourrai aller piocher ce dont j'ai besoin.
    Par la suite, avec l'aide d'un connecteur ODBC, inscrire dans ma base. Ou en passant par un fichier texte puis un batch qui ira déclencher un php qui fera un insert dans la base de ce fichier texte (dure réalité que la vie en entreprise)

    Bref j'aimerai bien des idées sur comment supprimer et comment enrichir mon tableau.

    Merci d'avance pour votre aide.

  2. #2
    Membre régulier Avatar de Bragu Demon
    Homme Profil pro
    Intégrateur d'Explopitation
    Inscrit en
    Juin 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Intégrateur d'Explopitation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 125
    Points : 117
    Points
    117
    Par défaut
    Après avoir farfouillé, il semble que pour mon split, il faille utiliser cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tbl2 = Split(tbl2, &H07)
    Et dans mon for, je pense qu'il serait plus efficace de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        tbl2(i) = Left(tbl2(i), Len(tbl2(i)) - 1)
        tbl2(i) = Trim(item) ' Supprime les espaces à gauche et à droite
    Ça devrait mieux marcher comme ça.

    Par conte je ne trouve pas la syntaxe pour deleter un enregistrement en fonction de son contenu.

  3. #3
    Membre régulier Avatar de Bragu Demon
    Homme Profil pro
    Intégrateur d'Explopitation
    Inscrit en
    Juin 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Intégrateur d'Explopitation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 125
    Points : 117
    Points
    117
    Par défaut
    Un petit up

    J'avance petit à petit (comme quoi ça n'est pas parce qu'on poste sur un forum qu'il faille attendre que la réponse tombe toute cuite)
    J'ai opté pour tester les valeurs de chaque ligne et de les mettre dans un autre tableau.

    Voici ce que j'ai fait
    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
    Dim oTbl As Table
    Dim i, j, x, nbTableau, nbItem As Integer
    Dim tbl1, tbl2()
     
     
    ' *** comptage du nombre de tableau dans le document
     
    For Each oTbl In ActiveDocument.Tables
    nbTableau = nbTableau + 1
    Next oTbl
     
    'ActiveDocument.Tables(2).Select
    'Cell(3, 1).Range.Text
     
    tbl1 = ActiveDocument.Tables(2)
    'tbl1 = Split(tbl1, &H07)
    tbl1 = Split(tbl1, "") ' en hexa : &H07
    nbItem = UBound(tbl1)
     
    j = 0
     
    ' parcourir toutes les lignes du tableau pour supprimer le dernier caractères
    For i = 0 To nbItem
        If i > nbItem Then Exit For
        If tbl1(i) <> Chr(13) Or _
           tbl1(i) <> Chr(10) Or _
           tbl1(i) <> " " Or _
           tbl1(i) <> "" Or _
           tbl1(i) <> &HD0A Or _
           tbl1(i) <> &H9 Then
     
            ReDim Preserve tbl2(j)
            tbl1(i) = Left(tbl1(i), Len(tbl1(i)) - 1)
            tbl1(i) = Trim(tbl1(i)) ' Supprime les espaces à gauche et à droite
            tbl2(j) = tbl1(i)
    '        MsgBox "[" & tbl2(j) & "]"
            j = j + 1
     
        Else
        MsgBox "[" & tbl1(i) & "]"
        End If
    Next i
    Je n'arrive pas à tester correctement les valeurs des lignes.
    Si je sélectionne les 2 premières lignes de mon tableau vers notepad++ et que je convertit en hexadécimal j'obtiens ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INFORMATIONS GENERALES0D0A
    Rédacteur09Bragu DEMON
    C'est pour ça que je teste &HD0A et &H9, mais ça ne fonctionne pas, je dois donc mal m'y prendre.

    Help ?

    ps, j'ai tenté de tester isNull et isEmpty, c'est pareil je n'arrive pas à discerner ces enregistrements parasites

  4. #4
    Membre régulier Avatar de Bragu Demon
    Homme Profil pro
    Intégrateur d'Explopitation
    Inscrit en
    Juin 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Intégrateur d'Explopitation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 125
    Points : 117
    Points
    117
    Par défaut
    Il semble que ne tester que le chr(13) soit la solution.
    Du coup je sanitise mon tableau.

    Et donc c'est bien.


    Par contre serait-il possible de déplacer le sujet, en vrai je suis sur du word ?


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

Discussions similaires

  1. [WD-2002] Cellules décalées si copie tableau word dans excel
    Par Boubas1 dans le forum Word
    Réponses: 1
    Dernier message: 11/04/2009, 00h25
  2. Réponses: 2
    Dernier message: 07/11/2008, 16h48
  3. Inserer un fichier word dans un tableau word
    Par Homer091 dans le forum VBA Word
    Réponses: 2
    Dernier message: 15/05/2008, 18h17
  4. [VBA-W] Transfert contenu spreadsheet dans un tableau word
    Par houadglaz dans le forum VBA Word
    Réponses: 4
    Dernier message: 02/12/2006, 14h58

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