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.

Voici les différents codes que j’ai déja :

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

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

PS : le fichier est trop lourd pour etre uploadé sur le site (même en version .zip)

Cordialement

Pierro26

Bonjour à tous,

après un gros tri de mes données, j’ai reussi à uploader le fichier. Le voici. En espérant que celui vous permettra de me donner des pistes de réflexion.

Bonne journée

Cordialement

Pierro26Facturier.xlsm (142,1 Ko)