Créer un historique issu de requêtes SQL grâce à une macro

Bonjour,

Comme indiqué dans le titre, je souhaiterai créer un "historique" des résultats de mes requêtes:

Dans les deux premiers onglets de mon fichier, j'ai une requête qui va chercher des données via Oracle. Dans le troisième, je souhaiterai que vienne s'ajouter les les données qui ne sont pas déjà présentes et cela via une macro. Etant novice en VBA, j'ai commencé à écrire un code d'après des codes trouvés sur internet mais celui est, je crois, pas du tout optimisé et prends beaucoup de temps de traitement. Auriez vous quelques idées afin de l'améliorer?

Dans un second temps, je souhaiterai créer une deuxième fonctionnalité à ce fichier :

Dans mon troisième onglet, à partir de la colonne K, je vais remplir des informations soit à la main, soit d'après des listes. En fonction des infos rentrées, je souhaiterai créer une macro qui me génère un document type avec les lignes de mon fichier. Par exemple, je souhaiterai que toutes les lignes avec comme responsabilités moi soient affichées dans ce fichier créé.

Merci pour votre aide et vos réponses.

Cordialement

Pierro26

Ci-dessous le code déjà ecrit :

Sub Invoice_Follow_up()

    Application.ScreenUpdating = False
    'Declaration variables
    Dim BMaximo1 As Variant
    Dim BMaximo2 As Variant

    'Declaration workbooks & worksheets
    Set wb_WMATL = Workbooks("PI OPS Center Facturation Follow-up v1.xlsm")
    Set ws_dashboard = wb_WMATL.Sheets("Invoice Follow-up")
    Set ws_maximo1 = wb_WMATL.Sheets("Maximo VAN + GAR")
    Set ws_maximo2 = wb_WMATL.Sheets("Maximo Betrieb")

    'Information
    ws_dashboard.Range("B2") = Date & " " & Time

    'Refresh Maximo data
    ws_maximo1.Activate
    ws_maximo1.Range("A2").Select
    Selection.ListObject.QueryTable.Refresh

    nb_ligne_maximo1 = ws_maximo1.Range("A" & Application.Rows.Count).End(xlUp).Row
    ws_maximo1.Range("A2:A" & nb_ligne_maximo1).Select
    Selection.TextToColumns Destination:=ws_maximo1.Range("A2:A" & nb_ligne_maximo1), DataType _
        :=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
        Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=True _
        , OtherChar:="/", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True

    ws_maximo2.Activate
    ws_maximo2.Range("A2").Select
    Selection.ListObject.QueryTable.Refresh

    nb_ligne_maximo2 = ws_maximo2.Range("A" & Application.Rows.Count).End(xlUp).Row
    ws_maximo2.Range("A2:A" & nb_ligne_maximo2).Select
    Selection.TextToColumns Destination:=ws_maximo1.Range("A2:A" & nb_ligne_maximo1), DataType _
        :=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
        Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=True _
        , OtherChar:="/", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True

    'Mise en memoire Maximo data
    nb_ligne_maximo1 = ws_maximo1.Range("A" & Application.Rows.Count).End(xlUp).Row
    BMaximo1 = ws_maximo1.Range("A2:H" & nb_ligne_maximo1)
    nbligne_dbMaximo1 = UBound(BMaximo1)

    nb_ligne_maximo2 = ws_maximo2.Range("A" & Application.Rows.Count).End(xlUp).Row
    BMaximo2 = ws_maximo2.Range("A2:H" & nb_ligne_maximo2)
    nbligne_dbMaximo2 = UBound(BMaximo2)

    'Ajout des données
    ws_dashboard.Activate
    nb_ligne_dashboard = ws_dashboard.Range("A" & Application.Rows.Count).End(xlUp).Row
    If nb_ligne_dashboard = 4 Then
        nb_ligne_dashboard = 5
    End If

    'Boucle Maximo
    For j = 1 To nbligne_dbMaximo1
        addrow = 0
        'Boucle dashboard
        For i = 5 To nb_ligne_dashboard
            'Si le work order correspond
            If BMaximo1(j, 1) = ws_dashboard.Range("A" & i) Then
                'Update des données de la ligne
                ws_dashboard.Range("B" & i) = BMaximo1(j, 2)
                ws_dashboard.Range("C" & i) = BMaximo1(j, 3)
                ws_dashboard.Range("D" & i) = BMaximo1(j, 4)
                ws_dashboard.Range("E" & i) = BMaximo1(j, 5)
                ws_dashboard.Range("F" & i) = BMaximo1(j, 6)
                ws_dashboard.Range("G" & i) = BMaximo1(j, 7)
                ws_dashboard.Range("H" & i) = BMaximo1(j, 8)
                addrow = 0
                Exit For
            Else
                addrow = 1
            End If
        Next i

       'Ajout ligne
        If addrow = 1 Then
            nb_ligne_dashboard = nb_ligne_dashboard + 1
                ws_dashboard.Range("A" & nb_ligne_dashboard) = BMaximo1(j, 1)
                ws_dashboard.Range("B" & nb_ligne_dashboard) = BMaximo1(j, 2)
                ws_dashboard.Range("C" & nb_ligne_dashboard) = BMaximo1(j, 3)
                ws_dashboard.Range("D" & nb_ligne_dashboard) = BMaximo1(j, 4)
                ws_dashboard.Range("E" & nb_ligne_dashboard) = BMaximo1(j, 5)
                ws_dashboard.Range("F" & nb_ligne_dashboard) = BMaximo1(j, 6)
                ws_dashboard.Range("G" & nb_ligne_dashboard) = BMaximo1(j, 7)
                ws_dashboard.Range("H" & nb_ligne_dashboard) = BMaximo1(j, 8)
                ws_dashboard.Range("N1").Copy Destination:=ws_dashboard.Range("N" & nb_ligne_dashboard)
        End If
    Next j

    For j = 1 To nbligne_dbMaximo2
        addrow = 0
        'Boucle dashboard
        For i = 5 To nb_ligne_dashboard
            'Si le work order correspond
            If BMaximo2(j, 1) = ws_dashboard.Range("A" & i) Then
                'Update des données de la ligne
                ws_dashboard.Range("B" & i) = BMaximo2(j, 2)
                ws_dashboard.Range("C" & i) = BMaximo2(j, 3)
                ws_dashboard.Range("D" & i) = BMaximo2(j, 4)
                ws_dashboard.Range("E" & i) = BMaximo2(j, 5)
                ws_dashboard.Range("F" & i) = BMaximo2(j, 6)
                ws_dashboard.Range("G" & i) = BMaximo2(j, 7)
                ws_dashboard.Range("H" & i) = BMaximo2(j, 8)
                addrow = 0
                Exit For
            Else
                addrow = 1
            End If
        Next i

       'Ajout ligne
        If addrow = 1 Then
            nb_ligne_dashboard = nb_ligne_dashboard + 1
                ws_dashboard.Range("A" & nb_ligne_dashboard) = BMaximo2(j, 1)
                ws_dashboard.Range("B" & nb_ligne_dashboard) = BMaximo2(j, 2)
                ws_dashboard.Range("C" & nb_ligne_dashboard) = BMaximo2(j, 3)
                ws_dashboard.Range("D" & nb_ligne_dashboard) = BMaximo2(j, 4)
                ws_dashboard.Range("E" & nb_ligne_dashboard) = BMaximo2(j, 5)
                ws_dashboard.Range("F" & nb_ligne_dashboard) = BMaximo2(j, 6)
                ws_dashboard.Range("G" & nb_ligne_dashboard) = BMaximo2(j, 7)
                ws_dashboard.Range("H" & nb_ligne_dashboard) = BMaximo2(j, 8)
                ws_dashboard.Range("N1").Copy Destination:=ws_dashboard.Range("N" & nb_ligne_dashboard)
        End If
    Next j

    'Mettre en forme ligne 4 jusqu'à dernière ligne
    ws_dashboard.Rows("5").Copy
    ws_dashboard.Rows("6:" & nb_ligne_dashboard).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    ws_dashboard.Range("A1").Select

    Application.ScreenUpdating = True

    'Supression des lignes non présentent dans l'extract
   For i = 5 To nb_ligne_dashboard
         For j = 1 To nbligne_dbMaximo1
            If BMaximo1(j, 1) = ws_dashboard.Range("A" & i) Then
                deleterow = 0
                Exit For
            Else
                deleterow = 1
            End If
         Next j

         If deleterow = 1 Then
            ws_dashboard.Range("N" & i) = "6- Parts delivered"
         End If

    Next i
    For i = 5 To nb_ligne_dashboard
         For j = 1 To nbligne_dbMaximo2
            If BMaximo2(j, 1) = ws_dashboard.Range("A" & i) Then
                deleterow = 0
                Exit For
            Else
                deleterow = 1
            End If
         Next j

         If deleterow = 1 Then
            ws_dashboard.Range("N" & i) = "6- Parts delivered"
         End If

    Next i
End Sub

Bonjour

Un essai à tester. Te convient-il ?

Bye !

Tout d'abord un grand merci pour ta réactivité et ton aide! Mon objectif est quasi atteint avec ce que tu as déjà fait. Je souhaiterai simplement que les données extraites suivant le critère Go/NoGo, viennent remplir le tableau dans l'onglet extraction. Les champs à remplir sont ceux en vert.

La première colonne sera toujours A, la 3eme correspond à la date de l'extraction, la 4eme, la 9eme et la 10eme sont elles aussi remplies avec des données provenant des deux requêtes.

PS: serait-il possible de rajouter 2/3 commentaires sur ton code afin que je puisse comprendre comment il fonctionne et le modifier si besoin.

Merci pour ta réponse

Cordialement

Pierro26

Bonjour

Nouvelle version.

Bye !

Bonjour Gmb,

Je te renouvelle à nouveaux tous mes remerciements pour le temps que tu as passé sur le code. Il était parfait selon moi. Malheureusement le besoin a évolué, comme souvent.

Le nouveau besoin est le suivant : L’objectif des macros est de créer une sorte de tableau de bord regroupant différentes informations issues de requêtes. Celles-ci sont dans les deux premiers onglets. Elles vont chercher différentes données dans une base, les mêmes que dans mon exemple.

Sur ce tableau de bord, il faudrait que j’aie 3 boutons dans le 3ème onglet (tableau de bord) :

• Le premier 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 deuxième serait un bouton qui présenterait une facturation prévisionnelle suivant un critère GO/NOGO. (Fonctionnalité déjà présente)

• Le troisième serait une facturation réelle qui pourrait se faire sur un critère « To do » ou « Not to do ».

Concernant les extractions, elles se feraient toujours dans le même tableau (même nombre de colonnes, même entêtes). Par ailleurs serait-il possible d’enregistrer les extractions sous un fichier PDF séparément ?

Autre point, serait-il possible de faire un historique sur une cinquième feuille de l’ensemble des points réellement facturés ?

Merci pour ta réponse et n’hésite pas si tu as des questions.

Cordialement

Pierro26

Il est en fait facile de faire évoluer un besoin à l'infini, sans prendre la peine de bien réfléchir au départ pour définir qu'il est, surtout si cela ne coûte rien.

Pour ce qui me concerne, je passe la main.

Bye !

Bonsoir Gmb,

Il est vrai que je n'ai pas pris le temps de bien réfléchir à mon besoin, sur ce point je te rejoins. Je tiens à m'excuser pour la perte de temps générée. Je vais essayer de me débrouiller tout seul, bien que le nouveau besoin soit au delà de mes connaissances.

Encore une fois désolé.

Bonne soirée.

Cordialement

Pierro26

Rechercher des sujets similaires à "creer historique issu requetes sql macro"