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 :

[VBA-W]problème pour ajouter 1ligne de tableau par resultat


Sujet :

VBA Word

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 98
    Points : 50
    Points
    50
    Par défaut [VBA-W]problème pour ajouter 1ligne de tableau par resultat
    Bonjour,

    je bosse actuellement sur l'ajout de fonctions d'un logiciel de gestion. On m'a demandé de modifier la mise en forme des impressions de facture, j'ai donc un document Word composé de tableaux et bourré de code VBA auquel je ne comprends que peu de choses. J'ai quand même réussi à comprendre à peu près les liens avec la BD et j'ai bien refait l'affichage tel que le patron le voulait mais maintenant j'ai un problème avec un tableau :

    J'ai un tableau de 2lignes, l'une est une entete l'autre recoit le contenu d'une requête sur base de données Access2003.

    Quand le résulat de la requête comprend 3 enregistrements (par exemple) au lieu d'avoir un tableau de 4 lignes (1ligne d'entete, et 3lignes correspondant à chaque enregistrement) j'ai toujours que 2 lignes (1 entête et 1ligne contenant que le dernier enregistrement qui a écrasé les 2 précédents) alors qu'avant j'avais la 2ème ligne qui se duplicait autant de fois que le nombre d'enregistrements. Je voudrais que la 2ème du tableau se duplique comme avant (en fait sur la facture ca corresponds à la liste des produits facturés).

    Sachant que j'ai également vu qu'il y avait beaucoup de code Microsoft Script Editor, pouvez-vous m'indiquer quelle commandes gère cette "duplication" svp ou d'une facon ou d'une autre comment résoudre le problème svp?

    Je vous mets le code concernant l'affichage de ce tableau mais je doute que ca vous soit utile vu le nombre d'abreviations sur les variables "sur BD" :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    'lecture des lignes
    cfl.nf = cfe.nf: cfl.nlf = "": ligne = 0: tot1 = 0: totc1 = 0
    db_rech "s", "cfl", codret, 1
    Do While codret <> 1
        If cfl.nf = cfe.nf Then
            'recherche unité de conditionnement
            uco.c = cfl.uc: db_rech "s", "uco", codret, 1: If Trim$(uco.l) = "" Then uco.l = cfl.uc
            'nouvelle ligne
            If ligne <> 0 Then
                ActiveDocument.Tables(3).Cell(ligne + 1, 6).Select
                Selection.MoveRight Unit:=12
            End If
     
            'colonne 1 : code article et réf code client
            cpc.cc = cce.cc1t: cpc.ca = cfl.cp: db_rech "s", "cpc", codret, 1: If codret <> 0 Then cpc.ac = ""
            bb$ = Trim$(cfl.cp)
            If Trim$(cpc.ac) <> "" Then bb$ = bb$ & ls & "Ref Art Client " & Trim$(cpc.ac)
            If Trim$(cfl.rcp) <> "" Then bb$ = bb$ & ls & "Réf Cde Client " & Trim$(cfl.rcp)
            bb$ = bb$ & ls & "BL " & Trim$(cfl.nb) & " Ligne " & Trim$(cfl.nlb)
            ActiveDocument.Tables(3).Cell(ligne + 2, 1).Range.Text = bb$
     
            'colonne 2 : désignation
            bb$ = Trim$(cfl.d1)
            If Trim$(cfl.d2) <> "" Then bb$ = bb$ & ls & Trim$(cfl.d2)
            If Val(cfl.qg) <> 0 Then bb$ = bb$ & ls & "Dont Gratuit"
            If Val(cfl.mr) <> 0 Then bb$ = bb$ & ls & Trim$(cfl.lr)
            If Val(cfl.mr1) <> 0 Then bb$ = bb$ & ls & Trim$(cfl.lr1)
            If Val(cfl.mr2) <> 0 Then bb$ = bb$ & ls & Trim$(cfl.lr2)
            If Val(cfl.mr3) <> 0 Then bb$ = bb$ & ls & Trim$(cfl.lr3)
            If Val(cfl.ms) <> 0 Then bb$ = bb$ & ls & Trim$(cfl.ls)
            If Val(cfl.mc) <> 0 Then bb$ = bb$ & ls & "Consigne " & Format$(Val(cfl.q))
            If Val(cfl.rfc) <> 0 Then bb$ = bb$ & ls & "Nb Colis " & Format$(Val(cfl.rfc)) & " " & Trim$(uco.l)
            ActiveDocument.Tables(3).Cell(ligne + 2, 2).Range.Text = bb$
     
            'colonne 3 : quantités
            cc$ = Format$(Val(cfl.q)) & " " & Trim$(cfl.uca)
            If Trim$(cfl.d2) <> "" Then cc$ = cc$ + ls
            If Val(cfl.qg) <> 0 Then cc$ = cc$ & ls & Format$(Val(cfl.qg)) & " " & Trim$(cfl.uca)
            If Val(cfl.mr) <> 0 Then cc$ = cc$ + ls
            If Val(cfl.mr1) <> 0 Then cc$ = cc$ + ls
            If Val(cfl.mr2) <> 0 Then cc$ = cc$ + ls
            If Val(cfl.mr2) <> 0 Then cc$ = cc$ + ls
            If Val(cfl.ms) <> 0 Then cc$ = cc$ + ls
            If Val(cfl.mc) <> 0 Then cc$ = cc$ + ls
            ActiveDocument.Tables(3).Cell(ligne + 2, 3).Range.Text = cc$
     
            'colonne 4 : prix unitaire et remises
            dd$ = Format$(Val(cfl.pu), formont)
            If Trim$(cfl.d2) <> "" Then dd$ = dd$ + ls
            If Val(cfl.qg) <> 0 Then dd$ = dd$ + ls
            If Val(cfl.mr) <> 0 Then dd$ = dd$ & ls & Format$(Val(cfl.mr), "-0.00")
            If Val(cfl.mr1) <> 0 Then dd$ = dd$ & ls & Format$(Val(cfl.mr1), "-0.00")
            If Val(cfl.mr2) <> 0 Then dd$ = dd$ & ls & Format$(Val(cfl.mr2), "-0.00")
            If Val(cfl.mr3) <> 0 Then dd$ = dd$ & ls & Format$(Val(cfl.mr3), "-0.00")
            If Val(cfl.ms) <> 0 Then dd$ = dd$ & ls & Format$(Val(cfl.ms), formont)
            If Val(cfl.mc) <> 0 Then dd$ = dd$ & ls & Format$(Val(cfl.mc), formont)
            ActiveDocument.Tables(3).Cell(ligne + 2, 4).Range.Text = dd$
     
            'colonne 5 : prix total ligne
            dd$ = Format$((Val(cfl.pu) * (Val(cfl.q) - Val(cfl.qg))) - Val(cfl.mr) - Val(cfl.mr1) - Val(cfl.mr2) - Val(cfl.mr3) + Val(cfl.ms), formont)
            tot1 = tot1 + Val(dd$)
            If Trim$(cfl.d2) <> "" Then dd$ = dd$ + ls
            If Val(cfl.qg) <> 0 Then dd$ = dd$ + ls
            If Val(cfl.mr) <> 0 Then dd$ = dd$ + ls
            If Val(cfl.mr1) <> 0 Then dd$ = dd$ + ls
            If Val(cfl.mr2) <> 0 Then dd$ = dd$ + ls
            If Val(cfl.mr3) <> 0 Then dd$ = dd$ + ls
            If Val(cfl.ms) <> 0 Then dd$ = dd$ + ls
            If Val(cfl.mc) <> 0 Then dd$ = dd$ & ls & Format$(Val(cfl.mc) * Val(cfl.q), formont)
            ActiveDocument.Tables(3).Cell(ligne + 2, 5).Range.Text = dd$
     
            'colonne 6 : code tva
            ActiveDocument.Tables(3).Cell(ligne + 2, 6).Range.Text = cfl.ct
            totc1 = totc1 + (Val(cfl.mc) * Val(cfl.q))
     
            'lecture ligne suivante
            ligne = ligne + 1
            db_rech "n", "cfl", codret, 1
            Else
            codret = 1
        End If
    Loop
    Le tableau concerné se nomme donc "ActiveDocument.Tables(3)".

  2. #2
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 98
    Points : 50
    Points
    50
    Par défaut
    Exemple "visuel" :

    Resultat d'une requete :

    Enregistrement1 : DURAND, Olivier
    Enregistrement2 : MARX, Romain

    Tableau :

    Structure :

    ---------------------
    | Nom | Prenom | (ligne 1)
    |-------------------|
    | ViDE | VIDE | (ligne 2)
    ---------------------

    Ce que j'avais avant :

    ---------------------
    | Nom | Prenom | (ligne 1)
    |-------------------|
    | Dur. | Olivier | (ligne 2)
    |-------------------|
    |Marx | Romain | (ligne 2 dupliquée)
    ---------------------

    Ce que j'ai maintenant :

    ---------------------
    | Nom | Prenom | (ligne 1)
    |-------------------|
    |Marx | Romain | (ligne 2 NON dupliquée et enregistrement1
    --------------------- DURANT Olivier écrasé par l'enregistrement2

    MARX Romain)

Discussions similaires

  1. Problème pour ajouter un bouton et le lier à un script VBA
    Par thierry_b dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/06/2009, 10h57
  2. Problème pour ajouter un texte automatique dans un zone de saisie de texte
    Par koKoTis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 21/08/2006, 16h03
  3. Problème pour lire dans un tableau ...
    Par themis dans le forum Oracle
    Réponses: 1
    Dernier message: 15/02/2006, 18h04
  4. [VBA-Excel]Problème pour remplir une listview
    Par Le Djé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/01/2006, 16h27
  5. [VBA-E] Problème pour enregistrer en csv (; et non ,) par macro
    Par bounette dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/12/2005, 09h34

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