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

  1. #1
    Membre habitué Avatar de Wololol
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2018
    Messages : 104
    Points : 159
    Points
    159

    Par défaut PasteExcelTable Erreur 4198

    Bonjour,

    J'ai un soucis concernant la copie de donnée d'Excel vers Word :

    J'ai une fonction qui génère un document Word via le contenu de cellule Excel. Cette fonction copie donc un nombre indéterminé de cellule une par une puis les colle dans mon document Word.

    Voici à quoi ressemble la copie d'une cellule (je fais ça avec plusieurs cellules par itération)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ThisWorkbook.Worksheets("Feuille").Range("F" & i).Copy
    S.PasteExcelTable False, True, False
    S étant la Selection de mon objet Word.

    Cela fonctionne donc, pour un petit nombre de cellule, cependant s'il y a beaucoup de cellule à copier (ce qui va être toujours le cas) cette fonction ne fonctionne pas et me renvoie l'erreur 4198 : La commande à échoué.

    Ainsi, ma fonction va, à des moments aléatoires planter, en effet elle peut s'arrêter dès le premier collage comme au 159e.

    Le soucis est que l'erreur ne se situe jamais au même endroit, mais c'est toujours sur une ligne du type S.PasteExcelTable False, True, False

    J'ai donc essayé de nombreuses méthodes que j'ai pu trouver sur différent forum (dont celui-ci :p) telles que :

    -Affecter la Selection à une variable (comme dans mon exemple)
    -Vider le presse Papier après chaque copie
    -Tester si le contenu du presse papier est vide (je ne rentré jamais dans un de ces test, je les ai donc retirés, mon presse papier contenant toujours ce qu'il fallait)
    -Faire un Undo.Clear
    -Sauvegarder le document Word à chaque itération
    (sources : https://www.developpez.net/forums/d1...de-non-valide/
    https://social.msdn.microsoft.com/Fo...led?forum=vsto)

    Avez-vous des idées ? Je suis vraiment à court

    Merci et bonne journée

  2. #2
    Membre expert
    Homme Profil pro
    Responsable des études
    Inscrit en
    juillet 2014
    Messages
    1 779
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2014
    Messages : 1 779
    Points : 3 672
    Points
    3 672

    Par défaut

    Bonjour,

    As tu essayé d'ajouté un "DoEvents" dans ta boucle ?
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  3. #3
    Membre habitué Avatar de Wololol
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2018
    Messages : 104
    Points : 159
    Points
    159

    Par défaut

    Citation Envoyé par halaster08 Voir le message
    Bonjour,

    As tu essayé d'ajouté un "DoEvents" dans ta boucle ?
    Merci de ta réponse rapide.

    Je viens d'essayer, cela ne change rien, toujours cette erreur 4198 :/

  4. #4
    Membre régulier
    Homme Profil pro
    contrôle de gestion - data management
    Inscrit en
    mai 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : contrôle de gestion - data management
    Secteur : Finance

    Informations forums :
    Inscription : mai 2018
    Messages : 32
    Points : 71
    Points
    71

    Par défaut

    Bonjour, est-ce que tu est vraiment obligé de faire une boucle, tu ne pourrais pas faire ta sélection une fois et directement coller dans word ?

  5. #5
    Membre habitué Avatar de Wololol
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2018
    Messages : 104
    Points : 159
    Points
    159

    Par défaut

    Citation Envoyé par vincent_merle Voir le message
    Bonjour, est-ce que tu est vraiment obligé de faire une boucle, tu ne pourrais pas faire ta sélection une fois et directement coller dans word ?
    Bonjour, merci de ta réponse,

    Malheureusement non, puisque j'applique à chaque copie un style différent de mon fichier dotx :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If Range("D" & i).Value <> "" And Range("E" & i).Value = "" Then 
     
     
                 S.Range.Style = "Titre 3" 'applique le style
     
     
                S.PasteExcelTable False, True, False
    D'autre idée ?

  6. #6
    Débutant  
    Avatar de patricktoulon
    Homme Profil pro
    cuisiniste
    Inscrit en
    avril 2009
    Messages
    13 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 13 282
    Points : 19 810
    Points
    19 810
    Billets dans le blog
    3

    Par défaut re

    re
    un exemple
    colle toute la plage current region dans un nouveau word
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
    Dim oWdApp As Object 'WordA.Application
    Dim oWdDoc As Object 'Word.Document
    ActiveSheet.[A1].CurrentRegion.Copy
    Set oWdApp = CreateObject("Word.Application")
    Set oWdDoc = oWdApp.Documents.Add
    oWdApp.Visible = True
    oWdApp.Selection.PasteSpecial
    Application.CutCopyMode = False
    End Sub
    il te reste plus qu'a faire un save as
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre habitué Avatar de Wololol
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2018
    Messages : 104
    Points : 159
    Points
    159

    Par défaut

    Bonjour patrick et merci,

    J'ai tester mais cela ne donne pas le résultat recherché vu que je copie des cellules isolées à chaque fois.

    Ce n'est pas la copy le problème, c'est le Paste qui, de façon aléatoire ne fonctionne pas, j'ai beau faire la copie des dizaines de fois sur les même cellules, le programme ne va jamais planter au même endroit.

    Beaucoup parle de ce problème sur les forums mais malheureusement il n'y a aucune réponse à mon problème.

    Je reste ouvert à toute autre propositions.

    Bonne soirée

  8. #8
    Débutant  
    Avatar de patricktoulon
    Homme Profil pro
    cuisiniste
    Inscrit en
    avril 2009
    Messages
    13 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 13 282
    Points : 19 810
    Points
    19 810
    Billets dans le blog
    3

    Par défaut re

    je viens de tester sur 4 plage dont la 4 eme fait plus de 2600 lignes et ca fonctionne
    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
    Sub test()
    Dim oWdApp As Object 'WordA.Application
    Dim oWdDoc As Object 'Word.Document
    Dim plage(4) As Range
    Set plage(1) = Range("A1:F23")
    Set plage(2) = Range("A30:F42")
    Set plage(3) = Range("A50:F64")
    Set plage(4) = Range("A80:F2690")
    Set oWdApp = CreateObject("Word.Application")
    Set oWdDoc = oWdApp.Documents.Add
    oWdApp.Visible = True
    For i = 1 To UBound(plage)
    plage(i).Copy
    oWdApp.Selection.PasteSpecial
    Next
    Application.CutCopyMode = False
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre habitué Avatar de Wololol
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2018
    Messages : 104
    Points : 159
    Points
    159

    Par défaut

    Bonjour,

    J'ai testé ta méthode et effectivement ça fonctionne, merci

    Juste un petit soucis, avec PasteSpecial, ça copie toujours au même endroit (début de la page), du coup cela ne ce met pas à la suite mais insère au début, des solutions pour copier à la suite?

    Bonne journée

  10. #10
    Débutant  
    Avatar de patricktoulon
    Homme Profil pro
    cuisiniste
    Inscrit en
    avril 2009
    Messages
    13 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 13 282
    Points : 19 810
    Points
    19 810
    Billets dans le blog
    3

    Par défaut re

    re
    oui tu insert un signet si je ne me trompe pas
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre habitué Avatar de Wololol
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2018
    Messages : 104
    Points : 159
    Points
    159

    Par défaut

    Citation Envoyé par patricktoulon Voir le message
    re
    oui tu insert un signet si je ne me trompe pas
    Je ne vois pas trop comment utiliser les signets pour faire ça

    Je ne trouve vraiment pas de solutions pour copier à la suite, pourtant le PasteExcelTable le faisais (mais ça marcher pas trop).

    Pour coller, j'utilise S.Range.PasteSpecial ainsi je peux lui appliquer un style avec S.Range.Style = "Titre 1" par exemple. J'ai remarquer que si je collais directement avec S.PasteSpecial, le texte se mettais bien à la suite, cependant je ne peux lui appliquer de style. Y-a-t'il un moyen de soit, appliquer un style à la selection (S.Style = "Titre 1" ne fais rien) ou de continuer à utiliser des ranges et coller à la suite ?

    Merci

  12. #12
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    12 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 12 886
    Points : 34 632
    Points
    34 632
    Billets dans le blog
    39

    Par défaut

    Salut.

    C'est quoi la finalité de la manip (en français)?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Membre habitué Avatar de Wololol
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2018
    Messages : 104
    Points : 159
    Points
    159

    Par défaut

    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    C'est quoi la finalité de la manip (en français)?

    Bonjour,

    Je vais essayer d'expliquer de la façon la plus claire possible :

    J'ai un tableau contenant des noms d'éléments, éléments qui sont associé a une description et une unité.

    En fonction des éléments sélectionnés, j'ai une fonction qui Copy chaque cellule voulue, puis les colles dans un documents Word, enfin je lui applique un style.

    Cette fonction marche maintenant bien, à un détail près : L'insertion du contenu des cellules copiées se font a chaque fois en début de page (une insertion), or je souhaiterai que tout se copie à la suite.

    J'espère que le problème est plus clair, merci de votre aide

  14. #14
    Membre expert
    Homme Profil pro
    Responsable des études
    Inscrit en
    juillet 2014
    Messages
    1 779
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2014
    Messages : 1 779
    Points : 3 672
    Points
    3 672

    Par défaut

    Citation Envoyé par Wololol Voir le message
    Cette fonction marche maintenant bien, à un détail près : L'insertion du contenu des cellules copiées se font a chaque fois en début de page (une insertion), or je souhaiterai que tout se copie à la suite.
    Donc si je comprends bien, il te suffit d'inverser l'ordre de ta boucle for, non?
    Comme ça il commence par le dernier élément, puis l'avant dernier est copié en début de page et donc décale le dernier en dessous et ainsi de suite jusqu'au premier.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  15. #15
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    12 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 12 886
    Points : 34 632
    Points
    34 632
    Billets dans le blog
    39

    Par défaut

    C'est plus un problème VBA Word que VBA Excel... (j'ai déplacé sur le bon forum)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Membre habitué Avatar de Wololol
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2018
    Messages : 104
    Points : 159
    Points
    159

    Par défaut

    Citation Envoyé par halaster08 Voir le message
    Donc si je comprends bien, il te suffit d'inverser l'ordre de ta boucle for, non?
    Comme ça il commence par le dernier élément, puis l'avant dernier est copié en début de page et donc décale le dernier en dessous et ainsi de suite jusqu'au premier.
    C'est ce que j'ai fait au final, mais je penser pouvoir trouver une autre solution

    Merci

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

Discussions similaires

  1. [WD-2003] Publipostage - Erreur 4198
    Par Vin_SuFu_R@T dans le forum VBA Word
    Réponses: 8
    Dernier message: 29/06/2010, 13h01
  2. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 22h20
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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