Couper-coller lignes d'un tableau structuré en VBA

Bonjour,

J'ai une petite question et je compte sur ce super forum pour avoir la réponse ! Je suis en train de créer une macro qui étudie l'année en cours. Je collecte des données, et je souhaite uniquement collecter des données pour 4 années de suite (ex: de 2019 à 2022). Lorsque l'année en cours devient l'avant dernière du tableau, je souhaite couper 3 lignes d'un tableau structuré et les coller en première ligne de ce tableau (et idéalement remplir de 0 la nouvelle ligne)... mais impossible d'y arriver. C'est sûrement très simple, mais je ne parviens pas à manipuler des lignes (avec range normalement ..) dans un tableau structuré.

Voici mon code :

Année = InputBox("Année en cours svp (indiquer 2021 ici)")
If Année = ArrR1(3, 1) Then 'Si l'année en cours devient celle de la 3ème ligne, il faut décaler les données -> 2021 par exemple
    Range(ArrR1(2, 1), ArrR1(4, 13)).Cut ArrR1(1, 1) 'On coupe les données du tableau de la ligne 2 à la ligne 4 et on les colle en ligne 1 (année 2019)
    ArrR1(5, 1) = ArrR1(4, 1) + 1 'On modifie la date de la dernière ligne :On ajoute 1 par rapport à la date de la ligne précédente
End If

Je n'obtiens pas de message d'erreur mais rien ne se passe ... auriez-vous une petite idée s'il vous plaît ?

Merci d'avance ! :)

Voici le fichier joint :

Bonjour,

C'est un peu "verbeux" ton "blabla". Décidément tu n'échappes pas à ton petit coté narration...

Je préfèrerai un tableau source(initial) et en feuil2 le résultat à obtenir.

Ce tableau est typiquement un Tableau structuré inutile (sauf pour la présentation)

On n'utilise pas la méthode Cut avec les tableaux structurés !

Tu peux essayer ce code :

Sub DecalerDonnées() 'Nota : par précaution pas d'accent en VBA ! SVP
'VERIFICATION DE L'ANNEE EN COURS
Dim Année As Integer
Année = InputBox("Année en cours svp (indiquer 2021 ici)")
If Année = Range("B5") Then
    Range("B4:N6").Copy Range("B3")
    Range("B6") = Range("B5") + 1
End If
End Sub

A+

Merci galopin01 (toujours un plaisir de vous retrouver :) )! Ca m'aide bien, ça fonctionne ! Je ne pensais pas que le code pouvait être aussi simple, je m'imaginais des trucs compliqués. Je ne savais pas que l'on ne pouvait pas couper -coller dans un tableau structuré. Par contre, ici, on manipule les données uniquement cellules par cellules (ex: range("B6:C18")).

Pensez-vous qu'il serait possible de faire la même chose pour un ensemble de tableaux (= dire en VBA de décaler la 3ème ligne des tous les tableaux de la page ?). Ou alors avec les tableaux structurés nous sommes toujours obligés de parler en terme de "Range" ? Je ne suis pas très à l'aise avec ça, mais je me dis que ce serait peut-être plus pratique plutôt que de désigner des cellules pour chaque tableau (j'en ai 8!) J'ai cherché sur internet, j'ai trouvé des bouts de code avec EntireRow (donc ligne entière) mais je ne parviens pas à aboutir à un code plus "global"....

Merci beaucoup, excellente journée !

Bonjour,

Euh... Dans ce cas j'ai fait au plus simple.

C'est un peu compliqué de résumer les tableaux structurés en quelques lignes.

En la matière, je fais comme toi : J'apprends au fur et à mesure !

Quand c'est utilisé avec discernement, l'utilisation de tableaux structurée ne fait pas obstacle à des méthodes classiques.

Comment dire... L'utilisation usuelle et la plus pertinente de ces tableaux structurés est la confection de table (genre BD)

Cependant ça n'empêche pas de les utiliser sur des tableaux beaucoup plus modestes, voire de simples listes.

Dans le premier cas (gros tableaux) on recommande habituellement de ne disposer qu'un tableau par feuille.

Je comprend que tu utilises ces mini tableaux par commodité plus que par réel besoin :

Il faut donc étudier l'ensemble au cas par cas car leur utilisation via VBA n'est pas intuitive.

A+

D'accord, merci beaucoup pour vos précieux conseils. je vais étudier cela.

Excellente journée :)

Rechercher des sujets similaires à "couper coller lignes tableau structure vba"