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 :

Suppression requête par VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Suppression requête par VBA
    Bonjour à tous,

    J'exploite une base de données dans Excel 2019 par une requête SQL afin de travailler dessus.

    J'ai crée une macro pour sauvegarder dans un nouvel onglet à la date du jour les données avant de réactualiser la requête.
    Ce qui donne cette petite macro

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Mise_à_jour_stock()
    'on actualise la requête à la bonne date
     ActiveWorkbook.Connections("Requête*-*DP_STOCKS").Refresh
    'on sauvegarde le tableau dans un nouvel onglet à la date du jour
     Sheets("SQL").Copy after:=Sheets("SQL")
     Sheets("SQL (2)").Name = Format(Date, "dd-mmm")
     'on retourne au premier onglet
     Sheets("Synthèse").Select
     
    End Sub



    Je ne trouve pas le moyen de supprimer la requête dans le nouvel onglet crée.
    En effet, ce dernier reste.
    Ce qui fait que quand j'actualise la requête SQL, les onglets à la date antérieur s'actualisent aussi avec les données du jour.
    J'ai essayé plusieurs solutions sans que cela ne fonctionne.

    Je pensais que cette solution simple pouvait marcher mais ce n'est pas le cas. Auriez-vous une idée ?

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub Mise_à_jour_stock()
     
     ActiveWorkbook.Connections("Requête*-*DP_STOCKS").Refresh
     
     Sheets("SQL").Copy after:=Sheets("SQL")
     Sheets("SQL (2)").Name = Format(Date, "dd-mmm")
     
     Activesheets.Querytables(1).Delete
     
     Sheets("Synthèse").Select
     
    End Sub


    Par avance merci

    Cordialement

  2. #2
    Membre éclairé
    Bonsoir
    Bonsoir,,

    Assez bizarre comme soucis.

    Peut-être une piste ou même deux:
    Faire un copier coller valeur vers une feuilles, ou envois de la feuille vers un classeur 'archive'


    Sinon pour supprimer toutes les connections au classeur

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Sub DeleteAllConnectionsInWorkbook()
        Dim aConn as Object
        For Each aConn in ActiveWorkbook.Connections
            aConn.Delete
        Next aConn
    End Sub

  3. #3
    Membre à l'essai
    Bonsoir,

    Merci pour votre retour

    Je suis parti sur un ajout à la suite dans une feuille "Archives" et je fais un tableau croisé dynamique pour appeler la date de chaque ligne

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    nbLignes = Sheets("SQL").Cells(Rows.Count, "A").End(xlUp).Row
    Sheets("SQL").Range("A2:J" & nbLignes).Copy Destination:=Sheets(4).Range("D1048576").End(xlUp)(2)