XL 2016 Sous VBA : Etendre un tableau structuré par recopie partielle des lignes existantes

pilote301152

XLDnaute Occasionnel
Bonjour,
C'est la première fois que je code pour un tableau structuré et j'avoue ne pas toujours bien comprendre les exemples trouvées de ci de là.
J'ai bien essayé quelques lignes mais je ne peux conclure ..... Pouvez-vous svp m'aider en ce sens?
Le fichier joint (data bidon bien sûr) sera sûrement plus explicite.
Il s'agit de recopier la liste des adhérents de la dernière année en créant à la suite la même liste pour une nouvelle année..... Bien sûr il faudra par la suite que je modifie partiellement quelques données (ex Nouvelle année) et formules (notamment celles du critère "Statut N-1") car la plage n'est plus la bonne!

J'ai bien tenté d'écrire la procédure mais sans la boucler et suis-je seulement sur la bonne piste ?
merci pour votre assistance

Cordialement
 

Pièces jointes

  • TESTassoc.xlsm
    659.8 KB · Affichages: 12
Solution
Bonsoir @pilote301152 :),

Ma p'tite version à ma sauce:
VB:
Sub dupliquer_dernière_année()
Dim tbStruc As ListObject, anneeMax, nbrLignesDeb&, i&, j&

Application.ScreenUpdating = False
With Worksheets("Association Bidon")
   'la variable tbStruc est le tableau structuré
   Set tbStruc = Range("a6").ListObject
   'calcul de l'année max
   anneeMax = Application.Max(tbStruc.DataBodyRange.Columns(1))
   'on stocke le nombre initial de lignes
   nbrLignesDeb = tbStruc.ListRows.Count
   'on demande confirmation pour ne pas exécuter deux fois la macro pour la même année
   If MsgBox("Nous allons dupliquer les lignes des membres de l'année " & anneeMax & _
      "donc créer l'année " & anneeMax + 1 & vbLf & vbLf & _
      "Êtes vous...

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @pilote301152 :),

Ma p'tite version à ma sauce:
VB:
Sub dupliquer_dernière_année()
Dim tbStruc As ListObject, anneeMax, nbrLignesDeb&, i&, j&

Application.ScreenUpdating = False
With Worksheets("Association Bidon")
   'la variable tbStruc est le tableau structuré
   Set tbStruc = Range("a6").ListObject
   'calcul de l'année max
   anneeMax = Application.Max(tbStruc.DataBodyRange.Columns(1))
   'on stocke le nombre initial de lignes
   nbrLignesDeb = tbStruc.ListRows.Count
   'on demande confirmation pour ne pas exécuter deux fois la macro pour la même année
   If MsgBox("Nous allons dupliquer les lignes des membres de l'année " & anneeMax & _
      "donc créer l'année " & anneeMax + 1 & vbLf & vbLf & _
      "Êtes vous d'accord ?", vbYesNo + vbDefaultButton2 + vbQuestion) <> vbYes Then Exit Sub
   'on parcours le tableau structuré
   'si l'année est égale à anneeMax, on copie la ligne dans une nouvelle ligne
   'on en profite pour changer l'année en anneeMax+1
   For i = 1 To nbrLignesDeb
      If tbStruc.ListRows(i).Range(1) = anneeMax Then
         'la ligne correspond à la dernière année - on insère une ligne - on y recopie la ligne i
         'et on change l'année de la nouvelle ligne
         tbStruc.ListRows.Add
         tbStruc.ListRows(i).Range.Copy tbStruc.ListRows(tbStruc.ListRows.Count).Range
         tbStruc.ListRows(tbStruc.ListRows.Count).Range(1) = anneeMax + 1
      End If
   Next
End With
End Sub
 

pilote301152

XLDnaute Occasionnel
Bonsoir maPomme,
merci pour ce travail soigné que je ne manquerai pas de décortiquer pour ma formation.
Je ne peux l'essayer ce soir mais à sa lecture je pense que ce code , au demeurant très bien illustré, doit répondre exactement à mon besoin.
d'ores et déjà mille mercis et je reviens vers toi demain pour retour après essai
Bonne soirée et encore merci pour cette "sauce"
 

pilote301152

XLDnaute Occasionnel
Bonjour maPomme,

je viens de tester ta proposition et je te confirme que cela fonctionne à merveille.
Il me reste à m'en inspirer pour modifier dans la même macro les valeurs du critère "Statut N-1" car la recopie de la fonction "recherchev" ne convient pas (la plage de recherche est initialement en valeur absolue!).

Encore un grand merci pour ta proposition et l'excellente documentation des lignes de code.
Super boulot
Cordialement
 

Statistiques des forums

Discussions
312 240
Messages
2 086 514
Membres
103 239
dernier inscrit
wari