XL 2010 Problèmes lors de transfert de données vers word

thespeedy20

XLDnaute Occasionnel
Bonjour aux membres de ce forum

Je dois transférer des données excel vers un fichier word, j'y arrive mais pas au bon endroit... je dois commencer au n°1 (et je suis au dessus
dans le premier tableau. dans le deuxième une erreur au niveau de l'importation que je connais pas.

Pourriez-vous me donner un petit coup de main...(Fichier zip = fichier word)


Merci d'avance

Olivier
 

Fichiers joints

Paf

XLDnaute Barbatruc
Bonjour,

pour remplir le tableau word, vous utilisez dans une boucle (NoLig) variant de 2 à 25., pour chaque colonne
.Columns(2).Cells((NoLig + 1) - debut + 2).Range.Text = FL1.Range("A" & NoLig)

à la première itération, (NoLig + 1) - debut + 2) = 2 + 1 - 1 + 2 soit 2 ; on commence donc à écrire dans le tableau en ligne 2
pour commencer en ligne 3 , NoLig + 1 devrait convenir.

et pour éviter une ligne de code par colonne:
Code:
            .Columns(2).Cells((NoLig + 1)).Range.Text = FL1.Range("A" & NoLig)
            .Columns(3).Cells((NoLig + 1)).Range.Text = FL1.Range("B" & NoLig)
            .Columns(4).Cells((NoLig + 1)).Range.Text = FL1.Range("C" & NoLig)
             ....
on pourrait utiliser une boucle:

VB:
    For NoLig = debut To fin
        With Tablo
            For col = 1 To 7
                .Columns(col + 1).Cells((NoLig + 1)).Range.Text = FL1.Cells(NoLig, col)
            Next
        End With
    Next NoLig
A+
 

thespeedy20

XLDnaute Occasionnel
Bonjour Paf,

Cela fonctionne à merveille... merci beaucoup...
J'ai une petite demande, si ma liste dépasse 30 élèves dans word, il se met en erreur dans excel, est il possible de créer une règle qui crée automatiquement une nouvelle feuille(pour la 1er page et la 2ème) dans word ?

Merci d'avance

Olivier
 

Paf

XLDnaute Barbatruc
re,

Ne connaissant pas vba pour word, je serais bien incapable d'apporter plus d'aide.

Ici c'est le forum Excel, il vaudrait sans doute mieux poster dans la partie Autres applications.

Bonne suite
 

thespeedy20

XLDnaute Occasionnel
Bonjour paf,

Une solution serait serait de prévoir le dépassement de 30 et de faire basculer sur un tableau(3) et (4) à partir du 31 élèves. Peux tu me donner un petit coup de pouce...

Merci d avance

Olivier
 

thespeedy20

XLDnaute Occasionnel
Re,

Je me suis renseigné dans les forum Word, ils me disent tous que c est au niveau de la macro Excel qu il faut agir....en limitant à 30 et au-delà de 30 c'est 2 tableaux....

Olivier
 

Paf

XLDnaute Barbatruc
re,

c'est bien dans la macro Excel qu'il faut agir, mais sur des objets Word ! donc avec la connaissance de ces objets.
 

tatiak

XLDnaute Barbatruc
Bonjour à tous,

Pour ajouter une ligne à un tableau word, c'est tout simplement : Rows.Add
Ci-joint tes fichiers modifiés avec du code fonctionnel qui ajuste le nb de lignes et qui t'enregistre le doc généré.

Pierre
 

Fichiers joints

thespeedy20

XLDnaute Occasionnel
Bonjour Pierre,

Merci pour cette version... elle fonction très bien....

Ici le registre élève est en deux parties, la 1er page avec les noms, prénoms, date de naissance et une seconde avec les adresses. je dois impérativement laisser le format de base( 2 pages)

Est-il possible de faire après le 30 élèves une nouvelle page avec nom, prénoms et une autre avec les adresses. avec une condition dans la macro excel ? afin que le format de base comme dans mon fichier soit respecté.

Merci d'avance Pierre

Olivier
 

thespeedy20

XLDnaute Occasionnel
Re Pierre,

On y est presque, les entêtes ne sont pas sur les deuxièmes pages (et mettre le compteur jusque 60)
Est-ce que c'est réalisable ?

Et merci pour ta rapidité

Olivier
 

tatiak

XLDnaute Barbatruc
Mouais,
Il te suffit de compter le nb de ligne sur une page, et d'insérer l'entête quand le tableau passe sur la page suivante:
VB:
    With WordDoc
        idx = 1
        For i = 2 To fin
            If i >= 3 Then
                .Tables(1).Rows.Add
                .Tables(2).Rows.Add
            End If
            If .Tables(1).Rows.Count = 37 Then
                For j = 1 To 7
                    .Tables(1).cell(i + idx, j + 1).Range.Text = .Tables(1).cell(1, j + 1).Range.Text
                Next j
                .Tables(2).cell(i + idx, 2).Range.Text = .Tables(2).cell(1, 1).Range.Text
                idx = 3
            Else
                .Tables(1).cell(i + idx, 1).Range.Text = i - idx
                .Tables(2).cell(i + idx, 1).Range.Text = i - idx
                For j = 1 To 7
                    .Tables(1).cell(i + idx, j + 1).Range.Text = FL1.Cells(i, j)
                Next j
                .Tables(2).cell(i + idx, 2).Range.Text = FL1.Cells(i, 8)
                .Tables(2).cell(i + idx, 4).Range.Text = FL1.Cells(i, 9)
            End If
        Next i
    End With
Au début de la procédure tu aura déclaré : dim idx as byte
et dans ton doc modèle tu aura supprimé le retour à la ligne juste avant le tableau n°2 pour que la césure soit sur la même ligne.

Pierre
 

thespeedy20

XLDnaute Occasionnel
Bonjour Pierre,

La procédure fonctionne bien, si ce n'est sur la deuxième page, le num est identique à la fin de la première et que les noms sont différents.
Au niveau de l'entête , il y a une différence de hauteur sur la deuxième page des noms , pourrait on ajouter la ligne vide comme sur le document original en dessous des entêtes.

Je te remercie encore pour le temps consacré...
Excellent Dimanche

Olivier
 

tatiak

XLDnaute Barbatruc
Oui, j'ai du écrire le code un peu trop vite. Il suffit de mieux régler l'index:
VB:
            idx = 2
            Else
                .Tables(1).cell(i + idx, 1).Range.Text = i - idx
                .Tables(2).cell(i + idx, 1).Range.Text = i - idx
                For j = 1 To 7
                    .Tables(1).cell(i + idx, j + 1).Range.Text = FL1.Cells(i - idx + 1, j)
                Next j
                .Tables(2).cell(i + idx, 2).Range.Text = FL1.Cells(i - idx + 1, 8)
                .Tables(2).cell(i + idx, 4).Range.Text = FL1.Cells(i - idx + 1, 9)
            End If
Pour ton doc, c'est de la mise en page, tu saura faire
Pierre
 

thespeedy20

XLDnaute Occasionnel
re,

Merci Pierre, pour le doc, je sais le faire dans le document même... mais au niveau de la macro, je ne sais vraiment. pas... un dernier petit coup de main.. merci

Olivier

et encore merci pour ton aide si précieuse
 

thespeedy20

XLDnaute Occasionnel
Bonjour Pierre,

j'ai essayé de trouver une solution mais je n'y arrive....
Peux-tu me venir en aide....

Merci pour ta patience

Olivier
 

Discussions similaires


Haut Bas