Gestion de plages de cellules avec plusieurs conditions
Bonjour,
Mes meilleurs voeux à tous en cette année nouvelle.
J'ai une macro qui doit sélectionner une plage de cellules, ici B20:B26, et mettre en gras toutes les lignes dont la date est inférieure à la date d'aujourd'hui.
Le début de cette plage est B20, seule cellule connue; les autres cellules sont variables ; cette plage pouvant aller de 1 à 300 lignes. Dans l'exemple, B26 est variable.
Cette plage peut aussi être vide de toutes valeurs; elle peut commencer par une cellule vide, ou par une cellule remplie, elle peut être composée de cellules vides et de cellules remplies qui ne se suivent pas forcément.
Toutes ces conditions doivent faire l'objet de la macro.
Quand la plage n'est pas entièrement vide, la dernière cellule est toujours remplie.
La condition plage vide fonctionne, celle plage débutant par une cellule vide marche aussi,ce que je ne comprends pas, pourquoi celle débutant par cellule remplie ne fonctionne pas.
Je n'arrive pas à y introduire cette condition.
Quelqu'un peut-il m'aider à y voir clair ?
Merci d'avance
Bonjour
Si ce n'est pas important la création de ta zone définie "creance1"
Essayes
Private Sub Workbook_Open()
Dim Dte As Date
Dim J As Long
Dim Derlig As Long
ActiveWindow.WindowState = xlMaximized
Worksheets(1).ScrollArea = "A1:Z200"
Dte = Sheets("Feuil3").Range("E2").Value
Application.ScreenUpdating = False
Dte = Sheets("Feuil3").Range("E2").Value
With Sheets(1)
.ScrollArea = "A1:Z200"
Derlig = .Range("B" & Rows.Count).End(xlUp).Row
.Range("B20:AN" & Derlig).Font.Bold = False
For J = 20 To Derlig
If .Range("B" & J) <> "" And .Range("B" & J) <= Dte Then
.Range(.Range("B" & J), .Range("B" & J).End(xlToRight)).Font.Bold = True
End If
Next J
End With
End SubSalut,
Je te remercie pour ta réponse. Cela fonctionne très bien. Comme tout débutant, je ne comprends pas tout ce que tu as fait.
Comme tu as vu dans le fichier, il y a plusieurs ensembles de cellules qui se ressemblent. Le 1er commence à B20, l'autre G20, l'autre encore L20, etc... Ils se ressemblent en tant que structures, mais les données sont variables pour chaque.
Ce que tu viens de me donner je dois le multiplier pour chaque case. Je ne sais pas si je m'exprime bien.
Or, j'ai remarqué que tu as mis par exemple : .ScrollArea = "A1:Z200". J'ai tenté de changer les noms des cellules, cela n'a pas fonctionné.
Sais-tu comment multiplier le code que tu m'as envoyé ?
Merci d'avance
Bonjour
ce code traite tous les tableaux (à vérifier)
vianney a écrit :Or, j'ai remarqué que tu as mis par exemple : .ScrollArea = "A1:Z200"
Cette instruction était présente j'ai juste recopié
Private Sub Workbook_Open()
Dim Dte As Date
Dim J As Long, Derlig As Long
Dim I As Integer
ActiveWindow.WindowState = xlMaximized
Worksheets(1).ScrollArea = "A1:Z200"
Dte = Sheets("Feuil3").Range("E2").Value
Application.ScreenUpdating = False
Dte = Sheets("Feuil3").Range("E2").Value
With Sheets(1)
.ScrollArea = "A1:Z200"
' Pour annuler
'.ScrollArea = ""
Derlig = .Columns("B:N").Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For I = 2 To 40 Step 5
.Range(.Cells(20, I), .Cells(Derlig, I + 4)).Font.Bold = False
For J = 20 To Derlig
If .Cells(J, I) <> "" And .Cells(J, I) <= Dte Then
.Cells(J, I).Resize(1, 4).Font.Bold = True
End If
Next J
Next I
End With
End SubSalut,
C'est exactement je que je cherchais. Merci beaucoup. J'ai même pu l'intégrer à la macro définitive.
Je vais fermer la discussion. Merci encore.
Bonne Journée.