XL 2016 tableau : macro extention

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

merinos-BernardEtang

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

Dernière édition:
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 ?
 
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
 
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
 
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.
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour