IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Format de date textbox vers cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    technicien BE plasturgie
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien BE plasturgie
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Par défaut Format de date textbox vers cellule
    Bonjour,
    Sur mon fichier, j'avais un DTpicker, que j'ai du retirer car il ne fonctionnait pas sur un poste (win8 ,64 bits, mais sans le repertoire syswow64!), bref, on doit rentrer la date manuellement, ma macro la recupere et la transforme avant de la coller dans la cellule.
    aarrgghhhh
    je suis en format jj/mm/aaaa dans excel, et apres la macron la date est mm/jj/aaaa.
    j'ai cherché une solution, mais toutes celle que j'ai essayées ne marchent pas. je suis perdu (encore me direz vous)

    Quelle commande dois je ajouter pour retrouver ma date au bon format?

    mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    Option Explicit
     
    Dim Ws As Worksheet
    Dim NbLignes As Integer
     
     
     
     
     
    Private Sub ComboBox4_Change() 'combobox sous produit
    Dim plage As Range
    Set plage = Sheets("LISTE").Range("G2:F20")
    End Sub
     
    Private Sub ComboBox5_Change() 'Combobox activité
    Dim plage As Range
    Set plage = Sheets("LISTE").Range("A2:A90")
     
    End Sub
     
     
    Private Sub ComboBox3_Change() 'Combobox produit
    Dim plage As Range
    Set plage = Sheets("LISTE").Range("F2:F99")
     
    End Sub
     
     
    Private Sub ComboBox6_Change() 'Combobox intervenant
    Dim plage As Range
    Set plage = Sheets("LISTE").Range("E2:E15")
    End Sub
     
    Private Sub ComboBox7_Change() 'Combobox bateaux
    If ComboBox7.Value = "" Then Exit Sub
    Dim NomRange As String
    NomRange = CaracSpec(ComboBox7.Value)
     
    End Sub
     
    Private Sub CommandButton1_Click()
    Unload UserForm1
    End Sub
     
    Private Sub CommandButton2_Click()
    'Recuperation de la derniere ligne et inscription des données
    Dim intLine As Integer
     intLine = Range("a65000").End(xlUp).Row + 1
     
      Cells(intLine, 1).Value = TextBox2.Value
      Cells(intLine, 2).Value = ComboBox1.Value
      Cells(intLine, 3).Value = ComboBox2.Value
      Cells(intLine, 4).Value = ComboBox3.Value
      Cells(intLine, 5).Value = ComboBox4.Value
      Cells(intLine, 6).Value = ComboBox5.Value
      Cells(intLine, 7).Value = ComboBox6.Value
      Cells(intLine, 8).Value = TextBox1.Value
      Cells(intLine, 13).Value = TextBox4.Value
      Cells(intLine, 14).Value = TextBox5.Value
      intLine = Sheets("DONNEES " & ComboBox6.Value).Range("a65000").End(xlUp).Row + 1
       With Sheets("DONNEES " & ComboBox6.Value)
      .Cells(intLine, 1).Value = TextBox2.Value
      .Cells(intLine, 2).Value = ComboBox1.Value
      .Cells(intLine, 3).Value = ComboBox2.Value
      .Cells(intLine, 4).Value = ComboBox3.Value
      .Cells(intLine, 5).Value = ComboBox4.Value
      .Cells(intLine, 6).Value = ComboBox5.Value
      .Cells(intLine, 7).Value = ComboBox6.Value
      .Cells(intLine, 8).Value = TextBox1.Value
      End With
     
    End Sub
     
    Private Sub ListBox1_Click()
     
    End Sub
     
    Private Sub Label10_Click()
     
    End Sub
     
    Private Sub Label13_Click()
     
    End Sub
     
    Private Sub Label7_Click()
     
    End Sub
     
     
    Private Sub UserForm_Initialize()
            'Définit la feuille contenant les données
       Set Ws = Worksheets("client_bateaux2")
        'Définit le nombre de lignes dans la colonne A
    NbLignes = Ws.Range("A65536").End(xlUp).Row
        'Remplissage du ComboBox1
        Alim_Combo 1
     
    End Sub
     
    Private Sub Label1_Click()
     
    End Sub
     
    Private Sub Label5_Click()
     
    End Sub
     
    Private Sub TextBox1_Change()
     
    End Sub
     
    Private Sub TextBox2_Change()
     
    End Sub
     
     
    Private Sub UserForm_Click()
     
    End Sub
     
    Private Sub ComboBox1_Change() 'Combobox client
        'Remplissage Combo2
        Alim_Combo 2, ComboBox1.Value
    End Sub
     
     
    'Procédure pour alimenter les ComboBox
    Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
        Dim j As Integer
        Dim Obj As Control
     
        'Définit le ComboBox à remplir
        Set Obj = Me.Controls("ComboBox" & CbxIndex)
        'Supprime les anciennes données
        Obj.Clear
     
        'alimente le Combobox initial (Combobox1)
        If CbxIndex = 1 Then
            'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne)
            For j = 2 To NbLignes
                Obj = Ws.Range("A" & j)
                'Remplit le ComboBox sans doublons
                If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j)
            Next j
        Else
            'Alimentation conditionnelle des autres Combobox en fonction de
            'ce qui est sélectionnée dans le contrôle précédent:
            '(La sélection du ComboBox1 définit le contenu du ComboBox2,
            For j = 2 To NbLignes
                If Ws.Range("A" & j).Offset(0, CbxIndex - 2) = Cible Then
                    Obj = Ws.Range("A" & j).Offset(0, CbxIndex - 1)
                    If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j).Offset(0, CbxIndex - 1)
                End If
            Next j
       End If
     
       'Enlève la sélection dans le ComboBox
       Obj.ListIndex = -1
    End Sub
    Private Sub ComboBox2_click()
     
    End Sub

    Si vous avez une idée, je suis preneur

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 970
    Par défaut
    bonsoir
    la quelle de tes textbox qui enregistre la date??
    et si tu essaye avec CDATE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(1, 1) = CDate(TextBox1.Value)

  3. #3
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Hello,


    ta cellule excel incriminée est bien dans le bon format date
    quelle ligne de code représente l'import de la date et l'export dans la cellule excel après traitement ?

  4. #4
    Membre averti
    Homme Profil pro
    technicien BE plasturgie
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien BE plasturgie
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Par défaut
    Bonsoir,
    Bennasr , c'est la textbox2, dans laquelle je renseigne la date.
    le CDate, je le glisse la? (sur tous les forums que j'ai epluché, je n'ai pas reussis a voir ou mettre les commandes proposées, j'ai fait plusieurs tests, mais échecs cuisants ^^ )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox2_Change()
    Cells(1, 1) = CDate(TextBox2.Value)
    End Sub

    et Mfoxy, c'est a ce niveau la que l'ecriture se fait, dans les cellules concernées
    *edit*
    la cellule de destination est bien au format date jj/mm/aaaa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Private Sub CommandButton2_Click()
    'Recuperation de la derniere ligne et inscription des données
    Dim intLine As Integer
     intLine = Range("a65000").End(xlUp).Row + 1
     
      Cells(intLine, 1).Value = TextBox2.Value ' je recupere ma date sur la feuille principale
      Cells(intLine, 2).Value = ComboBox1.Value
      Cells(intLine, 3).Value = ComboBox2.Value
      Cells(intLine, 4).Value = ComboBox3.Value
      Cells(intLine, 5).Value = ComboBox4.Value
      Cells(intLine, 6).Value = ComboBox5.Value
      Cells(intLine, 7).Value = ComboBox6.Value
      Cells(intLine, 8).Value = TextBox1.Value
      Cells(intLine, 13).Value = TextBox4.Value
      Cells(intLine, 14).Value = TextBox5.Value
      intLine = Sheets("DONNEES " & ComboBox6.Value).Range("a65000").End(xlUp).Row + 1
       With Sheets("DONNEES " & ComboBox6.Value)
      .Cells(intLine, 1).Value = TextBox2.Value ' la je duplique sur chaque feuille (1 par personne remplissant le formulaire)
      .Cells(intLine, 2).Value = ComboBox1.Value
      .Cells(intLine, 3).Value = ComboBox2.Value
      .Cells(intLine, 4).Value = ComboBox3.Value
      .Cells(intLine, 5).Value = ComboBox4.Value
      .Cells(intLine, 6).Value = ComboBox5.Value
      .Cells(intLine, 7).Value = ComboBox6.Value
      .Cells(intLine, 8).Value = TextBox1.Value
      End With
     
    End Sub
    Et merci d'avoir répondu, je prends le fichier avec moi ce week end, faut que je debloque ça

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 970
    Par défaut
    essayer avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Cells(intLine, 1).Value = CDate(TextBox2.Value)
    Cells(intLine, 1).NumberFormat = "m/d/yyyy"

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonsoir

    Citation Envoyé par BENNASR Voir le message
    essayer avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Cells(intLine, 1).NumberFormat = "m/d/yyyy"
    Cells(intLine, 1).Value = CDate(TextBox2.Value)
    BENNARS a raison il faut a plliquer le numberformat magique "m/d/yyyy"

    mais il faut le faire avant
    et si possible mettre un point devant cells si c'est dans un bloc with /end with ou le parent(sheets("blabla").cells(....).....)

    ou alors injecter dans la cells par dateserial

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheets(" le nom de ton sheets").Cells(intline, 1) = DateSerial(Year(TextBox2.Value), Month(TextBox2.Value), Day(TextBox2.Value))
    avec dateserial tu est tranquille
    peu importe l'ordre et le format dans le quel tu a taper ta date dans ton textbox la date sera dans le bon format (de ta region) dans la cellule
    et le must tu pourra constater dans le menu (format cellule ,nombre,date ) que le format appliqué est le francais (ou celui de ton system)
    autrement dit elle s'est formatée toute seule cool non?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre averti
    Homme Profil pro
    technicien BE plasturgie
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien BE plasturgie
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Par défaut
    Bonsoir, merci pour vos réponses, mais, je ne pas a quel endroit placer ces lignes mes connaissances en vba sont limitées.
    Désolé.

    *edit*

    j'ai trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub CommandButton2_Click()
    'Recuperation de la derniere ligne et inscription des données
    Dim intLine As Integer
     intLine = Range("a65000").End(xlUp).Row + 1
     
     
      Cells(intLine, 1) = DateSerial(Year(TextBox2.Value), Month(TextBox2.Value), Day(TextBox2.Value)) ' ajouté ici
      Cells(intLine, 2).Value = ComboBox1.Value
      Cells(intLine, 3).Value = ComboBox2.Value
      Cells(intLine, 4).Value = ComboBox3.Value
      Cells(intLine, 5).Value = ComboBox4.Value
      Cells(intLine, 6).Value = ComboBox5.Value
      Cells(intLine, 7).Value = ComboBox6.Value
      Cells(intLine, 8).Value = TextBox1.Value
      Cells(intLine, 13).Value = TextBox4.Value
      Cells(intLine, 14).Value = TextBox5.Value
      intLine = Sheets("DONNEES " & ComboBox6.Value).Range("a65000").End(xlUp).Row + 1
       With Sheets("DONNEES " & ComboBox6.Value)
      .Cells(intLine, 1) = DateSerial(Year(TextBox2.Value), Month(TextBox2.Value), Day(TextBox2.Value))
      .Cells(intLine, 2).Value = ComboBox1.Value
      .Cells(intLine, 3).Value = ComboBox2.Value
      .Cells(intLine, 4).Value = ComboBox3.Value
      .Cells(intLine, 5).Value = ComboBox4.Value
      .Cells(intLine, 6).Value = ComboBox5.Value
      .Cells(intLine, 7).Value = ComboBox6.Value
      .Cells(intLine, 8).Value = TextBox1.Value
      End With
     
    End Sub
    Meci beaucoup, c'est parfait, operationnel pour les collegues lundi

    et je dirai meme

  8. #8
    Membre averti
    Homme Profil pro
    technicien BE plasturgie
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien BE plasturgie
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Par défaut dé-résolution de post
    Bonjour a toutes et tous,
    ce remontage de post suite a un petit bug remonté par mes collegues, et j'ai testé un truc mais ça ne marche qu'a moitié.

    Donc, pour se remettre dedans:
    toujours mon soucis de dates "a l'americaine".
    plus precisément sur mes textbox 4 et 5.

    j'ai donc appliqué "dateserial" qui marche parfaitement bien, si on remplis les textbox, sauf que ces dates ne sont pas obligatoires, du coup, si je ne mets rien dedans je passe par la case debogage.

    y a t'il une commande qui me permettrai de récupérer ce que je mets (ou pas) dans ma text box? une date ou rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub CommandButton2_Click()
    'Recuperation de la derniere ligne et inscription des données
    Dim intLine As Integer
     intLine = Range("a65000").End(xlUp).Row + 1
     
     
      Cells(intLine, 1) = DateSerial(Year(TextBox2.Value), Month(TextBox2.Value), Day(TextBox2.Value))
      Cells(intLine, 2).Value = ComboBox1.Value
      Cells(intLine, 3).Value = ComboBox2.Value
      Cells(intLine, 4).Value = ComboBox3.Value
      Cells(intLine, 5).Value = ComboBox4.Value
      Cells(intLine, 6).Value = ComboBox5.Value
      Cells(intLine, 7).Value = ComboBox6.Value
      Cells(intLine, 8).Value = TextBox1.Value
      Cells(intLine, 13) = DateSerial(Year(TextBox4.Value), Month(TextBox4.Value), Day(TextBox4.Value)) ' c'est la et en dessous que se situe le pb, la premiere date (textbox2) etant  obligatoire
      Cells(intLine, 14) = DateSerial(Year(TextBox5.Value), Month(TextBox5.Value), Day(TextBox5.Value))
      intLine = Sheets("DONNEES " & ComboBox6.Value).Range("a65000").End(xlUp).Row + 1
       With Sheets("DONNEES " & ComboBox6.Value)
      .Cells(intLine, 1) = DateSerial(Year(TextBox2.Value), Month(TextBox2.Value), Day(TextBox2.Value))
      .Cells(intLine, 2).Value = ComboBox1.Value
      .Cells(intLine, 3).Value = ComboBox2.Value
      .Cells(intLine, 4).Value = ComboBox3.Value
      .Cells(intLine, 5).Value = ComboBox4.Value
      .Cells(intLine, 6).Value = ComboBox5.Value
      .Cells(intLine, 7).Value = ComboBox6.Value
      .Cells(intLine, 8).Value = TextBox1.Value
      End With
     
    End Sub
    Merci d'avance pour vos réponses

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    set sh=sheet("toto")
    with textboxX
     if isdate(.value)then
    dat=datevalue(.value)'au cas ou la date serait formatée
    sh.cells(x,y)=dateserial(year(dat),month(dat),day(dat))
    end if
    end with
    DATEVALUE ET ISDATE RECONNAISSENT :

    1. les 3 format regionaux parametrable (dd/mm/yyyy mm/dd/yyyy yyyy/mm/dd) avec separateur (/ ou - ou " ")
    2. distinguent les mois dans les 3 position jusqu'a ce que ca soit inferieur a 12 pour le jour et le mois (vba n'est pas devain) il annalysera en fonction du parametre region
    3. les mois en lettre en entier ou les 3 1er caracteres si bien orthographiés(je parle des accents !!!)on peut ajouter un "."


    demo d'exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    MsgBox DateValue("2019/05/20")
    MsgBox DateValue("05/20/2019")
    MsgBox DateValue("avr/20/2019")
    MsgBox DateValue("mai/20/2019")
    MsgBox DateValue("avr./17/2019")
    MsgBox DateValue("15/déc./2019")
    MsgBox DateValue("15/janvier/2019")
    MsgBox DateValue("2019/sep/20")
    MsgBox DateValue("2019/20/sep")
    MsgBox IsDate("15/janvier/2019")
    End Sub
    parti de la!!!!: en ce qui concerne les dates du genre (05/04/2019) dans cet ordre sera annalysé en fonction de la region paramétrée c'est a dire en france le 5 avril en US le 4 mai
    voila
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Membre averti
    Homme Profil pro
    technicien BE plasturgie
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien BE plasturgie
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Par défaut
    Merci,
    cependant, j'aimerai récupérer soit une date au bon format (et la le "dateserial" marche très bien) soit une cellule vide ,mais dans ce cas la, j'ai un bug, comme la formule attend une date.
    si je mets un "if" value = date then.... (il recupere la date au bon format avec dateserial)
    et un 2eme choix "if" empty cell (je ne sais pas si ça existe) then (il recupere une cellule vide)

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    si je mets un "if" value = date then.... (il recupere la date au bon format avec dateserial)
    et un 2eme choix "if" empty cell (je ne sais pas si ça existe) then (il recupere une cellule vide)
    Pour tester si c'est une date valide, tu as la fonction IsDate()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If IsDate("Ta Date") Then
        MsgBox "Nickel !"
    Else
        MsgBox "là, c'est pas bon !"
    End If

  12. #12
    Membre averti
    Homme Profil pro
    technicien BE plasturgie
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien BE plasturgie
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Par défaut
    Bonjour,
    c'est pas tant la date le format de date qui m'interesse (les collègues mettent le bon format) mais plutot la possibilité de mettre une date ou rien.
    Du coup, Theze, je vais tenter de bidouiller avec le" if then "
    genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Cells(intLine, 13) = If IsDate("Ta Date") Then DateSerial(Year(TextBox4.Value), Month(TextBox4.Value), Day(TextBox4.Value))
    Else "/"
    End If
    dans l'estprit, et ceci glissé lignes 15 et 16 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub CommandButton2_Click()
    'Recuperation de la derniere ligne et inscription des données
    Dim intLine As Integer
     intLine = Range("a65000").End(xlUp).Row + 1
     
     
      Cells(intLine, 1) = DateSerial(Year(TextBox2.Value), Month(TextBox2.Value), Day(TextBox2.Value))
      Cells(intLine, 2).Value = ComboBox1.Value
      Cells(intLine, 3).Value = ComboBox2.Value
      Cells(intLine, 4).Value = ComboBox3.Value
      Cells(intLine, 5).Value = ComboBox4.Value
      Cells(intLine, 6).Value = ComboBox5.Value
      Cells(intLine, 7).Value = ComboBox6.Value
      Cells(intLine, 8).Value = TextBox1.Value
      Cells(intLine, 13) = DateSerial(Year(TextBox4.Value), Month(TextBox4.Value), Day(TextBox4.Value)) ' glissé ici et la ligne en dessous (2 cellules concernées)
      Cells(intLine, 14) = DateSerial(Year(TextBox5.Value), Month(TextBox5.Value), Day(TextBox5.Value))
      intLine = Sheets("DONNEES " & ComboBox6.Value).Range("a65000").End(xlUp).Row + 1
       With Sheets("DONNEES " & ComboBox6.Value)
      .Cells(intLine, 1) = DateSerial(Year(TextBox2.Value), Month(TextBox2.Value), Day(TextBox2.Value))
      .Cells(intLine, 2).Value = ComboBox1.Value
      .Cells(intLine, 3).Value = ComboBox2.Value
      .Cells(intLine, 4).Value = ComboBox3.Value
      .Cells(intLine, 5).Value = ComboBox4.Value
      .Cells(intLine, 6).Value = ComboBox5.Value
      .Cells(intLine, 7).Value = ComboBox6.Value
      .Cells(intLine, 8).Value = TextBox1.Value
      End With
     
    End Sub
    sur le formulaire, date correspond a la date de saisie, et les dates "facultatives" lors de la saisie, sont date debut et date validation.
    actuellement,elles sont remplies avec ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Cells(intLine, 13).Value = TextBox4.Value
      Cells(intLine, 14).Value = TextBox5.Value
    mais le format n'est pas bon quand c'est rempli, par contre, si la case est vide dans le formulaire, pas de soucis

    Nom : dates formulaire.JPG
Affichages : 3777
Taille : 13,1 Ko

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re attention !! avec IsDtae tout ce qui brille n'est pas d'or
    re
    oulah !!!
    attention avec isdate theze elle te joue des vilains tours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    MsgBox IsDate("01:01") 'si on formate dd/mm/yyyy on se retrouve avec le 30/12/1899 cette année la les saussicons poussaient sur les arbres
    '
    MsgBox IsDate("7.10") ' ici pareil 30/12/1899
    '
    MsgBox IsDate("2019-20-04") ' normalement ce format jour/mois a droite  n'existe pas a part isdate toute les fonctions date (cdate,year,month,day,etc...) vont planter
    '
    'MsgBox Month(CDate("2019-20-04")) ' pour s'en convaincre  ici ca marche pas
    '
    MsgBox IsDate("29/02/0004")  ' ici c'est faux normalement les 29 eme jours  de fevrier  commence a partir de l'année 104
    End Sub
     
    maintenant teste comme suit  et ensuite enleve "=dat"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Sub test2()
    dat = "01:01"
    MsgBox Format(dat, "dd/mm/yyyy") = dat
    '
    dat = "7.10"
    MsgBox Format(dat, "dd/mm/yyyy") = dat
    '
    dat = "2019-20-04"
    MsgBox Format(dat, "dd/mm/yyyy") = dat' icci format est meme pas effectué il suffit de bloquer "=dat" pour s'en rendre compte 
    '
    dat = "29/02/0004"
    MsgBox Format(dat, "dd/mm/yyyy") = dat'ici le formatage passe l'année a 2004
     
     
    End Sub

    maintenant testons datevalue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test3()
    dat = "01:01"
    MsgBox DateValue(dat) = Date
    '
    dat = "7.10"
    MsgBox DateValue(dat) = Date
    '
    dat = "2019-20-04"
    MsgBox DateValue(dat) = Date
    '
    dat = "29/02/0004"
    MsgBox DateValue(dat) = Date
     
    End Sub
    non!!! isdate n'est absolument pas une garantie
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #14
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour Patrick,

    IsDate() fonctionne aussi bien pour des heures que pour des dates donc effectivement, quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox IsDate("7.10") ' ici pareil 30/12/1899
    la fonction considère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox TimeValue("7.10")
    donc, 07:10:00
    maintenant, pour ce qui est des dates très courantes comme celle que tu cites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox IsDate("29/02/0004")
    'ici c'est faux normalement les 29 eme jours de fevrier commence a partir de l'année 104
    Excel considèrant 1904 comme la première année bissextile c'est sûr que ça ne fonctionne pas mais testes avec ces dates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MsgBox IsDate("29/02/1900")
    MsgBox IsDate("29/02/1904")
    MsgBox IsDate("29/02/2019")
    MsgBox IsDate("2019-20-04") ' normalement ce format jour/mois a droite n'existe pas a part isdate toute les fonctions date (cdate,year,month,day,etc...) vont planter
    Pour ce qui est de cette "date", on ne doit pas avoir le même compilateur car :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox IsDate("2019-20-04")
    me retourne faux !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dat = "01:01"
    MsgBox Format(dat, "dd/mm/yyyy") = dat
    là, effectivement, tu formates en date ce que la fonction considère comme une heure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dat = "01:01"
    MsgBox TimeValue(dat)
    de même, on pourrait considérer qu'un numéro de série est une date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dat = 43502
    MsgBox IsDate(dat)
    MsgBox IsDate(Format(dat, "dd/mm/yyyy"))
    et pourtant, la fonction ne la considère pas comme telle.

    Enfin, pour conclure, je ne dis pas que cette fonction est infaillible mais elle permet de contrôler les petites erreurs de saisie avec assez de justesse à mon sens

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonsoir theze
    je te propose cette petite fonction
    qui te permet de faire la difference entre des dates valides ou invalide et refuse les times

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub test()
        MsgBox isAvalableDate(Cells(3, 1).Value)
    End Sub
    '
    Function isAvalableDate(cel As String) As Boolean
        Dim forme$,YDgts$
        With Application
            YDgts = IIf(.International(xl4DigitYears), "yyyy", "yy")
            Select Case .International(xlDateOrder)
            Case 0: forme = "mm/dd/" & YDgts: Case 1: forme = "dd/mm/" & YDgts: Case 2: forme = YDgts & "/mm/dd"
            End Select
            forme = Replace(forme, "/", .International(xlDateSeparator))
        End With
        If IsDate(cel) Then
            If Format(CDate(cel), forme) = CDate(cel) Then isAvalableDate = True
        End If
    End Function
    regarde ce qu'elle reconnais

    les 3 format international
    les mois en lettre a partir de 3 caracteres
    Nom : Capture.JPG
Affichages : 3805
Taille : 77,5 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  16. #16
    Membre averti
    Homme Profil pro
    technicien BE plasturgie
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien BE plasturgie
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Par défaut
    re , désolé pour l’absence mais pas mal pris par le taf.

    Ne le prenez pas mal, mais vous vous êtes un peu égares en route ^^ (rapport a ma question )

    petit résumé de celle ci:
    est il possible, dans un formulaire, de remplir ou non une case, avec, quand je la remplis d'une date (elle ne sert qu'a ça cette case) la reformulation de celle ci a l'européenne , et si je ne la remplis pas, elle reste sagement vide sans renvoyer d'erreur?

    Le contexte : ces cases correspondent (il y en a 2) aux date de début et fin de sujet.
    elles apparaissent systématiquement sur le tableau de sortie de macro (je récupère l'info "début" ou "fin" sur un TCD dans le même document) mais ne sont du coup, pas toujours complétées, ce tableau servant a compiler les temps passé sur les différents projets, au jour le jour.

    actuellement, je passe par "textbox" qui prend la case remplie ou vide, mais transforme la date ,et c'est la le problème, si j'ajoute le code pour revenir sur un format "normal" le formulaire plante si la case est vide (avec une date ça marche nickel)

    Au besoin, je peux envoyer le fichier par mail (mais pas en dl sur le site )

    Merci d'avance

  17. #17
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Tout cela est très confus
    Quel est techniquement le problème ?
    1) au niveau de l'affectation à une cellule du numérique (pour excel, la date n'est qu'un numérique, lequel est en suite "présenté" comme on le veut par le menu format) correspondant à la date saisie dans une textbox ?
    --- on vérifie dans ce cas la validité de la saisie et si valide, on utilise Dateserial, que l'on affecte à la cellule
    2) au niveau de la présence de cellules vides, lors de l'exécution d'une formule ?
    -- C'est là un autre aspect totalement distinct et à régler au seul niveau des formules utilisées sur l feuille de calcul
    Voilà.
    Je pense qu'on y verrait plus clair sans prose inutile.
    Si le problème est le 2) -->> ouvrir une discussion ad hoc dans la section Excel (formules) sans même parler de textbox.

Discussions similaires

  1. [XL-2003] Symbole de retour à la ligne apres copie de textbox vers cellule
    Par altra dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 17/09/2009, 13h12
  2. [E-07] TextBox vers cellules suivantes
    Par chrnoe dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/01/2009, 13h14
  3. données textbox vers cellules
    Par jo50160 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/01/2009, 20h36
  4. Forcer le format des dates dans une cellule
    Par cchampion2fr dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/10/2008, 13h20
  5. [Dates] Format de date MySQL vers français
    Par tcompagnon dans le forum Langage
    Réponses: 4
    Dernier message: 17/07/2007, 13h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo