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

Excel Discussion :

Import Querytable vba - Champ variable


Sujet :

Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2020
    Messages : 20
    Par défaut Import Querytable vba - Champ variable
    Bonjour,

    Je cherche à importer des données de manière automatique d'une base de donnée, en filtrant sur une "Clé".
    Cette clé est variable, selon la valeur d'une cellule.

    J'ai utilisé l'enregistreur de macro pour réaliser la tâche automatiquement, mais je rencontre des bugs au moment d'insérer la variable "Clé", présente en C3.

    Serait-il possible de m'aider à intégrer cette donnée ?

    Voici le code que j'ai pu enregistrer.

    Merci par avance pour votre aide !

    Nissaij

    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
    Sub Macro1()
     
     
        Application.CutCopyMode = False
        With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
            "ODBC;DSN=Excel Files;DBQ=P:\POIDS\Miroir_Compilation_Ligne_sachets_T1.xlsx;DefaultDir=P:\POIDS;DriverId=1046;MaxBufferSize=2048;Page" _
            ), Array("Timeout=5;")), Destination:=Range("$A$10")).QueryTable
            .CommandText = Array( _
            "SELECT TEVO_1.Clé, TEVO_1.Date, TEVO_1.Equipe, TEVO_1.Code_article, TEVO_1.Lot, TEVO_1.Poid_cible, TEVO_1.Nb_UVC_Prod, TEVO_1.Tare, TEVO_1.Visa, TEVO_1.Heure, TEVO_1.Poids_Net_1, TEVO_1.Poids_Net_2" & Chr(13) & "" & Chr(10) & "F" _
            , _
            "ROM `P:\POIDS\Miroir_Compilation_Ligne_sachets_T1.xlsx`.TEVO_1 TEVO_1" & Chr(13) & "" & Chr(10) & "WHERE (TEVO_1.Clé='919103_83452')" _
            )
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .ListObject.DisplayName = _
            "Tableau_Lancer_la_requête_à_partir_de_Excel_Files"
            .Refresh BackgroundQuery:=False
        End With
    End Sub

  2. #2
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 291
    Par défaut
    Bonjour

    Avec Excel 365 et depuis au moins Excel 2016, il faut utiliser Power Query (menu Données, obtenir des données) pour ce genre de tâche

    Stéphane

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2020
    Messages : 20
    Par défaut
    Bonjour Stéphane,

    Je viens de modifier dans le sens de votre remarque.

    Tout semble OK en sélection manuelle.

    J'aimerai intégrer une variable ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ""Lignes filtrées"" = Table.SelectRows(#""Type modifié"", each ([Clé] = ""918402_85554""))"
    La valeur de clé doit être récupérée dans la case E4 (donnée concaténée à partir d'un code article et d'un lot).

    Est-il possible d'intégrer cette variable en automatique, pour ne pas avoir à faire la sélection manuellement ?

    En vous remerciant,

    Nissaij

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 566
    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 566
    Par défaut
    Bonjour à tous

    Il semble que tu codes la requête en VBA ce qui est inutile : une requête s'actualise par VBA éventuellement mai ne se crée pas par VBA

    On peut utiliser une cellule nommée, Cle par exemple, avec cette syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Clé] = Excel.CurrentWorkbook(){[Name="Cle"]}[Content](Column1]{0}
    On peut également utiliser un paramètre POwerQuery et en modifier la valeur par VBA

  5. #5
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 291
    Par défaut
    Bonjour

    Une petite erreur de syntaxe dans la réponse de 78chris (que je salue au passage)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.CurrentWorkbook(){[Name="Cle"]}[Content][Column1]{0}
    ou encore toujours avec une cellule nommée "Clé"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table.FirstValue(Excel.CurrentWorkbook(){[Name="Clé"]}[Content])
    L'avantage de cette 2e syntaxe est qu'elle fonctionne sans déterminer le titre de la colonne dans le cas d'un tableau.

    Stéphane

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2020
    Messages : 20
    Par défaut
    Bonjour,

    J'ai bien compris vos remarques.

    J'ai bien créé la requête à partir de PowerQuery, et non codé en VBA.
    Les modifications se font donc directement dans Power Query si je comprend bien.

    La cellule "Cle" est bien nommée, mais je ne vois pas où intégrer ces lignes de code.
    Dans l'éditeur avancé ?
    A quel niveau ?

    Cordialement,

    Nissaij

Discussions similaires

  1. VBA Selection.AutoFill avec champ variable
    Par hadrien4789 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/01/2018, 17h35
  2. Réponses: 4
    Dernier message: 29/05/2017, 14h08
  3. [AC-2007] VBA. Importation d'un champ d'une table vers un formulaire
    Par jeckmo dans le forum VBA Access
    Réponses: 0
    Dernier message: 13/05/2009, 14h24
  4. importer un fichier texte ayant un nombre de champs variables
    Par steelspirit dans le forum kettle/PDI
    Réponses: 4
    Dernier message: 15/01/2008, 10h24
  5. Import fichier texte avec des champs variables
    Par joshua12 dans le forum Access
    Réponses: 4
    Dernier message: 26/09/2006, 09h06

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