Sélectionner une plage de cellules

Bonjour à tous

Je suis nouvelle sur ce forum et je n'y connais pas grand chose en VBA.

J'utilise l'enregistreur de macro quand j'ai besoin.

Cependant, là, j'ai un problème que je n'arrive pas à résoudre.

Je copie 3 colonnes en provenance d'un autre classeur. Le nombre de lignes est aléatoire (le classeur d'origine est mis à jour régulièrement et on ne veut pas refaire toute la mise en page à chaque fois)

Je souhaite sélectionner les 3 colonnes et les lignes dans lesquelles j'ai des données pour les mettre sous forme de tableau.

Dans l'enregistreur, je sélectionne la cellule A1 puis je fais CTRL+MAJ+ flèche vers le bas puis flèche vers la droite. Jusque là, pas de problème.

Sauf que pour la suite, la ligne de code indique une plage figée. Donc si le nombre de ligne est plus grand, la mise en forme ne se fait pas partout.

Voici la macro en question :

Sub MettreSousFormeDeTableau()
'
' MettreSousFormeDeTableau Macro
'

'
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$66"), , xlYes).Name = _
"Tableau1"

Range("Tableau1[#All]").Select
ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleLight1"
End Sub

Merci pour votre aide !

Bonjour,

Je ne comprends pas ? Les colonnes que vous importez sont différentes chaque semaine ?

Un exemple de votre fichier nous aiderait, (sans données confidentielles) parce que par définition un tableau n'a pas besoin d'etre crée à chaque import ?

Bonjour,

Effectivement, Valentin a raison.

Par contre, si l'explication était partielle et que la mise en forme se fait sur le classeur nouvellement crée, voici une adaptation possible du code. On reste proche de ce que tu avais fait, sans aller vers de réelles optimisations. On stocke l'adresse de la sélection dans une variable, qu'on réutilise ensuite.

Sub Macro1()
'
Dim plage As String
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
plage = Selection.Address

ActiveSheet.ListObjects.Add(xlSrcRange, Range(plage), , xlYes).Name = _
"Tableau1"
ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleLight1"
End Sub

Bonjour à tous les 2

Effectivement Valentin, il manquait des explications, désolée.

Mon fichier source est un .csv que j'ouvre avec excel pour que les données soient identiques à celles d'un fichier excel mais après, je ne souhaite garder qu'une partie que je dois mettre en forme.

@JoyeuxNoel Ta solution fonctionne parfaitement, merci beaucoup pour ton aide.

Bonne journée

Rechercher des sujets similaires à "selectionner plage"