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 :

Boucler sur le contenu d'un tableau Word avant l'extraction [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Par défaut Boucler sur le contenu d'un tableau Word avant l'extraction
    Bonjour

    J'ai une macro qui m'extrait quelques cellules de plusieurs tableau Word bien précis, ces cellules se trouve entre deux lignes de ce tableau

    Pour procéder a cela :
    je repéré le tableau dans le fichier Word à l'aide d'une phrase qui se trouve juste au-dessus de ce tableau "Produits Techniques", puis je fais l'extraction de ses quelques cellules.

    Voila a quoi il ressemble mon tableau :


    Ligne 1 : Systeme d'exploitation
    Cellule 1 : Lunix
    Cellule 2 : Windows
    Ligne 2 : Base de donnée
    Cellule 3 : MySQL
    Cellule 4 : oRACLE
    Ligne 3 : Was Server
    Cellule 5 : Apache
    Cellule 6 : Jonas
    Ligne 4 : Middlware

    Quant il ya ces 4 lignes, l'extraction de ces cellules se fait sans problème car mon code est adapter a ces 4 LIGNES
    Comme j'ai un tableau qui change d'un fichier un autre c'est a dire des fois ya pas toutes les lignes alors j'aimerai bien faire un test avant l'extraction
    je veux fire une boucle juste apres que je repere mon tableau dans laquelle je fais l extraction comme suit :
    Si ya les 4 lignes presente dans le tableau
    Je fais action Z
    Si Ya pas que la Ligne 1 : Systeme d'exploitation
    Je fais une action A
    Sinon Si ya pas que Ligne 2 : Base de donnée
    Je fais l'action B
    Sinon Si ya pas que Ligne 2 :Was Server
    Je fais l'action C
    Voila un bout de ma Macro

    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
    '**** Se positionner Sur le tableau Produit Logiciel  ****
    CtrI = 0
    Set Rng = WDoc.Range
    'Set rng = ActiveDocument.Range                         'Plage de recherche
       Do
          With Rng.Find
             .ClearFormatting
             .Text = "Produits techniques"                   ' Texte à rechercher (se trouvant avant la table)
             .Execute
          End With
          If Rng.Find.Found Then
            CtrI = CtrI + 1
             If CtrI = 1 Then
             Rng.Select
             Rng.MoveStart unit:=wdTable
             Rng.Goto What:=wdGoToTable, Which:=wdGoToNext, Count:=1
     
    'Selectionne le tableau trouvé pour extraire les données
        Set WTable = Rng.Tables(1)
     
    ' Je veux placer ce test la 
    'Si ya toute les lignes 
    'Je fis action Z
    'Si Ya pas  la Ligne 1 : Systeme d'exploitation
    'Je fais une action A
    'Sinon Si Ligne 2 : Base de donnée
    'Je fais l'action B 
     End If
     End If
       Loop Until Not Rng.Find.Found
    Voila j'espere que je suis assez claire

    Merciii

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Pour tester la présence des titres ("Systeme d'exploitation", "Base de donnée" ...) dans la première colonne du tableau, tu peux utiliser
    WTable.Cell(<ligne>, <colonne>).Range.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Par défaut
    Bonjour BlueMonkey

    Merci pour ta réponse

    En effet j'ai pensé à ça mais comme je suis débutant dans VBA je sais pas comment l'adapter à mon problème en plus ces Titres ont la colonne fixe qui est la Premiere colonne mais la ligne de chaque titre varie selon le nombre de cellules qui sont dans cette colonne

    Si tu peux me passer un bout code je te serai reconnissant

    Merciii

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    Si les titres sont dans la première colonne du tableau, tu peux essayer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            Set wtable = Rng.Tables(1)
            ' Je veux placer ce test la
     
            If wtable.Rows.Count = 4 Then 'Si ya toute les lignes
                'Je fis action Z
            End If
     
            If InStr(1, wtable.Cell(1, 1).Range, "Systeme d'exploitation") < 1 Then 'Si Ya pas  la Ligne 1 : Systeme d'exploitation
                'Je fais une actio)n A
            ElseIf InStr(1, wtable.Cell(2, 1).Range, "Base de donnée") > 0 Then  'Sinon Si Ligne 2 : Base de donnée
                'Je fais l'action B
            End If

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Par défaut
    Bonjour BlueMonkey

    Merci pour ta reponse !
    la logique de ton code est intressante...ça ma permet d'avoir déjà une idée

    Mais le Problème est que ces lignes changent de coordonnées d'un tableau à un autre

    Comment généraliser le code pour tous les tableau pour verifier si ces lignes existent ou pas ?

    Merciii

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Le code précédant implémentait les infos que tu avais donné.
    Si ya les 4 lignes presente dans le tableau
    Je fais action Z
    Si Ya pas que la Ligne 1 : Systeme d'exploitation
    Je fais une action A
    Sinon Si ya pas que Ligne 2 : Base de donnée
    Je fais l'action B
    Sinon Si ya pas que Ligne 2 :Was Server
    Je fais l'action C

    Si la position des lignes changent essaye avec :
    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
    Sub TaRoutine()
       '... début à compléter
        Set wtable = Rng.Tables(1)
     
         Dim LineSE As Integer: LineSE = GetLineInTableCol(wtable, 1, "Systeme d'exploitation")
         Dim LineBD As Integer: LineBD = GetLineInTableCol(wtable, 1, "Base de donnée")
         Dim LineWasSrv As Integer: LineWasSrv = GetLineInTableCol(wtable, 1, "Was Server")
         Dim LineMdWr As Integer: LineMdWr = GetLineInTableCol(wtable, 1, "Middlware")
     
         ' Je veux placer ce test la
     
         'Si ya toute les lignes
         If LineSE > 0 And LineBD > 0 And LineWasSrv > 0 And LineMdWr > 0 Then
             'Je fis action Z
         End If
     
         'Si Ya pas que la Ligne 1 : Systeme d'exploitation
         If LineSE < 0 And LineBD > 0 And LineWasSrv > 0 And LineMdWr > 0 Then
             'Je fais une actio)n A
     
         'Sinon Si Ligne : Base de donnée
         ElseIf LineSE > 0 And LineBD < 0 And LineWasSrv > 0 And LineMdWr > 0 Then
     
             'Je fais l'action B
     
         End If
    End Sub
     
    Function GetLineInTableCol(tb As Word.Table, col As Integer, lineValue As String) As Integer
        Dim ri As Integer
        GetLineInTableCol = -1
        For ri = 1 To tb.Rows.Count
            If InStr(1, tb.Cell(ri, col).Range, lineValue) > 0 Then
                GetLineInTableCol = ri
                Exit For
            End If
        Next ri
    End Function
    A+

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/08/2014, 18h15
  2. [WD-2007] Lancer macro sur événement modification de cellule tableau Word
    Par nonohzx dans le forum VBA Word
    Réponses: 1
    Dernier message: 19/02/2014, 10h21
  3. Test sur le contenu d'un tableau
    Par darkman13130 dans le forum C#
    Réponses: 3
    Dernier message: 02/08/2010, 16h30
  4. Réponses: 3
    Dernier message: 03/07/2006, 13h45
  5. Boucler sur un tableau associatif
    Par effree dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/02/2006, 16h15

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