XL 2016 Selectionner une ligne jusqu'à dernière colonne

maroon

XLDnaute Junior
Bonjour!

Avec la macro que je fais j'aimerais mettre en couleur certaines lignes: des lignes vides qui séparent certaines parties du tableau. Je connais le numéro des lignes mais comme le nombre de colonnes varient je détermine le numéro de la dernière colonne avec le code:

VB:
ActiveCell.SpecialCells(xlLastCell).Column

Donc si je souhaite sélectionner la ligne vide numéro 15 par exemple jusqu'à la dernière colonne du tableau comment je dois écrire le code? Pour ensuite lui affecter une mise en forme.

Je n'arrive pas à trouver la syntaxe en utilisant le morceau de code que j'ai mis juste au-dessus.

Merci d'avance si quelqu'un peut m'aider!
 
Solution
Bonjour,

A mon avis, si "derlig" est un entier, il n'y a pas de raison que "i" n'en soit pas également un. ;)

Concernant le calcul de ce "derlig", je ne suis pas certain que ce soit bon et que tu trouves réellement la vraie dernière ligne de ton tableau...
J'ai l'impression que ça ne fonctionne que s'il n'y a rien en-dessous du tableau.

La dernière colonne du tableau doit être la même pour toutes les lignes, donc autant la calculer au départ une fois pour toute et la mettre dans une variable.

Tu peux même définir une "plage", d'une ligne de hauteur, allant de la colonne A à la dernière colonne du tableau, que tu peux en suite décaler avec un offset pour colorier les lignes qui doivent l'être. ;)

Tes deux "For" imbriqués font la...

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Peut-être simplement Cells(15, Cells(15, 1).SpecialCells(xlLastCell).Column) pour avoir la plage de la ligne 15 ?

Mais, tu es sûr que ActiveCell.SpecialCells(xlLastCell).Column te donne le numéro de la dernière colonne de la ligne en question ?
 

maroon

XLDnaute Junior
Bonjour Marcel32 et Staple1600!

Merci pour vos réponses!

@Marcel32 en fait la ligne
VB:
ActiveCell.SpecialCells(xlLastCell).Column
me donne le numéro de la dernière colonne utilisée dans mon tableau de donnée. Je l'ai vérifié avec un Msgbox et ça me renvoie le numéro 5 dans mon cas. J'ai utilisé ta ligne de code et c'est la dernière cellule de la ligne qui est sélectionné donc dans mon cas la cellule (15,5) et non pas toute la plage càd de (15,1) à (15,5).

@ Staple1600 avec ta ligne c'est le contraire càd que c'est la première cellule qui est sélectionnée (15,1) et mise en couleur.

Si vous avez une rectification je suis preneur, en tout cas merci pour vos réponses ! J'essaye de voir comment ajuster ce que vous m'avez proposé.
 

TooFatBoy

XLDnaute Barbatruc
me donne le numéro de la dernière colonne utilisée dans mon tableau de donnée.
Oui, là je suis d'accord. ;)

J'ai utilisé ta ligne de code et c'est la dernière cellule de la ligne qui est sélectionné donc dans mon cas la cellule (15,5) et non pas toute la plage càd de (15,1) à (15,5).
Effectivement, ce que j'ai indiqué ne doit donner que la dernière cellule. Au temps pour moi. :(
Tu peux essayer Range("A" & Cells(15, 1).SpecialCells(xlLastCell).Column)
ou peut-être Range(Cells(15,1),Cells(15, Cells(15, 1).SpecialCells(xlLastCell).Column))
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

•>maroon
Pas d'accord, avec toi.
Fais ce test (sur une feuille vierge)
Lance plusieurs fois, la macro ci-dessous
VB:
Sub Test_B()
Randomize
Rows(15).Clear
Cells(15, 1).Resize(, Application.RandBetween(1, 15)) = "=ROW()*COLUMN()"
Range(Cells(15, 1), Cells(15, Columns.Count).End(xlToLeft)).Interior.Color = vbMagenta
End Sub
Qu'observes-tu?
;)
 

jmfmarques

XLDnaute Accro
Bonjour à tous
Méfiez-vous des fantômes, dont lastcell --->>
VB:
Range("XX2000").Value = " "

MsgBox Cells.SpecialCells(xlCellTypeLastCell).Address

Range("K:XX").ClearContents

MsgBox Cells.SpecialCells(xlCellTypeLastCell).Address ' s'en foutra

ActiveSheet.UsedRange ' rappeler à l'ordre

MsgBox Cells.SpecialCells(xlCellTypeLastCell).Address ' ah ...
Et c'est loin d'être là le seul piège, tant avec lastcell qu'avec usedrange
 

patricktoulon

XLDnaute Barbatruc
bonjour a tous
VB:
Sub test()
Dim ligne&
ligne = 15
MsgBox Range(Cells(ligne, 1), Cells(ligne, Columns.Count).End(xlToLeft)).Address
End Sub

Sub test2()
Dim cel As Range
Set cel = [A15]
MsgBox Range(cel, Cells(cel.Row, Columns.Count).End(xlToLeft)).Address
End Sub

le specialcell(xltypelastcell) est enfant de feuille et et donne des résultats incohérant
contrairement a xlvisible qui peut etre utilisé en tant qu'enfant d'un range
 

Staple1600

XLDnaute Barbatruc
Re, Bonjour patricktoulon

•>patricktoulon
?
C'est déjà la syntaxe qu'on pouvait lire dans les messages#4 et #7
:rolleyes:
Bonsoir le fil, maroon, Marcel32

Une autre façon
Enrichi (BBcode):
Sub Test()
Range(Cells(15, 1), Cells(15, Columns.Count).End(xlToLeft)).Interior.Color = vbMagenta
End Sub
Ecrire trois fois le même code, c'est doute un effet délétère du confinement.
;)
 

patricktoulon

XLDnaute Barbatruc
bonjour @Staple1600
Alors pourquoi aller plus loin sachant que c'est la seule méthode valide dans ce contexte:rolleyes:

specialcell xllastcell vous oubliez

end(xlright) vous oubliez (cellule eventuellement vides)

countiff burk (cellule eventuellement vides)

etc...etc...:rolleyes:

"when it's one /when it's' one" point barre ;)
LOL
 

Staple1600

XLDnaute Barbatruc
Re

bonjour @Staple1600
Alors pourquoi aller plus loin sachant que c'est la seule méthode valide dans ce
•>patricktoulon
Ma question à moi, c'était
Pourquoi tu fais dans le redondant?
A savoir reposter un code déjà proposé hier ?
Quel est l’intérêt?

NB: Moi, je ne vais nulle part, le message#7 était une réponse à l’intention du demandeur qui disait que le code du message#4 ne fonctionnait pas.
(alors que si, il fonctionnait)
C'est juste ici que j'allais en ce qui me concerne.
 

maroon

XLDnaute Junior
Bonjour à tous!

Merci pour vos réponses! Je les ai essayées et en fait elles permettent d'aller jusqu'à la dernière colonne renseigné sur la ligne 15. Et avec les réponses de Marcel32 on arrive jusqu'à la colonne 15 peu importe le contenu de la ligne.

En revanche dans mon cas la ligne 15 est toujours vide, ce sont les lignes au-dessus et en dessous qui ont du contenu. Alors je cherchais à prendre en compte la dernière colonne renseignée du tableau (pas de la ligne 15 qui est toujours vide) de façon à ce que la mise en couleur de la ligne 15 aille jusqu'à la fin du tableau (dont le nombre de colonnes varie).
 

Discussions similaires

Réponses
6
Affichages
378

Statistiques des forums

Discussions
312 266
Messages
2 086 652
Membres
103 353
dernier inscrit
jerem'