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 :

Création d'un facturier


Sujet :

Macros et VBA Excel

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Juillet 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Juillet 2019
    Messages : 6
    Par défaut Création d'un facturier
    Bonjour à tous,

    Je suis débutant en VBA et j'aimerai créer une sorte de facturier avec des macros. Mon fichier est composé de plusieurs feuilles : les deux premières sont des requêtes SQL qui vont extraire des données dans une base. La 3eme est une juxtaposition des deux tableaux. La 4eme est quant à elle un template de facture qui va se remplir grâce à une macro.
    Dans les deux requêtes, je vais avoir plusieurs types de statuts possibles (colonne C et D). Je souhaiterai que toutes les lignes de chaque requêtes qui ont pour statut "A" (au choix de l'utilisateur avec plusieurs choix possibles) aillent dans le 3eme onglet. Le but serait de créer une facture prévisionnelle avec toutes lignes ayant un statut "X" par exemple et une facture réelle ayant en statut "Y". La facture réelle sera basée sur le critère de "GO/NOGO" (liste déroulante). Une 5eme feuille pourrait etre ajoutée pour créer un historique des lignes "passées" dans la facture réelle afin de suivre ce qui a été réellement facturé.
    Enfin je souhaiterai sauvegarder ces factures sous pdf (les deux factures possibles). J'avais dans l'idée de créer 4 boutons :

    • Le premier serait l'actualisation des requêtes
    • Le deuxième serait un bouton « actualiser » qui viendrait ajouter toute nouvelle ligne non présente dans le tableau de bord mais présente dans un deux premiers onglets. (Fonctionnalité déjà présente)
    • Le troisième serait un bouton qui présenterait une facturation prévisionnelle suivant un critère de statut (au choix de l'utilisateur). (Fonctionnalité déjà présente)
    • Le quatrième serait une facturation réelle qui se ferait critère « GO » ou « NOGO ».
    Dans la facture, les colonnes à remplir sont en vert et remplies de la façon suivante :

    • La premiere serait remplie avec AB pour chaque ligne
    • La deuxième la date issue de la requête SQL
    • La troisième avec une série de chiffres issus de la requête SQL (colonnes D et E)
    • La quatrième avec une série de chiffres (issus de la requête colonnes C et K)
    • La cinquième avec la description (issu de la requête aussi colonnes B)


    J'ai dejà une partie des codes mais je bloque pour terminer. Toute aide même minime est la bienvenue.

    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
    Dim dico As Object, tablo, tabloR(), f As Worksheet, fe As Worksheet
    Dim i&, j&, k&
     
     
    Private Sub CommandButton1_Click()  'Bouton Valider
     
        If ComboBox1 = "" Or ComboBox2 = "" Then
            MsgBox "Saisie incomplète."
            Exit Sub
        End If
     
        k = 0                                                                           'initialisation de la variable
        For i = 1 To UBound(tablo, 1) - 1                                               'On va passer toutes les lignes du tablo de la feuille ''Invoice Follow-up''
            If (tablo(i, 11) = ComboBox1 Or ComboBox1 = "SBB ou BTPI") _
                    And (tablo(i, 13) = ComboBox2 Or ComboBox2 = "GO ou NOGO") Then     'et ne s'intéresser qu'aux lignes qui répondent aux critéres choisis
                ReDim Preserve tabloR(1 To UBound(tablo, 2), 1 To k + 1)                'on initialise le tablo de résultats
                On Error Resume Next                                                    'pour le cas de cellules vides contenant une date
                tabloR(1, k + 1) = "BT"
                tabloR(3, k + 1) = Date
                tabloR(4, k + 1) = tablo(i, 5)
                tabloR(9, k + 1) = tablo(i, 3)
                tabloR(10, k + 1) = tablo(i, 2)
                tabloR(21, k + 1) = tablo(i, 14)
                k = k + 1                                                               'on incrémente k
            End If
        Next i
     
        Sheets("Extraction").Range("A4").CurrentRegion.Offset(1, 0).ClearContents
        On Error Resume Next
        Range("A8:U8").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Delete Shift:=xlToLeft
        Sheets("Extraction").Range("A8").Resize(UBound(tabloR, 2), UBound(tablo, 2)) = Application.Transpose(tabloR)
        Sheets("Extraction").Activate
        fe.Range("U4") = Date & " " & Time
        Unload Me
     
    End Sub
     
    Private Sub UserForm_initialize()
     
        Set f = Sheets("Invoice Follow-up")
        Set fe = Sheets("Extraction")
     
     
        tablo = f.Range("A5").CurrentRegion.Offset(1, 0)    'Mise en mémoire-tableau des données du tableau de la feuille ''Invoice Follow-up''
        ComboBox1.List = Sheets("Données").Range("B2:B4").Value
        ComboBox1.AddItem "SBB ou BTPI"
        ComboBox2.List = Sheets("Données").Range("C2:C4").Value
        ComboBox2.AddItem "GO ou NOGO"
    End Sub

    et

    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
     
    Option Explicit
     
    Dim f, sh As Worksheet, dico As Object, tablo, wb_WMATL As Workbook, sh_dashboard As Worksheet
    Dim i&, j&, k&, lgn&
     
    Sub MettreAjour()
     
        f = Array(Sheets("Maximo VAN + GAR"), Sheets("Maximo Betrieb")) 'On met la liste des feuilles sources dans un ''Array''
        For i = 0 To 1      'On passe les 2 feuilles
            lgn = Range("A" & Rows.Count).End(xlUp)(2).Row      'Première ligne vide du tableau de la feuille de destination
            f(i).Range("A2:J" & f(i).Range("A" & Rows.Count).End(xlUp).Row).Copy _
                   Range("A" & lgn)                             'On copie le tableau de la feuille source à la suite du tableau existant sur la feuille de destination
        Next i
        Range("A4:J" & Range("A" & Rows.Count).End(xlUp).Row).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7 _
            , 8, 9, 10), Header:=xlYes      'on élimine les lignes en doublon dans la feuille de destination
     
        For i = 5 To Range("A" & Rows.Count).End(xlUp).Row
            'If Range("K" & i) = "" Then             'On met ou remet les listes de choix dans toutes les cellules de la colonne K
                With Range("K" & i).Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=Données!$B$2:$B$4"
                End With
            'End If
     
            'If Range("M" & i) = "" Then             'On met ou remet les listes de choix dans toutes les cellules de la colonne M
                With Range("M" & i).Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=Données!$C$2:$C$4"
                End With
            'End If
        Next i
    End Sub
     
     
    Sub Extraire()
        UserForm1.Show
    End Sub
     
     
    Sub requêtes()
        Dim wb_WMATL As Workbook, sh_dashboard As Worksheet
        Set wb_WMATL = Workbooks("Copie de OPS Center Facturation v2pa.xlsm")
        Set sh_dashboard = wb_WMATL.Sheets("Invoice Follow-up")
     
        Sheets("Maximo VAN + GAR").Activate
        Sheets("Maximo VAN + GAR").Range("A2").Select
        Selection.ListObject.QueryTable.Refresh
     
        Sheets("Maximo Betrieb").Activate
        Sheets("Maximo Betrieb").Range("A2").Select
        Selection.ListObject.QueryTable.Refresh
     
    End Sub
    et
    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
     
    Sub EnregistrerFacture()
        'déclaration des variables
        Dim NomDossier As String
        Dim CheminDossier As String
     
        On Error GoTo 1
     
        'Nom de dossier
        NomDossier = Application.InputBox("Dossier Enregistrement :", "Dossier")
        CheminDossier = "D:\Mes Docuements\Excel\Facture\" & NomDossier & "\"
     
        If NomDossier = "" Then Exit Sub
     
        'Enregistrement au format PDF
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        CheminDossier & "Facture_" & Range("U4").Value & ".PDF", quality:= _
        xlQualityStandard, includedocproperties:=True, ignoreprintareas:=False, _
        from:=1, to:=1, openafterpublish:=False
     
    1
    End Sub
    Merci

    Cordialement

    Pierro26
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Classe pour la création d'un graphe xy
    Par Bob dans le forum MFC
    Réponses: 24
    Dernier message: 03/12/2009, 17h20
  2. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36
  3. [Kylix] Création d'un fichier lien
    Par DrQ dans le forum EDI
    Réponses: 2
    Dernier message: 14/05/2002, 21h30
  4. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 16h04

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