VBA. Nom de Tableau dynamique.

VBA. Nom de Tableau dynamique. - VB/VBA/VBS - Programmation

Marsh Posté le 06-09-2014 à 14:25:12    

Bonjour,
Sur feuil1, j'ai une macro qui ajoute des données dans un tableau qu'Excel a nommé(Tableau2)
Je duplique la feuil1 -> Feuil1 (2)  
La macro ne fonctionne plus sur feuil1 (2) car Excel à changer le nom du Tableau .
 
J'ai un msgBox qui affiche le nom du Tableau dupliqué.
C'est ce Nom dynamique que j'aimerais insérer dans le code

Code :
  1. Sub Tblo()
  2. Dim LR As ListRow
  3. Dim Lo As ListObject  'Affiche le Nom du Tableau
  4. Set Ws = Worksheets(Sheets.Count)
  5. For Each Lo In Ws.ListObjects
  6. MsgBox Lo.Name & ""
  7. Next
  8. Range("Tableau2" ).Select  'pas besoin de préciser le nom de la feuille
  9. Set LR = Selection.ListObject.ListRows.Add(AlwaysInsert:=True)
  10. LR.Range.Cells(1, 2) = 10
  11. LR.Range.Cells(1, 3) = 15
  12. End Sub


En gros.
J'aimerais qu'au lieu d'avoir un affichage par MsgBox du nom du Tableau dupliqué  
que ce nom soit remplacé automatiquement dans le code.
Exemple
Si MsgBox trouve "Tableau14"
Range("Tableau2" ).Select  devient  
Range("Tableau14" ).Select  
Merci de votre aide.
 
 

Reply

Marsh Posté le 06-09-2014 à 14:25:12   

Reply

Marsh Posté le 06-09-2014 à 17:42:57    

   
           Bonjour, bonjour !
 
           S'affranchir du ralentisseur Select est preuve d'un code optimisé, inutile de sélectionner un objet pour y accéder !
           Respecter la règle TBTO (hiérarchie objet entre autres) est source d'efficacité …
           Donc ne pas mélanger des collections même si elles peuvent avoir des éléments en commun !
           Appeler un élément d'une collection directement par son numéro d'index :
 

Code :
  1.     With Worksheets(Worksheets.Count).ListObjects(1).ListRows.Add
  2.         .Range(2).Value = 10
  3.         .Range(3).Value = 15
  4.     End With


 

Reply

Marsh Posté le 06-09-2014 à 20:59:59    

Merci Marc L
Ca marche!!!!   :D   :sol:  
Je vais suivre tes recommandations.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed