VBA : mise en forme en fonction de la position du (:)

cibleo

XLDnaute Impliqué
Bonjour le forum,

La macro présentée me permet de mettre en forme les 5 caractères qui peuvent constituer un horaire dans une cellule.
Un horaire est toujours marqué par la présence du double points [:] en son milieu.

Dans une cellule, figurent des horaires de départ et d'arrivée.
Un horaire de départ sera toujours situé en début de ligne et marqué par le [:] en 3ème position.
Un horaire d'arrivée sera toujours situé en fin de ligne et marqué par le [:] en 3ème position en partant de la fin.

A partir de ce constat, comment appliquer une mise en forme différente sur les horaires de départ et d'arrivée en prenant en compte de la position du [:]

Précision : les cellules comportent des retours à la ligne.

Code:
Private Sub CommandButton1_Click()
Call [COLOR=darkred]Color_Heure[/COLOR](Range("C2:F4"), 43, "Bold")
End Sub

Code:
Sub [COLOR=darkred]Color_Heure[/COLOR](Plage As Range, Coul As Long, Effet As String) 'bqtr
'Mise en forme des horaires
Dim k As Integer, cell As Range, y As Integer
For Each cell In Plage
 If cell <> "" Then
    For y = 1 To Len(cell)
      If Mid(cell, y, 1) = ":" Then
       With cell.Characters(y - 2, 5).Font
         .FontStyle = Effet
         .ColorIndex = Coul
       End With
      End If
    Next
 End If
Next
End Sub

Pouvez-vous m'aider
Merci Cibleo
 

Pièces jointes

  • Cibleo.xls
    36.5 KB · Affichages: 86

ROGER2327

XLDnaute Barbatruc
Re : VBA : mise en forme en fonction de la position du :))

Bonjour cibleo
Essayez ceci :
Code:
[COLOR="DarkSlateGray"][B]Sub Color_Heure(Plage As Range, Coul As Long, Effet As String) 'bqtr
'Colore les horaires
Dim k As Integer, cell As Range, y As Integer
For Each cell In Plage
 If cell <> "" Then
    For y = 1 To Len(cell)
      If Mid(cell, y, 1) = ":" Then
       With cell.Characters(y - 2, 5).Font
         .FontStyle = Effet
         If Asc(Mid(cell & Chr(10), y + 3, 1)) = 10 Then
            .ColorIndex = 3
         Else
            .ColorIndex = Coul
         End If
       End With
      End If
    Next
 End If
Next
End Sub[/B][/COLOR]
ROGER2327
#3623


Lundi 16 Merdre 137 (Nativité de Saint Donatien A François, SQ)
14 Prairial An CCXVIII
2010-W22-3T17:14:51Z
 

cibleo

XLDnaute Impliqué
Re : VBA : mise en forme en fonction de la position du :))

Bonjour Roger,
Bonjour à tous,

C'est parfait :)

Si tu pouvais me commenter cette ligne, j'ai vraiment du mal à comprendre
10 correspond au code ASCII du saut de ligne, c'est bien ça ?

Code:
.../...
If Asc(Mid(cell & Chr(10), y + 3, 1)) [COLOR=red]= 10[/COLOR] Then
            .ColorIndex = 3
.../...

Cibleo
 

ROGER2327

XLDnaute Barbatruc
Re : VBA : mise en forme en fonction de la position du :))

Re...
(...)
Si tu pouvais me commenter cette ligne, j'ai vraiment du mal à comprendre
10 correspond au code ASCII du saut de ligne, c'est bien ça ?

Code:
.../...
If Asc(Mid(cell & Chr(10), y + 3, 1)) [COLOR=red]= 10[/COLOR] Then
            .ColorIndex = 3
.../...

Cibleo
C'est exactement cela. On peut écrire aussi :
Code:
.../...
         If Mid(cell & [COLOR="Red"]vbLf[/COLOR], y + 3, 1) = [COLOR="Red"]vbLf[/COLOR] Then
            .ColorIndex = 3
.../...
ROGER2327
#3626


Mardi 17 Merdre 137 (Saint Saint Woland, professeur, SQ)
15 Prairial An CCXVIII
2010-W22-4T10:09:48Z
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
181

Statistiques des forums

Discussions
312 369
Messages
2 087 676
Membres
103 635
dernier inscrit
aime nguessanj