[VBA] Redimensionner tableau structuré

Bonjour,

J'ai un fichier qui importe des données JSON en provenance de sources web dont l'adresse change à chaque import.

J'avais obtenu l'aide sur ce forum et la macro fonctionne très bien, mais il y a un petit détail que j'aimerais régler et, bien sûr, j'ai besoin de vous.

Sur ce fichier, en feuille 2, un clic sur le bouton déclenche l'import de données. Le nombre de lignes importées est variable (en fonction du JSON importé) et, si le tableau qui reçoit les données (tableau1) s'agrandi lorsque le nombre de lignes augmente, il ne se réduit pas lorsqu'il y a moins de lignes et cela laisse des lignes vides dont je souhaiterais me passer.

J'ai pensé à une instruction "resize" en fin de la macro existante, mais je suis nul en VBA.

Il est possible d'utiliser le contenu de la cellule E1 pour le nombre de lignes à conserver.

Merci.

Bonjour à tous !

A partir de votre construction du lien web lié au fichierJson à analyser, pourquoi ne pas opérer l'intégralité des traitements dans Power Query ?

Bonjour à tous !

A partir de votre construction du lien web lié au fichierJson à analyser, pourquoi ne pas opérer l'intégralité des traitements dans Power Query ?

Quand j'ai créé ce fichier, j'avais fait un essai qui ne me semblait pas concluant (je le trouvais lent)

Je viens de réessayer à nouveau, un test rapide sans retraiter les données (texte en nombre, temps en US avec un point... etc) et cela me semble plus rapide que la macro. J'avais dû foirer quelque chose lors de mes premiers essais.

Je vais peut-être me pencher à nouveau vers un import par power query, mais je laisse le fil ouvert pour une solution macro.

Quand j'aurai les 2, je ferai un choix après plusieurs tests.

A+

Bonjour à tous de nouveau !

Comparaison concluante donc. Merci de ce retour

Salut JFL,

J'ai fait un premier jet avec PowerQuery, c'est nickel et beaucoup plus rapide que la macro.

Cependant, j'ai un problème que je n'avais encore jamais rencontré :

Impossible de faire en sorte que la largeur des colonnes s'adapte…???

J'en avais un autre sur plusieurs tentatives, mais que je ne reproduis plus sur la dernière : À chaque actualisation, le segment disparaissait. A priori résolu sans que je sache pourquoi.

A+

Edit : Problème résolu, j'avais une plage définie en erreur #REF qui se chevauchait avec le tableau.

Ne cherchez plus.

Le fichier corrigé :

Bonjour à tous de nouveau !

Concernant la largeur des colonnes du tableau retourné dans Excel, il faut adapter manuellement chaque champ selon votre souhait et décocher la case dans les propriétés.

image

Je viens de me rendre compte d'un problème lié à la dernière colonne du tableau (colonne ajoutée avec une formule).

Lorsque le nombre de lignes importées augmente, la formule n'est pas recopiée.

Pour faire l'essai, aller sur la prière feuille (base), choisir "Sprint" à la place de "Poursuite" dans la liste déroulante, revenir sur la feuille "Results" et actualiser.

Vous pouvez voir en A1 que le nombre d'enregistrements passe de 60 à 95. Si on se rend sur la dernière colonne, la formule qui était présente sur les 60 lignes du tableau est cette fois sur les 59 premières et la dernière au lieu d'être sur la totalité des 95 lignes.

J'ai essayé de modifier les propriétés du tableau (voir copie écran de JFL dans le message précédent) à "insérer des lignes..." mais sans succès.

Je pensais que la formule allait être recopiée sur toute la colonne du tableau, j'ai loupé un truc ?

A+

Bonjour à tous !

Il n'est pas recommandé d'ajouter des champs sur un tableau résultant d'une requête.(Voir ici un moyen de traiter ce cas particulier).

Pourquoi ne pas effectuer cet ajout de champ dans votre requête ?

Bon, j'ai créé une requête (connexion uniquement) en ajoutant les 2 requêtes (toujours en connexion) hommes et femmes pour récupérer les biathlètes des 2 sexes.

J'ai alors fusionné ma requête principale avec la précédente pour vérifier que les noms sont bien présents dans la liste. J'ai aussi ajouté une colonne d'index en cours de traitement car le développement de la table foutait le bazar dans l'ordre des lignes.

Il y avait peut-être plus simple, mais cela a l'air de fonctionner.

Si tu veux jeter un œil...

Bonsoir à tous !

Je ne perçois pas l'intérêt de la fusion opérée. En quoi est-elle utile ? Pourquoi retourner dans Excel une colonne "TRUE" ?

Bonsoir à tous !

Je ne perçois pas l'intérêt de la fusion opérée. En quoi est-elle utile ? Pourquoi retourner dans Excel une colonne "TRUE" ?

Le but est de vérifier qu'un(e) biathlète est bien présent(e) dans le classement en page suivante. Il y a fréquemment au départ, et à l'arrivée, des courses des nouveaux concurrents qui ne figurent pas dans les classements.

J'avais ajouté une colonne avec une simple formule NB.SI pour vérifier la présence, mais comme la formule n'était pas recopiée lors de l'ajout de lignes, j'ai choisi (comme vous me l'aviez conseillé) de procéder à cette vérification directement dans la requête.

Suite à l'import de données, je filtre sur FALSE et copie les noms manquants dans les tableaux de classements. Ensuite, des formules mettent à jour les classements.

Bonsoir à tous de nouveau !

Je vous propose de tester la requête "Tableau1_Proposition".

Outre quelques modifications mineures, j'ai opté pour un type de jointure qui n'intègre que les athlètes présents dans les deux tables. A voir si ma compréhension du besoin est pertinente.

J'ai aussi porté quelques annotations dans la feuille "Remarques".

Je vous propose de tester la requête "Tableau1_Proposition".

Outre quelques modifications mineures, j'ai opté pour un type de jointure qui n'intègre que les athlètes présents dans les deux tables. A voir si ma compréhension du besoin est pertinente.

Ben non, le but est de "marquer" les absents de la 2ᵉ table, pas de les supprimer. Tous doivent rester dans la table principale. C'est pour ça que je passe par une jointure externe.

J'ai aussi porté quelques annotations dans la feuille "Remarques".

Pour le nom "Liste_noms" qui renvoie #REF, c'est un résidu d'essais non concluant que j'ai oublié de supprimer.

Pour les doublons noms requêtes/noms tableaux, j'ai tendance à céder à la facilité et ne pas prendre le temps de laisser les noms proposés par défaut.

Bonsoir à tous de nouveau !

J'ai rétabli le type de jointure initial et modifié le test pour éviter de développer la table ListNoms.

Super le test qui évite de développer.

Comme c'était le fait de développer la table qui mettait le bazar dans l'ordre des données, j'ai donc pu supprimer l'ajout de la colonne d'Index ainsi que le tri final. Ce qui raccourci encore la requête.

Merci pour tout, je clos le sujet.

A+

Bonsoir à tous de nouveau !

Parfait....et merci pour ce retour.

Rechercher des sujets similaires à "vba redimensionner tableau structure"