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 :

VBA: excel_word automatisation facturation [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Par défaut VBA: excel_word automatisation facturation
    Bonjour à tous,
    Ayant lu un certain nombre de post sur ce sujet j'imagine que mon titre ne vous inspire pas.
    Pourtant je n'ai pas réussi a trouvé ou à comprendre et appliquer ce que j'ai pu trouver pour mon sujet.

    Alors voilà : je cherche à automatiser ma facturation client via un publipostage ou autre à partir d'Excel, en un clic (Après avoir inséré mes donné dans mon tableur de suivi de comptabilité bien sûr). Donc créé une à plusieurs factures au format Word "Infine" via mon tableau de comptabilité Excel.

    Je pose le contexte :
    Chaque mois je dois envoyer un certain nombre de facture à différent clients. J’utilise pour se faire un fichier Excel avec plusieurs Onglet pour toute ma comptabilité (Seulement un mes utile pour ma facturation).
    Mes donner sont donc ranger dans se Tableur avec comme renseignement de mise en forme :
    La Date ; Le salarié affilier à la mission ; le contrat ; le client ; N° Propal ; N°BC ; La période ; N° Facture ; TTC $ ; HT $ ; TVA $

    Toute ces information ne me sont pas utile pour crée ma facture. Ce sont les titres de mes colonnes. Chaque donnée de facture pouvant se retrouver en suivant une ligne a l’horizontal. La dernière ligne de mon tableur étant la facture la plus récente a envoyé. En sachant que le tableau ne change pas mais progresse avec le temps.

    Sans système d’automatisation j’ai tout simplement créé un modèle de facture avec des champs prédéfini par « le renseignement voulu » qu’il me suffit de changer à la main…
    Je perds quand même pas mal de temps chaque mois pour tout ça (environ une demi/journée).
    D’où ma volonté de créé une macro Excel pour automatiser le tous.

    Mes prérequis :
    . Le nombre de mission est de facture étant variable la liaison doit pouvoir être adaptable par rapport à la date
    . Le nombre de facture créé doit pouvoir être variable (de 1 à n)
    . Les informations des cellules doivent pouvoir s’adapter à des champs prédéfinis sur mon modèle
    .L’adresse doit pouvoir varier en fonction du client défini dans le tableur (un champ à remplir sur mon modèle via mes contact)
    . Les Factures une fois terminer ne doivent pas être envoyés mais sauvegarder une à une et non toute dans un seul fichier Word dans un emplacement Document défini sous forme de doc word avec un nom variable en fonction du client ou de la date (voir les deux + la mission )
    .Une ligne à l’horizontal (Du tableur) une fois traité et mis sous forme de facture ne doit pas être retraité par l’Automat/Macro

    Voilà je crois avoir été explicite… ou pas
    même si ce post ressemble a beaucoup d'autres.
    J’espère avoir un retour.

    Merci à Vous

  2. #2
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour,

    Voici en pièce jointe un modèle dont je me suis servi. Peut-être vous sera-t-il utile.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Par défaut re
    Bonjour,
    Merci NEC14 pour ta réponse se tuto est très bien fait pour automatiser une facture Excel.

    Dans mon cas par contre je cherche réellement à trouver un moyen d'automatiser ma facturation à partir d'Excel pour finir sur une facture Word qui a une meilleure mise en page et mise en forme.
    Dans mon premier post j'ai généralisé ma demande en partageant un résumé de mon projet.

    En fait sur mon module VBA j'ai réussi à ouvrir mon modèle de facture Word :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set wordApp = CreateObject("Word.Application")
    Set wordDoc = wordApp.Documents.Open("Modèle.docx")
                  wordApp.Visible = True
    Ensuite j’ai cherché à débuter un publipostage dans se doc ouvert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    With wordDoc = ActiveDocument.MailMerge.OpenDataSource_
    Name = ("synthese facturation.xlxs")
    J’obtiens un message d’erreur sur With wordDoc… je bloc déjà à se niveau la…

    En y repensant peut être que le Publipostage ne convient pas totalement à ma requête… Qu’en penser vous ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour,

    Cet exemple ouvre le document principal de publipostage Word depuis Excel. La procédure lance ensuite l'impression pour l'ensemble des enregistrements.

    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
     
    Private Sub commandButton1_Click()
     
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
        Dim docWord As Word.Document
        Dim appWord As Word.Application
        Dim NomBase As String
     
        NomBase = "C:\dossier\labase.xls"
     
        Application.ScreenUpdating = False
        Set appWord = New Word.Application
        appWord.Visible = True
     
     'Ouverture du document principal Word
        Set docWord = appWord.Documents.Open("C:\leDocument.doc")
     
     
     'fonctionnalité de publipostage pour le document spécifié
        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 [Feuil1$]"
     
     'Spécifie la fusion vers l'imprimante
            .Destination = wdSendToPrinter
            .suppressBlankLines = True
                'Prend en compte l'ensemble des enregistrements
                With .DataSource
                    .firstRecord = wdDefaultFirstRecord
                    .lastRecord = wdDefaultLastRecord
                End With
     
    'Exécute l'opération de publipostage
            .Execute Pause:=False
        End With
     
        Application.ScreenUpdating = True
     
     
    'Fermeture du document Word
        docWord.Close False
        appWord.Quit
    End Sub
    http://silkyroad.developpez.com/Exce...tageWordExcel/

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Par défaut
    bonjour,

    je n'est toujours pas réussi a terminer ma macro... mon problème actuel se situe au niveau de la fusion des champs :

    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
    'Spécifie les champ de fusion
     ActiveDocument.Fields.Add Selection.Range, Type:=wdFieldMergeField, Text:=" Client "
         Selection.TypeText vbCrLf & " F4 " & vbCrLf
     
         ActiveDocument.Fields.Add Selection.Range, Type:=wdFieldMergeField, Text:=" mois "
         Selection.TypeText vbCrLf & " F1 " & vbCrLf
     
         ActiveDocument.Fields.Add Selection.Range, Type:=wdFieldMergeField, Text:=" N° facture "
         Selection.TypeText vbCrLf & " F9 " & vbCrLf
     
         ActiveDocument.Fields.Add Selection.Range, Type:=wdFieldMergeField, Text:=" N° BC "
         Selection.TypeText vbCrLf & " F7 " & vbCrLf
     
         ActiveDocument.Fields.Add Selection.Range, Type:=wdFieldMergeField, Text:=" N° Propal "
         Selection.TypeText vbCrLf & " F6 " & vbCrLf
     
         ActiveDocument.Fields.Add Selection.Range, Type:=wdFieldMergeField, Text:=" Nom Projet "
         Selection.TypeText vbCrLf & " F5 " & vbCrLf
     
         ActiveDocument.Fields.Add Selection.Range, Type:=wdFieldMergeField, Text:=" mois "
         Selection.TypeText vbCrLf & " F1 " & vbCrLf
     
         ActiveDocument.Fields.Add Selection.Range, Type:=wdFieldMergeField, Text:=" HT € "
         Selection.TypeText vbCrLf & " F11 " & vbCrLf
     
         ActiveDocument.Fields.Add Selection.Range, Type:=wdFieldMergeField, Text:=" HT € "
         Selection.TypeText vbCrLf & " F11 " & vbCrLf
     
         ActiveDocument.Fields.Add Selection.Range, Type:=wdFieldMergeField, Text:=" HT € "
         Selection.TypeText vbCrLf & " F11 " & vbCrLf
     
         ActiveDocument.Fields.Add Selection.Range, Type:=wdFieldMergeField, Text:=" TVA € "
         Selection.TypeText vbCrLf & " F12 " & vbCrLf
     
         ActiveDocument.Fields.Add Selection.Range, Type:=wdFieldMergeField, Text:=" TTC € "
         Selection.TypeText vbCrLf & " F10 " & vbCrLf
    j'ai pourtant l'impression d'appliquer la bonne formule mais vraisemblablement je me trompe pas mal.
    je m'explique: a la fin de mes première ligne "Text:="TTC €"" représente pour moi le champ de mon modèle que j'aimerai remplacer.
    la deuxième ligne, "Selection.TypeText vbCrLf & " F10 " & vbCrLf" représente pour moi encore, la colonne avec les cellule qui devrait remplacer le champ de la première ligne...

    Pour le moment en exécutant le module se qui est écrit dans ces phrase code s'insèrent en haut de la page tout a la suite...

    Merci de votre Aide !

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Par défaut Merci bien
    Bonjour a tous,
    tous d'abord merci pour votre aide !!!
    j'en est terminer avec cet macro...par contre j'ai laisser tomber le publipostage.
    Ne mis connaissant pas assez en VBA.
    J'ai opter pour la faciliter...
    j'ai crée une boucle après avoir préparé mon modèle Word disposant des signet sur les "champ" a changer pour chaque facture.
    Pour tous ceux et celle qui cherche et qui chercheront tous comme moi des solution sur les forums.
    je vous offre ma solution:

    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
    Sub test()
     Dim n As Integer
     
    Application.Sheets("données facture").Activate
    Set wordApp = CreateObject("Word.Application")
     
     
    With ActiveSheet.Range(Cells(2, 1), Cells(1, 1).End(xlDown))
    n = 0
     
    For Each c In .Rows
     
    n = n + 1
     
     
    If c.Offset(0, 12).Value = "" Then
     
    Set wordDoc = wordApp.Documents.Open("C:\votre modèle de facture word.docx")
    wordApp.Visible = True
     
    On Error Resume Next
     
    If c.Offset(0, 6).Value = "" Or c.Offset(0, 6).Value = "NS" Or c.Offset(0, 6).Value = "a voir" Then
    wordDoc.Bookmarks("n_bc").Range.Text = ""
    wordDoc.Bookmarks("ref_commande").Range.Text = ""
    Else: wordDoc.Bookmarks("n_bc").Range.Text = c.Offset(0, 6).Value
    End If
     
    If c.Offset(0, 5).Value = "" Or c.Offset(0, 5).Value = "NS" Or c.Offset(0, 5).Value = "a voir" Then
    wordDoc.Bookmarks("n_propal").Range.Text = ""
    wordDoc.Bookmarks("selon_proposition").Range.Text = ""
    Else: wordDoc.Bookmarks("n_propal").Range.Text = c.Offset(0, 5).Value
    End If
     
    wordDoc.Bookmarks("date_facture").Range.Text = c.Value
    wordDoc.Bookmarks("client").Range.Text = c.Offset(0, 3).Value
    wordDoc.Bookmarks("n_facture").Range.Text = c.Offset(0, 8).Value
     
    Mois_Date = Format(c.Value, "mmm")
    An_Date = Format(c.Value, "yyyy")
     
    wordDoc.Bookmarks("mois2").Range.Text = Mois_Date & " " & An_Date
    wordDoc.Bookmarks("ht_m").Range.Text = c.Offset(0, 10).Value
    wordDoc.Bookmarks("ht_pu").Range.Text = c.Offset(0, 10).Value
    wordDoc.Bookmarks("ht_total").Range.Text = c.Offset(0, 10).Value
    wordDoc.Bookmarks("nom_projet").Range.Text = c.Offset(0, 4).Value
    wordDoc.Bookmarks("ttc").Range.Text = c.Offset(0, 9).Value
    wordDoc.Bookmarks("tva").Range.Text = c.Offset(0, 11).Value
     
    nom_client = c.Offset(0, 3).Value
    date_document = Format(Date, "yyyymmdd")
     
    wordDoc.SaveAs Filename:="C:\le nom du lieu d'enregistrement\" & date_document & "_" & nom_client & "_" & n & ".docx"
    wordDoc.Close False
     
    c.Offset(0, 12).Value = "A VALIDER !"
    End If
     
    Next c
    End With
     
    wordApp.Quit
    Set wordApp = Nothing
     
    End Sub
    Cordialement
    a+

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

Discussions similaires

  1. [VBA-Excel] Automatiser une recherche de valeurs cibles
    Par Alqualonde dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/04/2012, 23h13
  2. [VBA-E] Automatisation Variable
    Par nono le golfeur dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/03/2007, 13h33
  3. [VBA-E]Automatisation de l'actualisation de tableaux croisés dynamiques
    Par Alqualonde dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/03/2007, 09h28
  4. [VBA-E]Automatisation d'un bon de commande
    Par Lexot2 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/10/2006, 12h17
  5. [VBA-E]automatiser "clic droit, format cellule, texte"
    Par jmlcea dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/04/2006, 16h21

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