XL 2016 tableau : macro extention

merinos

XLDnaute Accro
Bonjour,


*************************************
Travail inutile... mauvaise question mais très bonnes indications reçues
voir ma dernière intervention.
************************************
je desire réaliser une macro qui adapte automatiquement la taille d'un tableau aux donnée présentes ( Je vais réimporter regulièrement des données depuis SAP... ) et afin que mes pivots restent corrects, il faut être sur que les données sont toutes dans les tableaux...

J'ai ecris une macro... mais elle refuse d'etendre le tableau... GRRR Luc et Guy restent désespérément absents de mes PVT.

Merci de votre aide.


Merinos
 

Pièces jointes

  • Table Extention.xlsm
    121.5 KB · Affichages: 37
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous pouvez réparer la situation avec ce code:
VB:
Sub Test()
Dim T(), R As Range
Set R = ActiveSheet.ListObjects(1).DataBodyRange.Resize(7)
T = R.Value
R.ClearContents
R.Value = T
End Sub
Mais j'aimerai quand même bien savoir comment ces lignes en étaient arrivées à ne pas s'intégrer automatiquement au tableau ?
 

merinos

XLDnaute Accro
Merci Dranreb,

En fait je ne suis pas arrivé a ce que les lignes ne soient pas intégrées... Mais d'autres s'en sont chargé pour moi...

Du coup je cherche a avoir une methode automatique de correction si les données ne sont pas complètes.

Ta methode fonctionne ... mais le nombre de lignes est "hard coded" à 7.

En employant .End(xlDown) j'espère avoir une méthode générale.


Mon code inclus dans l'exemple:
VB:
Function GetTableName() As String
    GetTableName = Worksheets(ActiveSheet.Name).ListObjects(1).Name
End Function

Sub Table_Redim()
Dim ran1 As Range
Dim Ran1_Dep, Ran1_Fin As Range

nomtable = GetTableName
Set Ran1_Dep = ActiveSheet.ListObjects(GetTableName).Range.Cells(1, 1)
Set Ran1_Fin = Ran1_Dep.End(xlToRight).End(xlDown)
Ran1_Fin.Select ' ajouté afin de tester le second coin du nouveau range... est faux
Set ran1 = Range(Ran1_Dep, Ran1_Dep.End(xlToRight).End(xlDown))
ActiveSheet.ListObjects(nomtable).Resize ran1
Range(nomtable).Select
End Sub
 

Dranreb

XLDnaute Barbatruc
La méthode générale pour remplacer le contenu d'un tableau Excel par celui d'un tableau VBA serait cette procédure :
VB:
Sub Verser(TDon())
Dim LO As ListObject, Trop As Long
Set LO = ActiveSheet.ListObjects(1)
Trop = LO.ListRows.Count - UBound(TDon, 1)
If Trop > 0 Then LO.ListRows(UBound(TDon, 1) + 1).Range.Resize(Trop).Delete xlShiftUp
LO.HeaderRowRange.Offset(1).Resize(UBound(TDon, 1)).Value = TDon
End Sub
 

Dranreb

XLDnaute Barbatruc
S'il y aura à l'avenir de nouveau des petits malins qui s'amuseront à ajouter des lignes de telle sorte qu'elles ne soient pas intégrées au tableau il suffira de les copier et coller à leur place pour qu'elles s'intègrent.
Mais il faut vraiment le faire exprès ! Le seul moyen que j'ai trouvé c'est de les taper en laissant une ligne vide en dessous du tableau puis en supprimant celle ci à la fin.
 

merinos

XLDnaute Accro
Effectivement... mais aussi c'etait mon erreur car j'ai crée des powerpivot sur des données SANS définir d'abord un tableau...

Cette situation à crée le probleme: Le cache du PowerPivot n'est pas lié au tableau dans excel mais a des cellules...

Bref je vais recrér des tables de caches liées a des tableaux... et quand des données vont être ajoutées, tout suivra.

Merci des infos,


Merinos

PS: voici la différence.
Ce lien n'existe plus

Ce lien n'existe plus
 
Dernière édition:

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 870
dernier inscrit
Dethomas