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 :

excel VBA : publipostage et insertion champ cellules dans word [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    métreur
    Inscrit en
    Juillet 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : métreur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2017
    Messages : 20
    Par défaut excel VBA : publipostage et insertion champ cellules dans word
    Bonjour à tou(te)s

    Je suis tout nouveau en programmation excel VBA, j'ai beaucoup lu sur les forums mais je n'arrive pas à résoudre mon problème:
    j'ai créé une application qui permet de chiffrer des produits en direct chez les clients par l'intermédiaire de formulaires
    Tout fonctionne bien jusqu'au moment ou je souhaite mettre en forme mon devis sur word par publipostage des champs et insertion de la grille de tarif à l'aide d'un signet.
    j'ai donc essayé d'adapter vos codes que j'ai trouvé sur plusieurs discussions à mon besoin mais quand je lance le débogage pour voir combien d'erreur j'ai fait ça bloque sur la première ligne : Dim docWord As word.Document en me disant que le type défini par l'utilisateur est non défini
    Voici le bout de code en question

    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
     Dim docWord As word.Document
    Dim appWord As word.Application
    Dim NomBase As String
     
    NomBase = "D:\ahaVBA\0A-H-A calcul VBA.xlsm"
     
        Set appWord = CreateObject("Word.Application")
        appWord.Visible = True
        Set docWord = appWrd.Documents.Open("D:\ahaVBA\DevisAHA.doc", ReadOnly:=True)
        With docWord.mailMerge
            'Ouvre la base de données
            .OpenDataSource Name:=NomBase, _
            Connection:="Driver={Microsoft Excel Driver (*.xls)};" & "DBQ=" & NomBase & "; ReadOnly=True;", SQLStatement:="SELECT * FROM [tmpBDD$]"
        '        'Exécute l'opération de publipostage
            .Execute Pause:=False
        End With
     
    Dim TabTarif As Range
        For i = 1 To 20
            If (Worksheets("tmptarif").Range("A" & i) <> "") Then
                TabTarif = Worksheets("tmptarif").Range("A1:B" & i)
                i = i + 1
            End If
        Next i
        docWord.bookmarks("TableauTarif").Range.Text = TabTarif
     
     
        Application.ScreenUpdating = True
    (pour info je travail sur office 365)
    Je vous remercie par avance pour vos explications et votre temps

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Outils > Références > Cocher la bibliothèque "Microsoft Word XX.0 Object Library" > Ok
    En remplaçant XX par le numéro de la version Office.

  3. #3
    Membre averti
    Homme Profil pro
    métreur
    Inscrit en
    Juillet 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : métreur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2017
    Messages : 20
    Par défaut
    super merci beaucoup ça fonctionne et le publipostage se fait bien
    par contre il se fait sur une copie du document d'origine et le signet que j'ai mis en place sur le .doc d'origine n'existe pas sur la copie donc j'ai encore erreur13

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Fabien25360 Voir le message
    par contre il se fait sur une copie du document d'origine et le signet que j'ai mis en place sur le .doc d'origine n'existe pas sur la copie donc j'ai encore erreur13
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set docWord = appWrd.Documents.Open("D:\ahaVBA\DevisAHA.doc", ReadOnly:=True)
    Sans voir l'intégralité de ton code, il est difficile de te répondre.
    Mais en ouvrant ton document d'origine en ReadOnly, il est logique qu'il ne soit pas modifié lui-même.

  5. #5
    Membre averti
    Homme Profil pro
    métreur
    Inscrit en
    Juillet 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : métreur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2017
    Messages : 20
    Par défaut
    J'avais pensé effectivement à readonly=false mais ça crée toujours une copie
    J'ai donc essayé d'insérer le tableau avant l'étape de publipostage pour éviter la disparition du signet au moment du publipostage mais j'ai une incompatibilité de type.
    Je pense que ça viens de ma déclaration de variable dim tabtarif as range (j'ai testé string, integer, cells, variant mais rien n'a l'air de fonctionner)
    Le code présenté fait partie de Private Sub bValider_Click() dans le if (vbyes d'une msgbox) et le reste du code est du traitement de données excel mais le "paragraphe word" est complet dans son état, j'ai peut être oublié des choses

  6. #6
    Membre averti
    Homme Profil pro
    métreur
    Inscrit en
    Juillet 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : métreur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2017
    Messages : 20
    Par défaut
    En fait, il bloque sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabTarif = Worksheets("tmptarif").Range("A1:B" & i)
    et évoque une incompatibilité de type

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    On ne peut pas assigner un objet (un Range par exemple) avec un simple "=" comme on le ferait pour une valeur.
    Il faut mettre "Set" devant.
    https://msdn.microsoft.com/fr-fr/lib.../gg251642.aspx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set TabTarif = Worksheets("tmptarif").Range("A1:B" & i)

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

Discussions similaires

  1. [XL-2013] Code VBA obligation de compléter une cellule dans fichier Excel
    Par Laura92300 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/01/2016, 12h00
  2. Excel VBA - Mettre des mots en rouge dans des cellules
    Par mchevall dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/11/2012, 17h23
  3. insertion de cellules dans une formule excel
    Par nazaire dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/06/2008, 20h12
  4. [VBA-E] Insertion de texte dans word
    Par malhivertman1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/05/2006, 17h17
  5. [VBA] Copier une plage de cellules dans un fichier fermé
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/01/2006, 17h52

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