Saise d'une date directement

Bonjours le forum,

dans beaucoup d'appli que j'utilise (hors excel), exite la possiblilité de saisir une date directement sans utiliser ni (-) ni (/). exemple: on saisie 111208 et cela donne 11/12/2008. Dans un souci de gain de temps, je voudrais la même chose sur une petite appli excel que j'ai élaboré. Y-t-il une solution par la mise en forme de la cellule ou faut-il utiliser un code VBA sur le classeur.

Toute solution sera la bienvenue.

Bie cordialement à tous,

Elfi

bonsoir,

Une 'tite

à la sauvette (juste pour lancer le débat)

Bon, c'est codé à la hache et avec le pied... Ya pratiquement pas de gestion d'erreur, mébon...

Ya une macro ET un format conditionnel...

A+

2final-file.xlsm (72.33 Ko)

Bonsoir,

un exemple a adapter,dés que tu tapes dans la colonne A la date s'inscrit automatiquement dans la colonne B.

Avec l'aide de VBA.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 Then 'écrit dans la colonne A

Target.Offset(0, 1) = Date 'alors mets la date du jour dans la colonne a coté

End If

End Sub

A+

bonjour à tous,

En premier lieu, merci de vous intéresser à ma question.

Henri, je n'ai pas bien compris. En effet, c'est la cellule dans laquelle je saisie qui doit de mettre automatiquement en date.

Galopin, pour des raisons de sécurité, mon serveur professionnel m'interdit d'accéder à ton fichier (la catégorie "page personnelle" est interdite). Peux-tu me l'envoyer sous une autre forme?

D'avance merci,

bien cordialement,

Elfi

bonsoir,

voici un autre lien

A+

[edit] Ce dernier lien à été supprimé mais le tout premier lien fourni est permanent.

En réponse à ta question, clique droit sur la cellule, format de cellule, dans l'onglet nombre choisir date et choisir le type d'affichage voulu non ?

Bonjour à tous,

Cher Monsieur Nouveau, merci de votre réponse mais je n'ai pas ce qu'il me faut dans cette option.

Galopin, vraiment pas de bol, je ne peux pas accéder à ton nouveau lien non plus. Peux-tu me faire un copier coller de chez toi?

en attendant, merci d'avance

Bien cordialement,

Elfi

Bonjour,

Yaka demander...

Coller la macro dans le module de la feuille concernée. (Clic droit sur l'onglet + Visualiser le code)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim L&, Y1 As Boolean, Y2 As Boolean, DY%, DM%, DD%
On Error GoTo GESTERR
Y1 = Target.Count = 1
Y2 = Target.FormatConditions.Count = 1
If Y1 And Y2 Then
    If Target.FormatConditions(1).Formula1 = "=Spec" Then
    L = Target.Value
    If L < l0100 Then MsgBox "saisie invalide"
    DY = Right(L, 2)
    DM = Right((L - DY) / 100, 2)
    DD = IIf(L > 91200, Left(L, 2), Left(L, 1))
Application.EnableEvents = False
Target = DateSerial(DY, DM, DD)
Application.EnableEvents = True
End If
End If
Exit Sub
GESTERR:
MsgBox "Erreur imprévue !"
Application.EnableEvents = True
End Sub

Bon, Yavait différentes manières d'aborder le problème. Dans ce cas il m'a semblé intéressant d'utiliser une astuce de Didier Fourgeot pour délimiter la plage concernée. (Target)

Sélectionner les cellules ou le format sera appliqué et affecter le Format conditionnel :

La formule est :

=Spec

... sans appliquer aucun format !

Tel quel le code ne s'applique qu'à une feuille, mais on peut l'étendre facilement à tout le classeur. (accepte les entrées sous la forme JJMMYY ou JMMYY)

A+

Bien reçu. Je suis les instructions et te tiens au courant.

Merci pour tout,

Cordialement

Elfi

1nom-protege.xlsm (13.94 Ko)

Bonjour à tous les forumeurs,

bonjour, Galopin,

j'ai exécuté tes recommandations mais ça ne fonctionne pas. Sans doute suis-je dépassé. Pour simplifier, je te joins la feuille concernée. Peut-être ai-je loupé une manip.

https://www.excel-pratique.com/~files/doc/feuillecreationpourforum.xls

En tout cas, merci pour l'intérêt que tu porte à ma question.

Amicalement,

Elfi

[edit]

J'allais changer mon fusil d'épaule mais tout compte fait on va rester sur la première idée.

Le format conditionnel est "=Spec" avec un S majuscule alors si tu mets une minuscule évidement ça marche moins bien...

Il faut donc mettre en accord ton format conditionnel avec la macro. Ok ?

Ou tu gardes la minuscule et tu modifies la macro en conséquence ou tu gardes la macro et tu modifies ton format conditionnel.

Nota : pour la deuxième ellule (19) il est nécessaire que mon format conditionnel soit le premier... Après tu peux y mettre ce que tu veux...

A+

Bonjour à tous,

Bonjour Galopin,

forcemment, avec la majuscule, ça va mieux Je pense avoir hérité de quelques gènes asiniens!

En revanche, j'avais validé E19 par un format date obligatoire (dans l'exemple du 1/01/08 au 31/12/08). Ca ne fonctionne plus avec la macro.

De plus, les cellules suivantes n'apparaissent que si E19 est rempli. Or, je ne peux plus mettre à blanc E19, une fois installée la macro.

Cela fait beaucoup de questions mais avec les pros que vous êtes, je ne m'inquiète pas.

Mille mercis d'avance,

bien cordialement,

Elfi

bonjour,

En revanche, j'avais validé E19 par un format date obligatoire :

Ben... Boire ou conduire YFO choisir ! Ou tu gères avec ta validation ou tu laisses la macro faire le boulot...

Pour la suite ça dépend un peu de la manière dont se passe le "reset"

On peut déjà commencer comme ça :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim L&, Y1 As Boolean, Y2 As Boolean, DY%, DM%, DD%
On Error GoTo GESTERR
Y1 = Target.Count = 1
Y2 = Target.FormatConditions.Count = 1
If Y1 And Y2 Then
On Error GoTo GESTERR:
    If Target.FormatConditions(1).Formula1 = "=Spec" Then
    Application.EnableEvents = False
    L = Target.Value
    If L < 10100 Then Error 65000
    DY = Right(L, 2)
    DM = Right((L - DY) / 100, 2)
    DD = IIf(L > 91200, Left(L, 2), Left(L, 1))
Application.EnableEvents = False
Target = DateSerial(DY, DM, DD)
Application.EnableEvents = True
End If
End If
Exit Sub
GESTERR:
If L <> 0 Then MsgBox "saisie invalide"
[C19] = ""
Application.EnableEvents = True
End Sub

Avec un peu de chance ça pourrait marcher !

A+

Re Galopin,

OK, pour le message mais je ne bois pas, quoi que... . Merci, pour le code. Il me résoud le problème de mise à blanc de E19. Pour ce qui est de la condition de date, cela ne fonctionne pas. Comme je ne comprend pas grand chose au langage VBA, je me sens donc incapable de modifier le code pour qu'il fonctionne . Dans l'exemple ci-joint, il faudrait interdire toute saisie hors de l'année 2008 (du 01/01/08 au 31/12/08 inclus). Je pense que tu n'es pas loin de la solution. je te renvoie le fichier avec ton nouveau code adapté (majuscule supprimée).

https://www.excel-pratique.com/~files/doc/sF8vtfeuillecreationpourforum.xls

Merci mille fois encore,

Elfi

bonsoir,

Le code modifié pour pouvoir paramétrer une contrainte de validation :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim L&, Y1 As Boolean, Y2 As Boolean, DY%, DM%, DD%, DTest As Date
On Error GoTo GESTERR
Y1 = Target.Count = 1
Y2 = Target.FormatConditions.Count = 1
If Y1 And Y2 Then
On Error GoTo GESTERR:
    If Target.FormatConditions(1).Formula1 = "=spec" Then
    Application.EnableEvents = False
    L = Target.Value
    If L < 10100 Then Error 65000
    DY = Right(L, 2)
    DM = Right((L - DY) / 100, 2)
    DD = IIf(L > 91200, Left(L, 2), Left(L, 1))
Application.EnableEvents = False
DTest = DateSerial(DY, DM, DD)
If YDate(DTest) Then Target = DTest Else Target = ""
Application.EnableEvents = True
End If
End If
Exit Sub
GESTERR:
If L <> 0 Then MsgBox "saisie invalide"
[C19] = ""
Application.EnableEvents = True
End Sub

Private Function YDate(dS As Date) As Boolean
Dim DDeb As Date, DFin As Date
DDeb = DateValue("1/1/2008")
DFin = DateValue("31/12/2008")
YDate = dS > DDeb And dS < DFin
End Function

Yaka modifier DDeb et DFin pour modifier la contrainte de date...

A+

Bonjour le forum,

bonjour Galopin,

je suis presque au bout de mes peines grâce à toi. J'ai mis ton code et tout fonctionne sur E19. Par contre, j'ai voulu rajouter un message en cas de saisie éronnée (erreur de date). Je l'ai intégré dans la fonction en fin de code et ca fonctionne sauf que le message apparaît aussi quand la date est juste (>01/01/08 et <31/12/08). Je ne comprend pas pourquoi.

Enfin, je n'arrive pas à "cumuler" (?) les mises en forme conditionnelles pour H19, à savoir "spec" en première condition, et format cellule en second. La solution doit être simple mais je patauge.

Le fichier modifié pour que tu t'y retrouve.

https://www.excel-pratique.com/~files/doc/znFY5feuillecreationpourforum.xls

Merci encore beaucoup, beaucoup, beaucoup. On ne le dit jamais assez!

bien cordialement,

Elfi

bonsoir,

Tu mets comme ça et ça devrait le faire.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim L&, Y1 As Boolean, DY%, DM%, DD%, DTest As Date
On Error GoTo GESTERR
Y1 = Target.Count = 1
If Y1 Then
  On Error GoTo GESTERR:
  If Target.FormatConditions(1).Formula1 = "=spec" Then
    Application.EnableEvents = False
    L = Target.Value
      If L < 10100 Then Error 65000
      DY = Right(L, 2)
      DM = Right((L - DY) / 100, 2)
      DD = IIf(L > 91200, Left(L, 2), Left(L, 1))
      Application.EnableEvents = False
      DTest = DateSerial(DY, DM, DD)
        If YDate(DTest) Then
          Target = DTest
        Else
          MsgBox "saisie invalide, vous êtes sur les stats 2008"
          Target = ""
        End If
    Application.EnableEvents = True
  End If
End If
Exit Sub
GESTERR:
If L <> 0 Then MsgBox "Attendu une date au format" & Chr(13) & _
        "       JJMMAA ou JMMAA", 64, "Saisie invalide !"
Target = ""
Application.EnableEvents = True
End Sub

Private Function YDate(dS As Date) As Boolean
Dim DDeb As Date, DFin As Date
DDeb = DateValue("1 / 1 / 2008")
DFin = DateValue("31 / 12 / 2008")
YDate = dS > DDeb And dS < DFin
End Function

Pour le format conditionnel c'est bon comme ça.

A+

Bonjour le forum,

Cher Galopin,

tout simplement, super. Tu es arrivé à tout ce que je désirais. Chapeau! tout fonctionne, il ne me reste plus qu'à me pencher dessus pour comprendre (ça, c'est pas gagné). Mille merci encore une fois. En plus, le problème est résolu et je suis en vaances pour une semaine ce soir. Ca tombe bien.

Merci infiniment.

Passez tous de bonne fêtes de fin d'année,

Amicalement,

Elfi

Rechercher des sujets similaires à "saise date directement"