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...

patricktoulon

XLDnaute Barbatruc
Re, Bonjour patrictoulon

Toujours basé sur le fichier exemple (cf message#18)
VB:
Sub Colorier_Lignes_Vides_III()
[Indicateurs].Resize(, [A1].CurrentRegion.Columns.Count).Offset(1).SpecialCells(4).Interior.Color = RGB(255, 133, 99)
End Sub
bonjour a tous
bon je reviens un peu comme ça vite fait
teste de la version de staple1600
comme on peu le constater si il y a une seule cellule en dehors du tableau qui est remplie ben walouh !!
VB:
Sub Colorier_Lignes_Vides_II()
[Indicateurs].Resize(, ActiveSheet.UsedRange.Columns.Count).Offset(1).SpecialCells(4).Interior.Color = RGB(255, 78, 127)
End Sub

Capture.JPG
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re, Bonjour jmfmarques, patricktoulon

•>patricktoulon
1) Avant de revenir sur ma version, reviens sur l'orthographe de mon pseudo: c'est Staple pas Stapple :rolleyes:
2) Quel intérêt de revenir dessus puisque maroon utilise actuellement le code (le sien) qu'il a posté au message#54

•>mapomme
Café bu, pancake avalé
M'en vais donc étudier ta DerCol ;)
 

patricktoulon

XLDnaute Barbatruc
re
ok pour 54 tu ne l'avais pas marqué

bon toujours est il qu'il faudra m'expliquer ceci
VB:
 derlig = Columns("A:A").Find("*", Range("A1"), , , xlByRows, xlPrevious).Row

avec cela
Capture.JPG


ce qui est sur c'est que la 31 va passer ;) :rolleyes:

si ce tableau n'évolue pas en terme de taille pourquoi ne pas avoir créé un name le représentant ?
le name "INDICATEUR" il sert a quoi finalement? :rolleyes: rien !
bref on voit là toute l'importance dans la conception qui nous entraîne dans un bourbier avec une simple action de colorisation de ligne vide par vba :rolleyes:;) si c'est pas bien pensé au départ

obligé de déterminer un tableau qui selon ce que je vois est sensé être fixe :rolleyes: puisqu'il y a autre chose en dessous
tout jusqu'a with plage aurait pu être évité en nommant simplement le tableau A1F29
VB:
Sub Macro1()
    Dim derlig&, dercol&
    Application.ScreenUpdating = False
    With ActiveSheet
        derlig = .Range("indicateurs").Rows.Count + .Range("indicateurs").Row
        dercol = .Range("indicateurs").Cells(1).End(xlToRight).Column
        Set plage = .Range("indicateurs").Resize(derlig, dercol)
        With plage
            .Interior.Color = xlNone
            .AutoFilter Field:=1, Criteria1:="="
            Set p = .SpecialCells(xlVisible)
            .AutoFilter
            For Each area In p.Areas
                If WorksheetFunction.CountBlank(area) = .Columns.Count Then area.Interior.Color = RGB(255, 78, 127)
            Next
        End With
    End With
End Sub
ps: si le tableau devait évoluer en terme de colonne si la ligne de titre est dûment remplie le code ne change pas
demo4.gif
 

patricktoulon

XLDnaute Barbatruc
non c'est pas vrai !!! 54 au départ ca n’était pas écrit tu l'a modifié après!!!
ne me prend pas pour un Champion Olympique de Natation
c'est dommage que j'ai pas fait comme d’habitude (capturer) sinon je te montrerais
la mauvaise fois c'est toi :mad:

mais qu'importe
il n'y en a pas un!!! qui aurait pu lui dire de nommer son tableau en entier sérieux!!!????o_O

enfin bref :rolleyes:
 

Staple1600

XLDnaute Barbatruc
Re

[aparté]
Quatre pages pour du coloriage et du VBA en veux-tu en voilà
Alors que suffit de caresser son clavier ;)
(Avec un tableau structuré nommé: Mon_Tableau)
F5 Référence:=Mon_Tableau
F5
ALT+C
ALT+D
OK
Clic-droit et on choisit sa couleur
[/aparté]
;)
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Re

•>patricktoulon
Où tu vois une date d’édition dans le message #62 de 9h48 ???
Ça te réussit pas Office 2013...
Tu t'énerves tout seul (lol) ;)

PS: Et le 54 j'en causais aussi dans le message#64 (non édité aussi)

bon bref ca change rien
je m’énerve par ce si il ny a quelque chose que l on peut pas me dire c'est bien que je suis de mauvaise fois c'est même plutôt le contraire je suis plutôt du genre coup de boule ca passe ou ca casse et cela dans tout ;)
si je te dis que ton post s’arrêtait a "message#" chez moi c'est que c'est vrai
 

patricktoulon

XLDnaute Barbatruc
Re

Mauvaise foi ou pas
Personnellement, ce matin quand je me suis connecté sur ce fil, personne n'a eu à me dire quel code le demandeur utilise à l'heure actuelle ;)
Sans doute parce que j'avais mes lunettes sur le nez.
;)
je l'ai vu et qu'importe c'est bancale quand même !!!!!!!chronophage,

tu me diras tout les chemins mènent a Rome mais quand on est a pied ça peut faire la différence
 

jmfmarques

XLDnaute Accro
Bon ... efforçons-nous de mettre tout le monde d'accord (mais sans rapprochement, hein, Connard-virus obligeant) :
Moi, ce que je n'aime pas, ce sont les fraises au poivre. Et heureusement, que je ne les aime pas ... Car si je les aimais, j'en mangerais ... Et comme je ne les aime pas ... !
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous et aux autres :),

edit : Bonjour @patricktoulon :)

Utilisons les outils qu'Excel met à notre disposition -> Les tableaux dits "structurés" (ou ListObject en VBA).

La détection des données du tableau devient simplissime et les codes tout riquiqui. Plus de risque de se trouver en dehors du tableau.

Un exemple dans le fichier joint.

Pour les réfractaires aux téléchargements (je ne les citerai pas mais j'en connais :p), le code est fourni avec en plus quelques explications.

Le code dans module1:
VB:
Option Explicit
Const Fuchsia = 8343295, Menthe = 5158934, Tablo = "MesData"

Sub EnFuchsia()
'Pour les lignes "vides", on affecte couleur Fuchsia
'pour les autres lignes, on remet la couleur implicite du tableau structuré
Dim xligne As Range
   For Each xligne In Range(Tablo).Rows
      xligne.Interior.ColorIndex = xlColorIndexNone
      If Walou(xligne) Then xligne.Interior.Color = Fuchsia
   Next xligne
End Sub

Sub alterner()
'Pour les lignes "vides", on alterne entre la couleur Menthe et Fuchsia
'pour les autres lignes, on remet la couleur implicite du tableau structuré
Dim xligne As Range
   For Each xligne In Range(Tablo).Rows
      If Walou(xligne) Then xligne.Interior.Color = IIf(xligne.Interior.Color = Menthe, Fuchsia, Menthe) Else xligne.Interior.ColorIndex = xlColorIndexNone
   Next xligne
End Sub

Function Walou(xrg As Range) As Boolean
' Retourne TRUE si xrg ne contient que des cellules vides (sinon renvoie FALSE)
' Une cellule vide ne contient ni une erreur, ni une formule, ni la constante ""
Dim s, xcell
   Walou = True
   For Each xcell In xrg.Cells
      If IsError(xcell) Then
         Walou = False: Exit Function     ' la valeur de la cellule est une valeur d'erreur
      ElseIf xcell.HasFormula Then
         Walou = False: Exit Function     ' la cellule contient une formule
      ElseIf Len(xcell) > 0 Then
         Walou = False: Exit Function     ' la cellule contient quelque chose dont la longueur n'est pas nulle
      End If
   Next xcell
End Function

Quelques explications :
1585565938582.png
 

Pièces jointes

  • Der Col non vide -v2.xlsm
    33.9 KB · Affichages: 5
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Merci mapomme
Vous trouverez ci-dessous ma petite contribution en guise de remerciements. ;)

Sub Walou_Maker()
Range("A:G").Delete
Cells(1).Resize(11 + 11, 7 * 11 / 11) = Split(StrConv("mapomme", 11 + 11 + 11 + 11 + 11 + 9), Chr(0))
Range("3:3,5:6,8:10,14:17,21:21") = ""
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$G$22"), , xlNo).Name = "MesData"
End Sub
 

Discussions similaires

Réponses
6
Affichages
392