Je reçois un fichier chaque jour dans le cadre de mon travail et la base de données utilisée est variable en ligne. J'aimerai une macro qui sélectionne la zone "jaune" dans le fichier soit jusqu'à la dernière ligne non vide en sachant que chaque jour des lignes s'efface ou se rajoute. Cette sélection de données sera ensuite utiliser pour ma fonction INDEX & EQUIV.
Sub test()
c = Cells(1, Columns.Count).End(xlToLeft).Column
l = Cells(Rows.Count, 2).End(xlUp).Row
MsgBox Range(Cells(2, 2), Cells(l, c)).Address 'pour test
Range(Cells(2, 2), Cells(l, c)).Select
End Sub
Quel que soit le code utilisé, la question ultime reste:
Pourquoi ce Select?
(Vu que la plupart d'entre nous conseillent d'éviter Select et autre Activate)
Samuto
Dans ce cas, le select est inutile
On peut nommer directement
VB:
Sub nommer()
x = Columns.Count: xx = Rows.Count
c = Cells(1, x).End(1).Column: DL = Cells(xx, 2).End(3).Row
Range([B2], Cells(DL, c)).Name = "toto"
End Sub
J'ai repris de la simplication de soan
(les syntaxes étant identiques dans le #17 et le #22 pour identifier "dernière ligne et dernière colonne")
Samuto
Dans ce cas, le select est inutile
On peut nommer directement
VB:
Sub nommer()
x = Columns.Count: xx = Rows.Count
c = Cells(1, x).End(1).Column: DL = Cells(xx, 2).End(3).Row
Range([B2], Cells(DL, c)).Name = "toto"
End Sub
J'ai repris de la simplication de soan
(les syntaxes étant identiques dans le #17 et le #22 pour identifier "dernière ligne et dernière colonne")
Chez moi, avec ton fichier exemple, mon précédent code fonctionne
la plage nommée toto correspond à B2:I8
(soit la zone en jaune)
NB: J'ai testé sur le 1er fichier.
Chez moi, avec ton fichier exemple, mon précédent code fonctionne
la plage nommée toto correspond à B2:I8
(soit la zone en jaune)
NB: J'ai testé sur le 1er fichier.
Le code fonctionne si les colonnes aprés le tableau sont vides.
Ce qui n'était pas le cas dans ton dernier fichier exemple.
Fais le ménage et retestes
VB:
Sub Macro3()
Dim c&, l&, rng As Range
c = Cells(1, Columns.Count).End(xlToLeft).Column
l = Cells(Rows.Count, 2).End(xlUp).Row
Set rng = Range([D2], Cells(l, c))
rng.Name = "BASE"
'ci dessous juste pour test
With rng
mess = .Address & vbCr
mess = mess & .Name.Name & vbCr
End With
MsgBox mess
End Sub