Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Characters(Start, Length)

  • Initiateur de la discussion Initiateur de la discussion cibleo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

cibleo

XLDnaute Impliqué
Bonsoir à tous,

En B1, j'ai un libellé :
Planning du Jeudi 11 Novembre 2010
et l'instruction suivante me le surligne en rouge:
Code:
.[B1].Characters(Start:=13, Length:=Len([B1]) - 12).Font.ColorIndex = 3


Sauf que j'aimerais uniquement surligner le jour de la semaine :

Planning du Jeudi 11 Novembre 2010

J'ai essayé ceci : 😎

Code:
.[B1].Characters(Start:=13, Length:=InStr(1, [B1] & " ", " ") - 1).Font.ColorIndex = 3

Merci pour un nouveau coup de pouce.
Cibleo
 
Re : Characters(Start, Length)

Bonsoir Cibleo, bonsoir le forum,

Peut-être comme ça :
Code:
For x = 1 To Len(Range("B1"))
       If IsNumeric(Mid(Range("B1").Value, x, 1)) = True Then Exit For
Next x
Range("B1").Characters(13, (x - 1) - 13).Font.ColorIndex = 3
 
Dernière édition:
Re : Characters(Start, Length)

Bonsoir le fil 🙂,
Une solution tournée plus sur les jours de la semaine 😛
Code:
[COLOR=blue]Sub[/COLOR] test()
[COLOR=blue]Dim[/COLOR] Tableau, MonArray, I [COLOR=blue]As Integer[/COLOR], J [COLOR=blue]As Integer[/COLOR]
MonArray = Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche")
Tableau = Split(Range("B1"), " ")
[COLOR=blue]For[/COLOR] I = [COLOR=blue]LBound[/COLOR](MonArray) [COLOR=blue]To UBound[/COLOR](MonArray)
[COLOR=blue]For[/COLOR] J = [COLOR=blue]LBound[/COLOR](Tableau) [COLOR=blue]To UBound[/COLOR](Tableau)
[COLOR=blue]If[/COLOR] MonArray(I) = Tableau(J) [COLOR=blue]Then GoTo[/COLOR] Fin
[COLOR=blue]Next[/COLOR] J
[COLOR=blue]Next[/COLOR] I
[COLOR=blue]Exit Sub[/COLOR]
Fin:
Range("B1").Characters(Start:=InStr(1, Range("B1"), Tableau(J), vbTextCompare), Length:=Len(Tableau(J))).Font.ColorIndex = 3
[COLOR=blue]End Sub[/COLOR]
Bonne soirée 😎
 
Re : Characters(Start, Length)

Bonjour à tous,
Bonjour Robert, JNP 🙂

Voilà, j'ai testé les 2 solutions et opté pour la solution de Robert parce que c'est plus court tout simplement.
Par contre si vous trouvez qu'il y a redire sur la façon de controler la saisie des dates dans les InputBox, n'hésiter pas à me le faire savoir.

Voir le début du code ci-dessous :

Code:
Sub CreerFeuilles1()
Dim DateDebut As Variant, DateFin As Variant, i As Long, x As Byte
Application.ScreenUpdating = False
debut:
DateDebut = InputBox("Date de début (ex : 15/11/2010)", "Création des plannings")
DateFin = InputBox("Date de fin (ex : 15/11/2010)", "Création des plannings")
If Len(DateDebut) <> 10 Or Len(DateFin) <> 10 Then Exit Sub
'If DateDebut = "" Or DateFin = "" Then
'  Exit Sub
'Else
If Not IsDate(DateDebut) Or Not IsDate(DateFin) Then
  MsgBox "Il faut saisir une date", , "Création des plannings"
  GoTo debut
Else
.../...

En bonus, je vous joins mon fichier.
Merci pour tout Cibleo
 

Pièces jointes

Re : Characters(Start, Length)

Bonjour,

indépendamment de ce qui a été dit jusqu'ici sur ce fil et qui ne manque pas d'intérêt, il me semble qu'il serait plus judicieux, à la vue de ton fichier (ben voui c'est tjs mieux avec!), de procéder autrement que par une Inputbox dans laquelle on peut renvoyer n'importe quoi d'autre que des dates et dont il faut filtrer le résultat pour s'assurer que l'utilisateur a bien rentré des données valides. Ainsi, il existe un contrôle bien pratique pour entrer des dates qui s'appelle le Calendrier et que je t'ai implémenté en lieu et place de tes Inputbox dans ton fichier. Ainsi, il devient inutile de contrôler la saisie par l'utilisateur.
VB:
Dim DateDebut As Variant, DateFin As Variant
Dim i As Long, x As Byte
Application.ScreenUpdating = False
debut:
Load UserForm1
With UserForm1
    .Caption = "Date de début ?"
    .Calendar1.Value = Now()
    .Show
    DateDebut = .Calendar1.Value
    .Caption = "Date de fin ?"
    .BackColor = &H8080FF
    .Show
    DateFin = .Calendar1.Value
End With
Unload UserForm1
For i = DateDebut To DateFin

Cf. Fichier joint.

[EDITION] Dsl j'avais pas mis le bon fichier
 
Dernière édition:
Re : Characters(Start, Length)

Re 🙂,
Ainsi, il existe un contrôle bien pratique pour entrer des dates qui s'appelle le Calendrier et que je t'ai implémenté en lieu et place de tes Inputbox dans ton fichier. Ainsi, il devient inutile de contrôler la saisie par l'utilisateur.
Loin de moi l'idée de te contredire 😛... mais si tu fais une recherche sur MSCAL.OCX sur le forum, tu verras que certes le Calendrier est pratique, mais il pose des problèmes pour ceux qui ne l'ont pas (car il semble lié à l'installation d'Access) 😀... de même que les DTPicker 😱...
C'est vrai que c'est un vrai débat, on peux se demander pourquoi Bill Gates a décider qu'Excel n'avait pas besoin de gérer des masques de dates 🙄.
Bonne journée 😎
 
Re : Characters(Start, Length)

Re à tous,

Démonstration 😛



Merci quand même Softmama.
Des remarques toujours pertinentes JNP, j'en apprends tous les jours.

Cibleo
 

Pièces jointes

  • Calendar.jpg
    21.8 KB · Affichages: 90
  • Calendar.jpg
    21.8 KB · Affichages: 89
Re : Characters(Start, Length)

Bonjour MJ13,

Merci pour le lien, cela me permet de découvrir la function jours fériés de Boisgontier.
Je m'empresse de la tester en lieu et place de celle de Laurent Longre.
Pour essai, j'utilise pour la première fois la nouvelle balise code tout en couleurs.
J'ai saisi manuellement les balises comme préconisé : voir le résultat
Si cela cloche me le signaler.

VB:
Function EstFérié(dt)
Static j(11), m(11), témoinjf, pâques, i
j(1) = 1: m(1) = 1
j(2) = 1: m(2) = 5
j(3) = 8: m(3) = 5
j(4) = 14: m(4) = 7
j(5) = 15: m(5) = 8
j(6) = 1: m(6) = 11
j(7) = 11: m(7) = 11
j(8) = 25: m(8) = 12
pâques = Round(DateSerial(Year(dt), 4, (234 - 11 * (Year(dt) Mod 19)) Mod 30) / 7, 0) * 7 - 6
j(9) = Day(pâques + 1): m(9) = Month(pâques + 1)
j(10) = Day(pâques + 39): m(10) = Month(pâques + 39)
j(11) = Day(pâques + 50): m(11) = Month(pâques + 50)
témoinjf = False
For i = 1 To 11
If Day(dt) = j(i) And Month(dt) = m(i) Then
témoinjf = True
End If
Next
EstFérié = témoinjf
End Function

Pour la saisie des dates, je n'ai pas besoin que ce soit très élaboré, 2 inputbox me suffisent.

Pour le contrôle de saisie des dates, je me demandais si une Function as boolean appelée dans la macro "CreerFeuilles1" aurait pu faire l'affaire.

Au plaisir Cibleo
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

M
Réponses
5
Affichages
7 K
M
E
  • Question Question
2
Réponses
21
Affichages
3 K
eurysthee87
E
R
Réponses
4
Affichages
1 K
R
B
Réponses
1
Affichages
1 K
STéphane
S
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…