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

Word Discussion :

Dupliquer pages en fonction de la quantité de données importées d'excel [WD-2010]


Sujet :

Word

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 105
    Points : 34
    Points
    34
    Par défaut Dupliquer pages en fonction de la quantité de données importées d'excel
    Bonjour aux membre de ce forum

    Je requiers votre aide, voici mon problème, j'importe des données d'excel dans un tableau word (1er et 2éme page), est il possible de reproduire le tableau des page 1 et 2 si les données dépasses 30 qui est la capacité des tableaux(si non erreur de la macro excel...)

    Merci d'avance pour votre aide ou vos solutions

    olivier
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Votre fichier .doc étant en fait un modèle, une solution consisterait à déjà prévoir le cas du dépassement des 30 élèves. Dans votre macro excel, vous basculez sur les Tables(3) et Tables(4) à partir du 31ème élève, sinon vous supprimez les tables 4 et 3 (dans cet ordre) à la fin du programme.

    Cordialement.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 105
    Points : 34
    Points
    34
    Par défaut
    Bonsoir,

    Pourriez-vous me montrer comment basculer vers le tableau 3 et 4

    Merci d'avance

    Olivier

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par thespeedy20 Voir le message
    Pourriez-vous me montrer comment basculer vers le tableau 3 et 4
    ?

    De la même manière que vous avez fait pour les tableaux 1 et 2 . Par exemple, ici pour les tableaux 1 et 2 :

    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
     
            Set Tablo = WordDoc.Tables(1)
            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
     
           Set Tablo = WordDoc.Tables(2)
                For NoLig = debut To fin
                     With Tablo
                            For col = 1 To 2
                                 .Columns(col + 1).Cells((NoLig + 1)).Range.Text = FL1.Cells(NoLig, col + 7)
                            Next
                     End With
              Next NoLig
    Dans ce code, il suffit de :

    - Tester le nombre d'enregistrements du tableau Excel avec un If Else End If.
    - Remplacer "fin" par 30 pour les tableaux 1 et 2.
    - De dupliquer le code pour les tableaux 1 et 2.
    - De redémarrer sur les tableaux 3 et 4, en remplaçant debut par 31.

    Cordialement.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 105
    Points : 34
    Points
    34
    Par défaut
    Bonjour Eric,

    Voilà mon fichier, mais cela ne fonctionne pas, peux-tu me dire ou se trouve l'erreur.

    Merci d'avance

    Olivier
    Fichiers attachés Fichiers attachés

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par thespeedy20 Voir le message
    Voilà mon fichier, mais cela ne fonctionne pas, peux-tu me dire ou se trouve l'erreur.
    Bonsoir,

    A essayer :

    Penser à ajouter la référence Microsoft Word.

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    Option Explicit
     
     
    Sub TransfertModifieEK()
     
    Dim WordApp As Object
    Dim WordDoc As Object
     
    Dim TableauWd1 As Word.Table
    Dim TableauWd2 As Word.Table
    Dim TableauWd3 As Word.Table
    Dim TableauWd4 As Word.Table
     
    Dim NbTablesWd As Integer
    Dim ColonneWd As Integer
     
    Dim CompteurEleve As Long
    Dim PremiereLigneTableau As Long
    Dim DerniereLigneTableau As Long
     
    Dim ShEleves As Worksheet
    Dim AireEleve As Range
    Dim CelluleEleve As Range
     
     
        Set ShEleves = Worksheets("Feuil1") 'La feuille lue dans le classeur Excel
     
        With ShEleves
     
             PremiereLigneTableau = 2
             DerniereLigneTableau = .Cells(.Rows.Count, 1).End(xlUp).Row
             If DerniereLigneTableau < PremiereLigneTableau Then
                MsgBox "Aucun élève dans le tableau, fin de programme !", vbCritical
                Exit Sub
             End If
     
             Set AireEleve = .Range(.Cells(PremiereLigneTableau, 1), .Cells(DerniereLigneTableau, 1))
     
             Set WordApp = CreateObject("word.application")
             WordApp.Visible = True
             Set WordDoc = WordApp.Documents.Open(ThisWorkbook.Path & "\test_4.docx")
     
             If WordDoc.tables.Count < 4 Then
                MsgBox "Le document Word ne contient pas les 4 tableaux, fin de programme !", vbCritical
             Else
                With WordDoc
                       Set TableauWd1 = .tables(1)
                       Set TableauWd2 = .tables(2)
                       Set TableauWd3 = .tables(3)
                       Set TableauWd4 = .tables(4)
                End With
             End If
     
             CompteurEleve = 0
     
             For Each CelluleEleve In AireEleve
                 If CelluleEleve <> "" Then
                     Select Case CompteurEleve
                            Case Is < 30
                                 With TableauWd1
                                      For ColonneWd = 2 To 8
                                          .Cell(CompteurEleve + 3, ColonneWd).Range.Text = CelluleEleve.Offset(0, ColonneWd - 2)
                                      Next ColonneWd
                                 End With
                                 With TableauWd2
                                      .Cell(CompteurEleve + 3, 2).Range.Text = CelluleEleve.Offset(0, 7) & " " & CelluleEleve.Offset(0, 8)
                                 End With
     
                            Case Else
     
                                  With TableauWd3
                                      For ColonneWd = 2 To 8
                                          .Cell(CompteurEleve + 3 - 30, ColonneWd).Range.Text = CelluleEleve.Offset(0, ColonneWd - 2)
                                      Next ColonneWd
                                 End With
                                 With TableauWd4
                                      .Cell(CompteurEleve + 3 - 30, 2).Range.Text = CelluleEleve.Offset(0, 7) & " " & CelluleEleve.Offset(0, 8)
                                 End With
                     End Select
                     CompteurEleve = CompteurEleve + 1
                 End If
             Next CelluleEleve
     
             If CompteurEleve < 31 Then
                TableauWd4.Delete
                TableauWd3.Delete
             End If
     
         End With
     
         Set TableauWd1 = Nothing
         Set TableauWd2 = Nothing
         Set TableauWd3 = Nothing
         Set TableauWd4 = Nothing
     
         Set AireEleve = Nothing
         Set ShEleves = Nothing
     
     
        'WordApp.PrintOut
         With WordDoc
     
             .SaveAs2 Filename:=ThisWorkbook.Path & "\Registre_de.docx", FileFormat:= _
               wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
               :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
               :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
               SaveAsAOCELetter:=False, CompatibilityMode:=14
              .Close
     
         End With
     
        Set WordDoc = Nothing
        WordApp.Quit ' pas oublier !
        Set WordApp = Nothing
     
        MsgBox "Fin du transfert !", vbInformation
     
     
    End Sub
    Cordialement.
    Dernière modification par Invité ; 13/12/2016 à 21h03.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 105
    Points : 34
    Points
    34
    Par défaut
    Bonsoir Eric,

    Grand merci pour ton aide , les premiers tests sont concluant....

    Il y a juste une chose , dans la base de données, j'ai des lignes vides et dans le transfert il n'y a plus.
    Est il possible de les remettre ?(les lignes vides)

    encore merci pour ton aide et tes conseils

    Amicalement

    Olivier

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 105
    Points : 34
    Points
    34
    Par défaut
    Re, Eric

    Quand les données sont inférieur à 30, il efface bien les deux tableaux mais reste une page blanche !
    Une petite solution

    Encore grand merci.

    Olivier

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par thespeedy20 Voir le message
    Il y a juste une chose , dans la base de données, j'ai des lignes vides et dans le transfert il n'y a plus.
    Est il possible de les remettre ?(les lignes vides)
    Il faut simplement supprimer les lignes 'If CelluleEleve <> ""' et 'End If' .

    Quand les données sont inférieur à 30, il efface bien les deux tableaux mais reste une page blanche !
    Il te faut créer un signet nommé Pages3Et4 qui ira de la ligne suivant le tableau 2, englobant les tableaux 3 et 4 jusqu'à la fin du document.

    Ci-joint, le nouveau code :

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    Option Explicit
     
    Sub TransfertModifieEK2()
     
    Dim WordApp As Object
    Dim WordDoc As Object
     
    Dim TableauWd1 As Word.Table
    Dim TableauWd2 As Word.Table
    Dim TableauWd3 As Word.Table
    Dim TableauWd4 As Word.Table
     
    Dim NbTablesWd As Integer
    Dim ColonneWd As Integer
     
    Dim CompteurEleve As Long
    Dim PremiereLigneTableau As Long
    Dim DerniereLigneTableau As Long
     
    Dim ShEleves As Worksheet
    Dim AireEleve As Range
    Dim CelluleEleve As Range
     
    Dim SignetEnCours  As Bookmark
     
        Set ShEleves = Worksheets("Feuil1") 'La feuille lue dans le classeur Excel
     
        With ShEleves
     
             PremiereLigneTableau = 2
             DerniereLigneTableau = .Cells(.Rows.Count, 1).End(xlUp).Row
             If DerniereLigneTableau < PremiereLigneTableau Then
                MsgBox "Aucun élève dans le tableau, fin de programme !", vbCritical
                Exit Sub
             End If
     
             Set AireEleve = .Range(.Cells(PremiereLigneTableau, 1), .Cells(DerniereLigneTableau, 1))
     
             Set WordApp = CreateObject("word.application")
             WordApp.Visible = True
             Set WordDoc = WordApp.Documents.Open(ThisWorkbook.Path & "\test_4.docx")
     
             If WordDoc.tables.Count < 4 Then
                MsgBox "Le document Word ne contient pas les 4 tableaux, fin de programme !", vbCritical
             Else
                With WordDoc
                       Set TableauWd1 = .tables(1)
                       Set TableauWd2 = .tables(2)
                       Set TableauWd3 = .tables(3)
                       Set TableauWd4 = .tables(4)
                End With
             End If
     
             CompteurEleve = 0
             For Each CelluleEleve In AireEleve
                     Select Case CompteurEleve
                            Case Is < 30
                                 With TableauWd1
                                      For ColonneWd = 2 To 8
                                          .Cell(CompteurEleve + 3, ColonneWd).Range.Text = CelluleEleve.Offset(0, ColonneWd - 2)
                                      Next ColonneWd
                                 End With
                                 With TableauWd2
                                      .Cell(CompteurEleve + 3, 2).Range.Text = CelluleEleve.Offset(0, 7) & " " & CelluleEleve.Offset(0, 8)
                                 End With
                            Case Else
                                  With TableauWd3
                                      For ColonneWd = 2 To 8
                                          .Cell(CompteurEleve + 3 - 30, ColonneWd).Range.Text = CelluleEleve.Offset(0, ColonneWd - 2)
                                      Next ColonneWd
                                 End With
                                 With TableauWd4
                                      .Cell(CompteurEleve + 3 - 30, 2).Range.Text = CelluleEleve.Offset(0, 7) & " " & CelluleEleve.Offset(0, 8)
                                 End With
                     End Select
                     CompteurEleve = CompteurEleve + 1
             Next CelluleEleve
     
             ' Suppression des pages 3 et 4. Le signet Pages3Et4 va de la ligne suivant le tableau 2 jusqu'à la fin du document.
             If CompteurEleve < 31 Then
                For Each SignetEnCours In WordDoc.Bookmarks
                    With SignetEnCours
                         If .Name = "Pages3Et4" Then .Range.Delete
                    End With
                Next SignetEnCours
             End If
     
         End With
     
         Set TableauWd1 = Nothing
         Set TableauWd2 = Nothing
         Set TableauWd3 = Nothing
         Set TableauWd4 = Nothing
     
         Set AireEleve = Nothing
         Set ShEleves = Nothing
     
         With WordDoc
              .SaveAs2 Filename:=ThisWorkbook.Path & "\Registre_de.docx", FileFormat:=wdFormatXMLDocument, LockComments:=False, _
                       Password:="", AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
                       SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:=False, CompatibilityMode:=14
              .Close
         End With
     
        Set WordDoc = Nothing
        WordApp.Quit ' pas oublier !
        Set WordApp = Nothing
     
        MsgBox "Fin du transfert !", vbInformation
     
    End Sub
    Cordialement.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 105
    Points : 34
    Points
    34
    Par défaut
    Bonjour Eric,

    cela fonction impeccablement bien....
    Je te remercie pour l'aide dans ce projet

    je clôture ici ce poste

    Encore merci

    Olivier

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

Discussions similaires

  1. nombre de ligne en fonction de la quantité
    Par flonardi dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 02/11/2006, 10h36
  2. Saut de page et fonction Group BY
    Par ramoucho17 dans le forum iReport
    Réponses: 1
    Dernier message: 11/10/2006, 10h36
  3. Réponses: 1
    Dernier message: 04/04/2006, 11h29
  4. Bloquer l'accès à une page en fonction du navigateur
    Par 10-nice dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 30/08/2005, 15h29
  5. [débutant] modifier une page en fonction d'un menu
    Par Hastur dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 07/07/2005, 13h29

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