VBA Insertion lignes sur plusieurs Tableaux structurés

Bonsoir à tous,

Le fichier posté correspond également à un autre post mais ma problématique est différente,

Je souhaiterai pouvoir insérer une ligne sur des TS cote a cote, la fonction est grisée ...

Peut on contourner ce problème via un code qui s'activera lors de la sélection d'une ligne ?, l'idéal serait que l'option insertion ligne pour plusieurs TS soit inclus dans les options du clic droit (Couper, Coller ...)

Le code viendrai définir l'insertion ligne pour chaque TS de la feuille,

Merci d'avance pour votre aide,

Cordialement,

18test-requete.xlsm (70.47 Ko)

bonjour massari59264,

la macro s trouve dans un module normal et ne pas dans le module d'une feuille pour sa fonctionnement.

13test-requete.xlsm (73.70 Ko)

Bonjour BsAlv,

Merci beaucoup pour votre retour, j'ai testé et cela fonctionne mais j'aurai deux remarques :

Nous n'avons plus accès la suppression de ligne (mais également aux autres options : couper, hauteur de ligne .... ) par le clic droit sur une ligne de la feuille,

Je souhaiterais également que l'utilisateur doit cliquer sur un l'insertion de la ligne : en fait lorsqu'on fait clit droit droit sur une ligne , une petite fenêtre s'ouvre avec

les options couper, copier, collage spécial, insertion ... est il possible d'ajouter la commande insertion ligne sur TS qui reprendrai le code de votre macro?,

Ce ne sont pas bien sur des critiques mais un souhait, le code fonctionne parfaitement sinon ! j'ai remarqué également que l'insertion d'une ligne or TS n'est plus

disponible , peut on modifier également cette partie?,

Merci d'avance pour votre aide,

Cordialement,

re,

MS a, pour des raisons précis, limité ces fonctions. Chaque fonction que vous voulez utiliser, on peut la contourner avec une autre macro.

Je ne me sens pas à l'aise avec ces querytables (je n'ai pas beaucoup d'experience avec eux), je suppose que ce n'st pas possible de intégrer tout dans un seul TS ? Parce que, à ce moment, ces fonctions ne seront plus grisées.

Bonjour à tous,

Un tableau structuré est conçu comme une structure à part entière un peu comme une table de bases de données. Vouloir que des tables indépendantes soient organisées "physiquement ou visuellement" de la même manière n'est pas dans l'état d'esprit des TS (ni des bases de données). Il est plus logique de faire des tables indépendantes avec la même clef pour chaque table puis de requêter sur ces tables (avec comme champ commun la clef) pour créer une table résultante qui sera comme on veut. Un TS est créé comme un objet avec ses méthodes et propriétés. Par exemple la procédure Insérer ou supprimer une ligne (clique droit dans un TS) concerne le TS pas un autre. On comprend qu'insérer une ligne complète si plusieurs TS sont touchés soit interdit.

Votre présentation n'empêche pas un utilisateur d'insérer une ligne en plein milieu d'un seul TS. Et alors, à partir de cette ligne insérée dans un seul tableau, tous les alignement de lignes entre les 4 TS seront faux. Avec 4 tables "indépendantes", vous n'avez plus cet inconvénient majeur.

Dans votre cas, à l'extrême rigueur, les 4 TS sur la même feuille, chacun des TS séparés par une ou plusieurs colonnes vides avec pour chaque TS la même clef. Puis sur une autre feuille, un seul TS (résultat d'une requête sur les 4 autres avec comme base la clef) organisé comme on veut et donc avec les colonnes adjacentes et dans le bon ordre.

Merci mafraise et Bsalv pour vos retours,

Le fichier fournit présente un onglet sur lequel des personnes vont intervenir, notamment pour le 1er TS et le 3ème TS, (les deux autres sont traités via PQ), et pour

faire plus simple on aurait pu mettre des formules en dure sur les colonnes t_Re_2 et t_Re_4.

Je comprends bien vos explications mais je souhaite absolument conservé le 1er TS et le 3ème TS sans faire un retour de ceux ci via PQ, car je perds les formules

éventuelles mises dans les colonnes,

Après réflexion, je me dis que je vais masquer les en têtes (serait il possible que sur la feuille R modifié, l'accés via un code VBA soit bloqué sur cette option)

Puis lorsqu'on va sur le t-Re_1, on peut insérer une ligne de tableau en haut,

Je souhaiterai donc que si l'utilisateur le fait, l'insertion se fait également sur le t_Re_3 (et inversement)

Je souhaiterai également la même chose mais pour la suppression d'une ligne.

En espérant avoir été plus clair dans mes explications,

Merci d'avance pour votre aide,

Cordialement,

20test-requete.xlsm (71.38 Ko)

Re,

Je comprends votre demande. Juste pour votre information, on peut insérer dans un TS :

  • plusieurs lignes en seule fois. Il suffit de sélectionner des cellules sur plusieurs lignes consécutives du TS et cliquer-droit sur "Insérer ligne de tableau en haut"
  • Plusieurs lignes à la fois pas forcément contigües. Il suffit de sélectionner des cellules sur plusieurs lignes pas contigües du TS et cliquer-droit sur "Insérer ligne de tableau en haut"
  • une nouvelle ligne supplémentaire à la fin du tableau. Il suffit de saisir une valeur dans une cellule de la ligne vide sous le tableau et cette cellule fera partie d'une nouvelle ligne du tableau structuré.
  • une nouvelle ligne supplémentaire à la fin du tableau. Il suffit de cliquer droit sur la dernière cellule du TS et choisir "Insérer ligne de tableau en dessous"

Et c'est à peu près la même chose avec la suppression.

Si jamais on construisait la macro que vous demandez, une simple erreur d'exécution (par exemple) de la macro désynchronisera les deux tableaux et la macro sera à tous jamais dans les choux et vos données erronées.

La manière dont vous voulez gérer vos données ne peut qu'aboutir à des incohérences d'autant plus que des tiers vont intervenir dessus. Ne sous-estimez jamais ce dont sont capables les utilisateurs (c'est surprenant et inimaginable).

L'organisation de vos données est selon moi une aberration qui ne peut conduire qu'à des erreurs tôt ou tard.

C'est mon opinion et je la partage. Je suis à peu près certains que d'autres utilisateurs chevronnés pensent peu ou prou comme moi. Ce serait intéressant de savoir si c'est le cas ou pas.

Bonjour Mafraise,

Merci pour votre retour, et je partage le fait que ce soit une aberration et pourtant elles sont organisées dans un but bien précis, (ne pas perdre les formules des

utilisateurs...), je ne sous estime pas les errements de certains dans l'utilisation d'Excel, et j'en fait partie avec ce que je demande

En fait, pour revenir à la procédure souhaité en VBA, je souhaiterai que des que l'on modifie la structure de t_Re1, celle ci modifie de la même façon la structure de

t_Re3 et inversement : que l'on ajoute une ligne ou plusieurs , ou que l'on supprime une ou plusieurs lignes.

Pour l'ajout d'une ou plusieurs lignes le code serait :

ListObject.ListRows.Add (3)

ou

ListObject.ListRows.Add (4)
ListObject.ListRows.Add (5)

Il serait peut être possible de récupérer cette partie et la répercuter sur l'autre t_Re concerné,

Peut être qu'il serait préférable de mettre deux boutons de commande, l'un pour l'ajout et l'autre pour la suppression de lignes des deux TS en fonction de la position

de la cellule sur l'un ou l'autre TS,

Mais pour cela il faudrait également peut être bloquer l'accès à l'insertion manuelle de ligne de haut de tableau ...

Le but est de tester vos propositions qu'il n'y ai pas d'erreurs d'exécution,

Remarque : l'insertion ou la suppression de lignes simultanées sur t_Re_1 et t_Re_3, par le biais de la procédure évènementielle VBA permet l'actualisation des requêtes et donc des ts t_Re_2 et t_Re_3, ainsi les lignes ne sont décalées.

Merci d'avance pour votre aide,

Cordialement,

re, toutes les remarques, que Mafraise a fait, sont correctes, donc ceci est une solution avec des doutes.

On sélectionne une plage, pas nécessairement dans un des tableaux et puis on fait un clicque droit, la macro est lancée ...

12test-requete-1.xlsm (83.01 Ko)

Bonsoir BsAlv,

Votre proposition est parfaite, elle correspond exactement à ce que j'espérais, en permettant d'insérer ou de supprimer une ou plusieurs lignes

Il va me falloir un peu de temps pour comprendre toutes les subtilités de votre proposition VBA,

Pourriez vous svp sur cette partie, apporter les corrections nécessaires, le but étant de sélectionner la cellule situé en dessous de ce que l'on a saisie car dans ma

version Excel c'est tout le TS qui est sélectionné à la fin d'une actualisation de requête,

Mais cela ne fonctionne plus depuis que j'ai décomposé le TS en 4 TS, j'ai tenté de modifier le code original mais sans réussite :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Range("t_Re_1[#All]").Address Or Target.Address = Range("t_Re_3[#All]").Address Then
    If Not Tgt Is Nothing Then
        Tgt.Select
    Else
        Range("t_Re_3[N-FS]")(1).Select
    End If
End If
Flag = False
End Sub

Merci d'avance pour votre aide,

Cordialement,

17test-requete-1.xlsm (76.75 Ko)

Bonsoir massari59264 , bonsoir BaAlv ,

Hélas, rien n'empêche l'utilisateur d'insérer (ou supprimer) des lignes dans le premier tableau (exemple) sans que le second tableau soit mis à jour et vice-versa.

Vous semblez poser comme un postulat le fait que vous êtes "absolument obligé" d'utiliser des requêtes au lieu de formules pour une histoire de perte de formules. Je pense que c'est ce postula qui est faux et la source de vos futurs problèmes. Mais pour ce que j'en dit...

re,

je ne connais pas les querytables, donc je ne peux pas vous aider

Bonsoir à tous,

Effectivement vous avez raison mafraise, mais je remercie tout de même BsAlv pour sa proposition,

Je me demande s' il est possible alors de calquer le code de BsAlv en utilisant les Query table, car son code fonctionnait correctement.

Oui je réitère que je suis souhaite de faire comme je le présente, car je souhaite passer par PQ pour calculer les requêtes t_Re_3 et t_Re_4,

Je peux très bien abandonner ce projet, et mettre un unique TS avec des formules en dur pour les colonnes calculées,

Mais je voulais passer par PQ pour les colonnes calculées, il ne me manque "que" ce code VBA

Merci d'avance pour votre aide,

Cordialement,

16test-requete-1.xlsm (77.24 Ko)

Bonjour BsAlv,

Merci pour votre retour, je retiens votre proposition qui me convient,

Bonne journée,

Cordialement,

Rechercher des sujets similaires à "vba insertion lignes tableaux structures"