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 :

requete sur table externe ne fonctionne pas


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 92
    Points : 54
    Points
    54
    Par défaut requete sur table externe ne fonctionne pas
    Bonjour,

    j'essaie de me connecter via une requête SQL sur un tableau structuré d'un autre fichier, mais je n'y arrive pas... Que ce soit avec la méthode DAO ou ADO.
    Les réponses que j'ai sont soit argument non valide soit il ne trouve pas l'objet. J'écris mal l'adresse de ma source je le sais, mais je n'arrive pas à trouver comment l'écrire...
    Je me base sur cet excellent tuto https://laurent-ott.developpez.com/t...tome-5/#LXVIII

    Ma dernière tentative

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim t As DAO.Database
    Dim Rs As DAO.Recordset
    la_table = getMap1("t_statut", etape, 2, 3)
     
    Req = "SELECT * FROM " & "t_" & la_table
     
    TD = Range("t_" & la_table)
     
    Set t = OpenDatabase(source & TD, False, False, "Excel 12.0;HDR=YES;")

    Le fichier excel source avec la table est dans un autre répertoire. La fonction getmap1() me permet de retrouver le nom de mon tableau structuré.
    J'ai essayé avec cette méthode aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TD.Worksheet.Parent.FullName
    Mais cela ne fonctionne pas non plus

    Quelqu'un aurait-il la solution ?

  2. #2
    Membre confirmé Avatar de Nicolas MENDEZ
    Homme Profil pro
    Consultant - Formateur - Datanaute & Power BI addict
    Inscrit en
    Mai 2021
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant - Formateur - Datanaute & Power BI addict

    Informations forums :
    Inscription : Mai 2021
    Messages : 273
    Points : 558
    Points
    558
    Par défaut
    Hello,

    Je n'ai pas la solution mais je t'en propose une en version NO CODE, avec Power Query...

    Ouvre un classeur vierge, puis vas dans le menu "Données/Obtenir des données/A partir d'un fichier/A partir d'un classeur"

    Une fois le fichier Excel contenant tes données sélectionné tu as la possibilité de choisir soit tes onglets soit les tableaux structurés.

    Une fois fait, tu arrives dans Power Query, qui va te permettre d'apporter des transformations aux données si besoin puis d'envoyer le résultat dans un onglet de ton classeur vierge.

    Ceci te permet de faire ce que tu attends...
    Enjoy !

    May the Power BI be with you !

    ---------------------------------------------
    Rejoignez le groupe dédié à la Microsoft Power Platform pour échanger autour de Power BI, Power Apps, Power Automate et Power Virtual Agents Acces ICI

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 92
    Points : 54
    Points
    54
    Par défaut
    Merci pour ce retour. Mais je veux justement pouvoir ajouter des données sur ma table structuré externe. Voici le principe de mon fichier. J'ai des fichiers avec une table structuré à l'intérieur qui me servent de bases de données. Et j'ai un fichier centrale qui permet d'alimenter ces différentes bases et de récupérer les données. Pour récupérer les données et les consulter, j'utilise bien power query et power pivot. J'utilise ce procédé parce que je ne veux pas que les utilisateurs aient accès aux données de base, je veux juste qu'ils soient en mode consultation.

    Donc je cherche un moyen pour facilement ajouter ou MAJ des données dans mes tableaux structurés.

    Je débute avec les outils power, peut être cette possibilité est accessible avec query...

  4. #4
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Bonjour,
    Si tu utilises ces fichiers Excel comme des bases de données, pourquoi ne pas les exporter vers Access qui pour le coup est une vraie base de données et t'évitera les avatars d'une base de données excel !

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Points : 602
    Points
    602
    Par défaut
    Oui et en plus pour tes requêtes tu n'aura pas besoin de passer par excel. Si t'as jamais utilisé Access c'est un peu long au début pour tout comprendre, apprendre a coder entre les deux, mais tu vas voir c'est bien mieux que de manipuler des tables gigantesques sur excel, c'est moins prise de tête et les temps d’exécution sont plus rapides. De plus la gestion multiutilisateurs et bien meilleure.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 92
    Points : 54
    Points
    54
    Par défaut
    Merci pour ces retours.

    En fait si j'avais pas de soucis internes à mon entreprise je le ferai avec Access je connais et je sais comment organiser les relations pour faire comme ça m'arrange. Mais en TTV on n'a pas accès à Access et Access n'est pas maitrisé par tout le monde si un changement de poste s'opère. Fauconnier m'a parlé des outils power qui sont vraiment intéressant et c'est la solution que j'ai trouvé. Pour manipuler j'ai trouvé ces outils très intéressants.

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Points : 602
    Points
    602
    Par défaut
    Citation Envoyé par zertupo Voir le message
    Merci pour ces retours.

    En fait si j'avais pas de soucis internes à mon entreprise je le ferai avec Access je connais et je sais comment organiser les relations pour faire comme ça m'arrange. Mais en TTV on n'a pas accès à Access et Access n'est pas maitrisé par tout le monde si un changement de poste s'opère. Fauconnier m'a parlé des outils power qui sont vraiment intéressant et c'est la solution que j'ai trouvé. Pour manipuler j'ai trouvé ces outils très intéressants.
    Oui enfin power query s'utilise avec microsoft office donc tu peux l'utiliser sur access. Quand au probleme de changement de poste, comment dire... On a rien sans rien, on peut pas mettre des choses en place et arrêter de les maintenir par la suite. Quel que ce soit que tu mettra en place il faudra plus ou moins le maintenir...

  8. #8
    Membre confirmé Avatar de Nicolas MENDEZ
    Homme Profil pro
    Consultant - Formateur - Datanaute & Power BI addict
    Inscrit en
    Mai 2021
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant - Formateur - Datanaute & Power BI addict

    Informations forums :
    Inscription : Mai 2021
    Messages : 273
    Points : 558
    Points
    558
    Par défaut
    Bonjour à tous,

    Je suis assez fan aussi d'Access malgré l'image trop négative à mon goût qu'il peut avoir en entreprise.

    Maintenant je viens avec la plus grande bienveillance et me permets d'apporter quelques précisions sur les commentaires précédents :

    Si tu utilises ces fichiers Excel comme des bases de données, pourquoi ne pas les exporter vers Access qui pour le coup est une vraie base de données et t'évitera les avatars d'une base de données excel !
    Utiliser Excel avec Power Query et Power Pivot c'est TRES, TRES, TRES LOIN d'être un avatar de base de donnée. C'est plus que ça car la technologie sous jacente est en fait une version du cube de données Microsoft SQL Server Analysis Services (SSAS), qui au delà de permettre le stockage de très grosses volumétrie de données ( plusieurs centaines de millions de lignes ! et dans Excel !) elle ajoute des fonctions analytiques puissantes avec calculs de mesures, gestion des hiérarchies ... comme dans un cube OLAP.

    Oui enfin power query s'utilise avec microsoft office donc tu peux l'utiliser sur access.
    Power querry dans Excel et dans Power BI, peut se connecter à une base Access, MAIS, Power Query N'EXISTE PAS DANS ACCESS pour se connecter à une autre source...

    Access c'est un peu long au début pour tout comprendre, apprendre a coder entre les deux, mais tu vas voir c'est bien mieux que de manipuler des tables gigantesques sur excel, c'est moins prise de tête et les temps d’exécution sont plus rapides
    Access reste un outil SGBDR Transactionnel et pas analytique : stockage de transactions dans une base de données avec des possibilités de calculs. Pour égaler les possibilités d'analyses d'Excel avec Power Pivot, dans Access tu dois utiliser les fonctions de domaine qui sont potentiellement très gourmandes en ressources et temps de traitement sur des volumétries conséquentes ou alors avoir un Trés bonne maîtrise de la gestion des requêtes SQL et des Recordsets en VBA et malgré ça tu n'égaleras pas la puissance du DAX dans Power Pivot et Power BI.

    Concernant le temps de traitement, le modèle de donné créé dans Power Pivot (Excel) ou dans Power BI permet de charger d'énormes volumétries jusqu'au milliard de lignes ! et pour avoir fait l'expérience personnellement avec un jeu de données de 300 millions lignes, je parviens à des restitutions INSTANTANEES même en utilisant du mapping Power Map ou Power BI!

    Access à une limite de 2GO / base, alors que Power Pivot et Power BI... c'est presque NO LIMIT ( la seule limite c'est la RAM de votre machine 16/32 Go recommandés)!

    Mais dans tout ça, toujours utiliser la méthode avec laquelle on est le plus à l'aise en conception et la surtout plus facile à MAINTENIR ...

    Au plaisir de partager autour de ce sujet....
    Enjoy !

    May the Power BI be with you !

    ---------------------------------------------
    Rejoignez le groupe dédié à la Microsoft Power Platform pour échanger autour de Power BI, Power Apps, Power Automate et Power Virtual Agents Acces ICI

  9. #9
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Dommage qu'avec internet nous ne sommes plus capable de comprendre qu'avatar veut dire inconvénient {le conflit des générations commence ici}!

    Chez Larousse tu trouveras entre autres
    Événement fâcheux, accident ; mésaventure.

    Si tu utilises ces fichiers Excel comme des bases de données, pourquoi ne pas les exporter vers Access qui pour le coup est une vraie base de données et t'évitera les inconvénients d'une base de données excel !

    Ton traitement sur excel sera relativement identique avec Powerquerry qui ne pointera plus sur Excel mais sur Access et ton requêtage sur Access!

    Note que je ne travail qu'avec ADODB mais je pourrais te guider sur Access ou excel si tu envisages de continuer dans ce sens!

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 92
    Points : 54
    Points
    54
    Par défaut
    Merci encore pour toutes réponses.

    Comme je l'ai dit (je suis désolé j'ai utilisé un mot interne), en télétravail on n'a pas accès à Access, ni sur les serveurs principaux. Les bases sont sur des serveurs spécifiques et on n'a pas le droit d'avoir accès... Ne cherchez pas à comprendre, c'est pas moi qui décide ^^

    Après réflexion, j'avais basculer mon développement sur excel totalement, au lieu d'avoir l'outils sur excel et les bases sur Access, car en télétravail je n'y ai pas accès et pour l'utilité des programmes développer, Excel était le meilleur choix pour ensuite avoir les données en analyse. Mais mon principal problème vient du faire de ne pas pouvoir utiliser les bases Access en télétravail et que tout le monde est sensé pouvoir se connecter aux données ou ajouter des données.

    Maintenant si vous avez une solution pour mon problème je suis tout ouï . Sinon je me verrai dans l'obligation de faire à l'ancienne, ouvrir mon fichier et ajouter les lignes.

  11. #11
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Bonjour.
    Je n'ai pas bien compris votre problème ni ce que vous cherchez à faire, et je me contente ici de répondre à votre première question
    Citation Envoyé par zertupo Voir le message
    j'essaie de me connecter via une requête SQL sur un tableau structuré d'un autre fichier, mais je n'y arrive pas...
    Je me base sur cet excellent tuto https://laurent-ott.developpez.com/t...tome-5/#LXVIII
    Dans ce tutoriel les fonctions SQL se basent sur un tableau du fichier et pas d'un autre fichier. Mais il suffit d'ouvrir cette source de données externe, de référencer le tableau, et c'est tout.

    Par exemple j'ai créé un fichier "C:\_Formation_VBA\Classeur_Test.xlsx" et un tableau nommé "Tableau_T1" qui contient ceci :
    ID Nom
    1 un
    2 deux
    3 trois
    4 quatre

    Par exemple, ce code me retourne le nom de l'ID numéro 3 (trois) :

    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
    '-------------------------------------------------------------------------------
    Sub test()
    '-------------------------------------------------------------------------------
    Dim WbSource As Workbook ' Objet Workbook pour le classeur source.
    Dim Enr As DAO.Recordset ' Le jeux d'enregistrement.
    Dim TD As Range          ' Le tableau.
     
    ' Ouverture du fichier source (nom en dur pour l'exemple):
    Set WbSource = Workbooks.Open(FileName:="C:\_Formation_VBA\Classeur_Test.xlsx")
     
    ' Identification du tableau de données:
    Set TD = Range("Tableau_T1")
     
    ' Sélection d'un enregistrement d'après une requête SQL (un exemple):
    Set Enr = SelectTD(TD, "Nom", "WHERE Id =3")
    If Not Enr Is Nothing Then 	' Si un jeu d'enregistrements a été retourné par la requête.
        Debug.Print Enr(0).Value 	' l'afficher dans le debogueur.
    End If
     
    ' Ferme la source sans sauvegarder:
    WbSource.Close SaveChanges:=False
     
    End Sub
    Bonne continuation.

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 92
    Points : 54
    Points
    54
    Par défaut
    Merci pour ces précisions.

    j'ai créé un objet (module de classe), c'est avec cet objet que je veux remplir ma table. Chaque champ de la table a le même nom que le champ de l'objet, y a t-il un moyen de faire quelque chose comme ça ? (sachant que mon objet s'appelle P )

    For each f in rs.fields
    f=P(f.names)
    rs.update
    next

  13. #13
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Citation Envoyé par zertupo Voir le message
    j'ai créé un objet (module de classe), c'est avec cet objet que je veux remplir ma table.
    bonjour
    De mémoire la Programmation Orientée Objet (POO) est passée de mode. Mais ce n'est pas le sujet.
    A mon avis, tu te compliques la vie pour pas grand-chose.
    Ici il suffit d'appeler le jeu d'enregistrements (du Tableau Structuré), de passer en mode ajout, de renseigner les champs, de valider.
    Puis de fermer en sauvegardant.
    Tout simplement (il n'y a même pas à gérer la taille du tableau, la ligne où ajouter une donnée) :

    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
     
    '-------------------------------------------------------------------------------
    Sub test()
    '-------------------------------------------------------------------------------
    Dim WbSource As Workbook ' Objet Workbook pour le classeur source.
    Dim Enr As DAO.Recordset ' Le jeux d'enregistrement.
    Dim TD As Range          ' Le tableau.
     
    ' Ouverture du fichier source (nom en dur pour l'exemple):
    Set WbSource = Workbooks.Open(FileName:="C:\_Formation_VBA\Classeur_Test.xlsx")
     
    ' Identification du tableau de données:
    Set TD = Range("Tableau_T1")
     
    ' Sélection du jeu d'enregistrements:
    Set Enr = SelectTD(TD, "*", "")
    If Not Enr Is Nothing Then      ' Si un jeu d'enregistrements a été retourné.
        Enr.AddNew                  ' Passe ne mode Ajout.
        Enr.Fields(0).Value = 5     ' Champ ID.
        Enr.Fields(1).Value = "Cinq" ' Champ Nom.
        Enr.Update                  ' Valide l'ajout.
    End If
     
    ' Ferme la source en sauvegardant:
    WbSource.Close SaveChanges:=True
     
    End Sub
    Bonne programmation.

Discussions similaires

  1. Réponses: 8
    Dernier message: 09/05/2006, 11h08
  2. [MySQL] requete sur table jointe
    Par winnie82 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/03/2006, 16h27
  3. [10g] ora-29829 sur table externe
    Par luchot dans le forum Oracle
    Réponses: 18
    Dernier message: 07/03/2006, 15h22
  4. Requete sur table avec Tableau
    Par Sichagadel dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/11/2005, 14h05
  5. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48

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