(Résolu) Sélectionner la base jusqu’à la dernière ligne remplie

zeduky

XLDnaute Nouveau
Bonjour à tous,

je viens de faire une macro avec excel qui me permet de transformer ma base en Table dont le but est de générer derrière un TCD.
Mon soucis est que la base peut avoir un nombre de ligne aléatoire et quand je fabrique la macro avec excel pour la création de table il s’arrête toujours sur la ligne 390 et j'aimerai qu'il sélectionne jusqu’à la dernière ligne remplie ?
voici mon code

Sub table()
'
' table Macro
'
'
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$G$390"), , xlYes).Name = _
"Tableau2"
Range("Tableau2[#All]").Select
ActiveSheet.ListObjects("Tableau2").Name = "table1"
End Sub

je n'arrive pas à placer le code qu'il faut ou il faut car je ne suis pas un bn vbeiste :)
je vous le joins dans un fichier texte merci d'avance
 

Pièces jointes

  • macro.txt
    412 bytes · Affichages: 16

nemesia

XLDnaute Nouveau
bonjour,

Est-ce que une formule qui repèrerais la dernière valeur dans la colonne A t'irais par exemple

last_ligne = Range("A100000").End(xlUp).Row

Après il te reste plus que a récuperer cette valeur dans ton code et l'utiliser par exemple si tu veut selectionner tout ton tableau dans une plage donnée tu choisi ta cellule de départ :

Range("A1:W" & last_ligne).select
selection.copy
'tu cible se que tu veut et ou tu le veut
sheets("mettre ici le nom de la page")
range ("la cellule a partr de la qu'elle tu colle toute les données")
et voila une copy du tableau en fontion de la derniere ligne saisie
 
Dernière édition:

zeduky

XLDnaute Nouveau
Merci Nemesia
peux tu me l’intégrer dans mon code car le soucis c'est que je fais de la macro avec excel via le logiciel et je ne suis pas du tout dans le VBA et je ne sais pas comment intégrer last_ligne = Range("A100000").End(xlUp).Row par exemple etc....
Merci en tout de cas pour le coup de main !! :)
 

nemesia

XLDnaute Nouveau
:)pas de soucis peut tu me joindre un fichier anonyme avec ta macro que je puisse l'intégrer avec la plage que tu souhaite ect bien sûr

je ferais sa demain du coup j'ai bientôt fini ma journée de taf et je fait sa que pendant mon boulot car c se que mon tuteur ma dit de faire quand j'ai du temps libre peut être a demain dans ce cas moi je part a 17h30
 
Dernière édition:

zeduky

XLDnaute Nouveau
Ben alors personne me trouve une petite solution, nemesia a du partir en congés :) j'ai fait une petite macro avec excel et j'aimerai que lors de la conversion en table il sélectionne toujours jusqu’à la dernière ligne.
mais je ne sais pas faire en vba merci et un fichier exemple et plus haut dans la conversation.
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Je ne comprends pas bien votre problème: Dans la feuille "base brut" la plage A1:G390 est déjà sous forme de tableau et c'est très bien comme ça.
C'est en même temps la UsedRange de la feuille.
Donc si elle n'était pas sous forme de tableau vous pourriez prendre
ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.UsedRange, , xlYes).Name = "Tableau2"
 

zeduky

XLDnaute Nouveau
Bonsoir.
Je ne comprends pas bien votre problème: Dans la feuille "base brut" la plage A1:G390 est déjà sous forme de tableau et c'est très bien comme ça.
C'est en même temps la UsedRange de la feuille.
Donc si elle n'était pas sous forme de tableau vous pourriez prendre
ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.UsedRange, , xlYes).Name = "Tableau2"
Oui mais si la prochaine base va jusqu'à la ligne 60 la macro prendra toujours jusqu'à la ligne 30 comment faire pour qu'elle sélectionne jusqu'à la dernière ligne remplie ..
 

Dranreb

XLDnaute Barbatruc
La UsedRange contient le nombre de ligne qu'elle contient c'est tout.
Une ListObjects(1).Range aussi. Pourvu qu'on ne spécifie pas comme expression Range un appel à la méthode Range avec en argument une adresse avec un nombre de ligne fixe.
 

zeduky

XLDnaute Nouveau
La UsedRange contient le nombre de ligne qu'elle contient c'est tout.
Une ListObjects(1).Range aussi. Pourvu qu'on ne spécifie pas comme expression Range un appel à la méthode Range avec en argument une adresse avec un nombre de ligne fixe.
Excuse moi j'ai fait une erreur dans les lignes si ma base va plus loin que la ligne 390 ma macro ne prend pas e' compte au dessus de 390 comment faire pour qu'elle prenne en compte toutes les lignes remplies ? Merci
 

zeduky

XLDnaute Nouveau
Alors dans le fichier joint j'ai crée une macro avec excel via le clic souris car je ne connais pas le VBA, ma base lors de la création de la macro fait 390 lignes mais demain elle fera plus de ligne comment faire dans le code VBA pour que lors de la création du tableau il prenne jusqu'a la dernière ligne vierge.
Merci d'avance Draneb pour vos indications en gardant en tête que je ne suis pas Vbeiste donc si vous me parlez de listobject etc...j'ai un peu de mal a tout comprendre :)
 

Pièces jointes

  • exemple macro.xlsm
    31.7 KB · Affichages: 13

Dranreb

XLDnaute Barbatruc
Essayez comme ça :
VB:
Sub transfo_table()
   Dim LOt As ListObject
   Set LOt = ActiveSheet.[A1].ListObject
   If LOt Is Nothing Then Set LOt = ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.UsedRange, , xlYes)
   LOt.Name = "Tableau1"
   LOt.DataBodyRange.Select ' ou bien LOt.Range.Select, ça dépend si vous voulez les entêtes avec ou non. 
   End Sub
 
Dernière édition:

nemesia

XLDnaute Nouveau
Ben alors personne me trouve une petite solution, nemesia a du partir en congés :) j'ai fait une petite macro avec excel et j'aimerai que lors de la conversion en table il sélectionne toujours jusqu’à la dernière ligne.
mais je ne sais pas faire en vba merci et un fichier exemple et plus haut dans la conversation.

oui désoler du retard de la réponse j'avais un projet ultra important a gérer je ne fait sa que pendant mon temps libre et dernièrement je n'en ai pas trop eu, alors j'ai appliquer la macro mais je ne sais pas si c'est se que tu recherche redit moi si c'est cela
 

Pièces jointes

  • exemple macro.xlsm
    31.9 KB · Affichages: 18

job75

XLDnaute Barbatruc
Bonsoir zeduky, nemesia, Bernard,

Un code qui peut convenir :
Code:
Sub table()
Dim LO As ListObject
With ActiveSheet
    For Each LO In .ListObjects
        If LO.Range(1).Address = "$A$1" Then LO.Resize .[A1].CurrentRegion: Exit Sub
    Next
    .ListObjects.Add(xlSrcRange, .[A1].CurrentRegion, , xlYes).Name = "table1"
End With
End Sub
A+
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG