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 :

Tableau structuré - Requête SQL - Réunir 2 tableaux


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut Tableau structuré - Requête SQL - Réunir 2 tableaux
    Bonjour,

    Dans une feuille de mon classeur, j'ai un tableau structuré issu d'une connexion SQL (Commandes mises en production)

    Dans le même classeur, j'ai une deuxième feuille contenant un deuxième tableau structuré issu d'une autre connexion SQL (Nouvelles commandes)

    Les 2 tableaux ont les mêmes entêtes de colonne avec plus ou moins de lignes

    Comment copier-coller toutes les lignes de ces 2 tableaux dans un seul ?

    Le but est de pouvoir effectuer une analyse dans le tableau structuré en utilisant les filtres ou via un tableau croisé dynamique

    Bien sûr, la mise à jour doit se faire en un clic ou lors de l'actualisation de toutes les sources du classeur

    Ci-dessous une macro vite faite qui fait le travail, mais il doit y avoir plus simple

    Je vous remercie
    Philippe

    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
    Option Explicit
    Sub Fusion_TS()
    Application.ScreenUpdating = False
    Dim NB_Lignes_TS_Fusion As Long
        Boutons_Fonctions.Bouton_Tout_Afficher
        '!!!!!!! IMPORTANT pour que le rafraîchissement puisse se terminer avant que la macro continue
        '!!!!!!! Modifier les paramètres Excel
        '!!!!!!! Sélectionner une cellule dans le tableau des DATA
        '!!!!!!! Sur le ruban Excel sélectionner Données
        '!!!!!!! Propriétés à côté de Actualiser tout
        '!!!!!!! Au bout du nom de la requête cliquer sur le bouton Propriétés de la requête
        '!!!!!!! Enlever la coche dans : Activer l'actualisation en arrière plan
        '!!!!!!! https://www.mrexcel.com/board/threads/excel-vba-refresh-wait.607332/
        ActiveWorkbook.RefreshAll 'Lancer le rafraichissement 
    On Error GoTo Suite 'Si le tableau est vide
        [TS_Fusion].ListObject.DataBodyRange.Delete
    Suite:
        [TS_PG_Production].ListObject.DataBodyRange.Copy
        Sheets("Fusion").Activate
        If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData 'Enlever les filtres
        Sheets("Fusion").Range("C2").Select
        Sheets("Fusion").Paste
        NB_Lignes_TS_Fusion = Sheets("Fusion").Range("TS_Fusion").ListObject.ListRows.Count + 1
        [TS_PG_Production_ETA].ListObject.DataBodyRange.Copy
        Sheets("Fusion").Range("TS_Fusion").Cells(NB_Lignes_TS_Fusion, 3).Select
        Sheets("Fusion").Paste
        Sheets("TCD").Select
        Sheets("TCD").PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
        MsgBox "Actualisation terminée", vbInformation, "Importation depuis LOOK"
    Application.ScreenUpdating = True
    End Sub

  2. #2
    Membre Expert
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 594
    Par défaut
    Bonjour

    Oui, à mon sens, il y a beaucoup plus simple je pense.

    Puisqu'il s'agit de deux requêtes allant chercher les infos dans une base SQL, il suffit de demander à PowerQuery de les ajouter l'une en dessous de l'autre tout simplement.
    Dans l'éditeur PowerQuery > Accueil > Ajouter des requêtes

    En espérant que cela aide

    Bonne nuit

    Pierre Dumas

  3. #3
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut
    Je vais voir ça demain, je n'ai accès au serveur avec mon PC privé

    Merci et bonne nuit

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 584
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 584
    Par défaut
    Bonjour

    Pour compléter

    Dans la mesure où PowerQuery accepte directement le SQL ont peut sans doute y faire une requête union en SQL...

  5. #5
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut
    Bonsoir

    Suppression de tous les Select et suppression des filtres dans les 3 tableaux

    Question comment supprimer les filtres de tous les tableaux avec une boucle ne contenant pas Activesheet ou Select ?

    Meilleures salutations


    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
    Option Explicit
    Sub Fusion_TS()
    Application.ScreenUpdating = False
    Dim NB_Lignes_TS_Fusion As Long
        'Enlever les filtres des 3 tableaux
        If Sheets("Fusion").ListObjects("TS_Fusion").ShowAutoFilter Then Sheets("Fusion").ListObjects("TS_Fusion").Range.AutoFilter
        If Sheets("Production").ListObjects("TS_Production").ShowAutoFilter Then Sheets("Production").ListObjects("TS_Production").Range.AutoFilter
        If Sheets("Sans_série").ListObjects("TS_Sans_serie").ShowAutoFilter Then Sheets("Sans_série").ListObjects("TS_Sans_serie").Range.AutoFilter
                '!!!!!!! IMPORTANT pour que le rafraîchissement puisse se terminer avant que la macro continue
                '!!!!!!! Modifier les paramètres Excel
                '!!!!!!! Sélectionner une cellule dans le tableau des DATA
                '!!!!!!! Sur le ruban Excel sélectionner Données
                '!!!!!!! Propriétés à côté de Actualiser tout
                '!!!!!!! Au bout du nom de la requête cliquer sur le bouton Propriétés de la requête
                '!!!!!!! Enlever la coche dans : Activer l'actualisation en arrière plan
                '!!!!!!! https://www.mrexcel.com/board/threads/excel-vba-refresh-wait.607332/
        ActiveWorkbook.RefreshAll 'Lancer le rafraichissement / srv-sql 3E_BEWEG / Pour_Data_RDV_LOOK / Nom utilisateur : look / Mot de passe : look
    On Error GoTo Suite 'Si le tableau est vide
        [TS_Fusion].ListObject.DataBodyRange.Delete
    Suite:
        [TS_Production].ListObject.DataBodyRange.Copy
        Sheets("Fusion").Range("K2").PasteSpecial Paste:=xlPasteValues
        NB_Lignes_TS_Fusion = Sheets("Fusion").Range("TS_Fusion").ListObject.ListRows.Count + 1
        [TS_Sans_serie].ListObject.DataBodyRange.Copy
        Sheets("Fusion").Range("TS_Fusion").Cells(NB_Lignes_TS_Fusion, 11).PasteSpecial Paste:=xlPasteValues
        Sheets("TCD").PivotTables("TCD_Production").PivotCache.MissingItemsLimit = xlMissingItemsNone 'Nettoyer les données fantôme des segments
        Sheets("TCD").PivotTables("TCD_Production").PivotCache.Refresh
        MsgBox "Actualisation terminée", vbInformation, "Importation depuis LOOK"
    Application.ScreenUpdating = True
    End Sub

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/09/2022, 12h23
  2. Réponses: 6
    Dernier message: 25/09/2009, 14h28
  3. [ezPDF] Tableau par requêtes sql
    Par frboyer dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 30/04/2009, 13h16
  4. Calendrier sous forme de tableau par requête SQL
    Par bouzinac dans le forum Langage SQL
    Réponses: 1
    Dernier message: 06/11/2008, 22h57
  5. [MySQL] Remplir un tableau par requêtes sql
    Par Melekitto dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/02/2006, 18h30

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