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 :

boucle tant que la date n'est pas bonne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut boucle tant que la date n'est pas bonne
    Bonjour,
    je cherche à valider une cellule qui doit contenir une date
    je voudrais faire une boucle tant que la condition n'est pas remplie

    voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub val_date()
     
     a = Cells(1, 1)
    Do While IsDate(a) = False
     Cells(1, 1).Select
    If IsDate(a) = True Then Exit Do
    Loop
    End Sub
    mon pb est de savoir comment l'utilisateur peut saisir une date et la boucle s’arrête qd la date est ok

  2. #2
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Bonjour,

    soit tu passes par une msgbox, soit tu lui fais renseigner la date dans un cellule que tu appelleras plus tard dans ta procédure.

    Ce que je ne comprend pas c'est pourquoi tu fais un while avec une seul cellule.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub val_date()
     a = Cells(i, 1)
     b = Cells(1, 2)
     
    For i =1 to 500
     IF a = b then
    Exit Do
    Next i
     
    End sub

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    merci had4789 de ta réponse mais elle ne me convient pas

    si je fais un msbox je reste toujours dans ma boucle
    à la rigueur je pourrais faire un inputbox pour demander et récupérer la valeur
    mais les utilisateurs qui me demandent la macro ne le veulent pas
    ils veulent simplement que tant que la date n'est pas valide ils peuvent changer la valeur de la cellule

  4. #4
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Comment est définie la validité de cette date?

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    que ce soit une date qui répond aux critères de Isdate

    je cherche vraiment la méthode pour boucler sur une cellule tant que la valeur n'est pas bonne
    en laissant la possibilité de changer la valeur
    si tu essaies le code que je mets il n'est pas possible de changer la valeur et c'est ça qui coince

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par Patnel Voir le message
    que ce soit une date qui répond aux critères de Isdate

    je cherche vraiment la méthode pour boucler sur une cellule tant que la valeur n'est pas bonne
    en laissant la possibilité de changer la valeur
    si tu essaies le code que je mets il n'est pas possible de changer la valeur et c'est ça qui coince
    désolé je ne comprends toujours pas ce que veux dire "boucler sur une cellule" !! que doit-'il se passer ?

  7. #7
    Invité
    Invité(e)
    Par défaut Bonjour,
    Pourquoi ne pas obliger l'utilisateur à sélectionner une date dans un calendrier!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Test()
    Dim d As String
    d = Calendard.Chargement
    If Trim("" & d) <> "" Then [a1] = CDate(d)
    End Sub
    Code UserForm Calendard : 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
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    Dim Charge As Boolean
    Dim RetourneDate As Date
    Private Sub CommandButton1_Click()
    ModifierDate -1
    End Sub
     
    Private Sub CommandButton2_Click()
    ModifierDate 1
    End Sub
     
    Private Sub D1_Click()
    If Charge = True Then Me.Tag = D1.Tag
    If Charge = True Then Me.Hide
    End Sub
     
     
    Public Function Chargement(Optional Mydate As String = "", Optional Pose As String = "0;0") As String
    Dim t
    t = Split(Pose, ";")
    Me.Top = t(0)
    Me.Left = t(1)
    If Pose = "0;0" Then Me.StartUpPosition = 2
    If Mydate <> "" Then Me.Tag = Mydate Else Me.Tag = Date
    Me.Mois = Format(Me.Tag, "MMMM YYYY")
    MajControle
    Me.Show vbModal
    On Error Resume Next
    Chargement = Me.Tag
    Unload Me
    End Function
    Sub ModifierDate(I As Integer)
    Dim m As Integer
    Dim Y As Integer
    m = Month(Me.Tag)
    Y = Year(Me.Tag)
    j = Day(Me.Tag)
    m = m + I
    If m > 12 Then m = 1: Y = Y + 1
    If m < 1 Then m = 12: Y = Y - 1
    If Charge = True Then Me.Tag = j & "/" & m & "/" & Y
    Do Until IsDate(Me.Tag)
        j = j - 1
        If Charge = True Then Me.Tag = j & "/" & m & "/" & Y
    Loop
    Me.Mois = Format(Me.Tag, "MMMM YYYY")
    MajControle
    End Sub
    Sub MajControle()
    Dim laDate As Date
    Dim j As Integer
    Dim m
    Dim trouve As Boolean
    Charge = False
    laDate = CDate("01/" & Format(Me.Tag, "mm/yyyy"))
    j = Weekday(laDate)
    For I = 1 To 42
    m = I Mod 7
        Me.Controls("D" & I).Caption = ""
        Me.Controls("D" & I).Tag = ""
        Me.Controls("D" & I).SpecialEffect = fmSpecialEffectRaised
        If j = m + 1 And trouve = False Then
            trouve = True
            Me.Controls("D" & I).Enabled = True
            Me.Controls("D" & I).Caption = Format(laDate, "dd")
            Me.Controls("D" & I).Tag = laDate
        Else
            If I > 1 Then
                If Me.Controls("D" & I - 1).Tag = "" Then
                    Me.Controls("D" & I).Enabled = False
                 Else
                    Me.Controls("D" & I).Caption = Format(CDate(Me.Controls("D" & I - 1).Tag) + 1, "dd")
                    Me.Controls("D" & I).Tag = CDate(Me.Controls("D" & I - 1).Tag) + 1
                    Me.Controls("D" & I).Enabled = True
                 End If
            Else
                Me.Controls("D" & I).Enabled = False
            End If
        End If
     
        If Me.Controls("D" & I).Tag <> "" Then
                If Month(CDate(Me.Controls("D" & I).Tag)) <> Month(Me.Tag) Then
                     Me.Controls("D" & I).Caption = ""
                    Me.Controls("D" & I).Tag = ""
                    Me.Controls("D" & I).Enabled = False
                End If
     
        End If
        If Me.Controls("D" & I).Tag <> "" Then
            If CDate(Me.Controls("D" & I).Tag) = CDate(Me.Tag) Then
            Me.Controls("D" & I).SpecialEffect = fmSpecialEffectSunken
        Else
            Me.Controls("D" & I).SpecialEffect = fmSpecialEffectRaised
           End If
        End If
    Next
    Charge = True
    End Sub
     
    Private Sub D10_Click()
    If Charge = True Then Me.Tag = D10.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D11_Click()
    If Charge = True Then Me.Tag = D11.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D12_Click()
    If Charge = True Then Me.Tag = D12.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D13_Click()
    If Charge = True Then Me.Tag = D13.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D14_Click()
    If Charge = True Then Me.Tag = D14.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D15_Click()
    If Charge = True Then Me.Tag = D15.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D16_Click()
    If Charge = True Then Me.Tag = D16.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D17_Click()
    If Charge = True Then Me.Tag = D17.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D18_Click()
    If Charge = True Then Me.Tag = D18.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D19_Click()
    If Charge = True Then Me.Tag = D19.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D2_Click()
    If Charge = True Then Me.Tag = D2.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D20_Click()
    If Charge = True Then Me.Tag = D20.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D21_Click()
    If Charge = True Then Me.Tag = D21.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D22_Click()
    If Charge = True Then Me.Tag = D22.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D23_Click()
    If Charge = True Then Me.Tag = D23.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D24_Click()
    If Charge = True Then Me.Tag = D24.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D25_Click()
    If Charge = True Then Me.Tag = D25.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D26_Click()
    If Charge = True Then Me.Tag = D26.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D27_Click()
    If Charge = True Then Me.Tag = D27.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D28_Click()
    If Charge = True Then Me.Tag = D28.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D29_Click()
    If Charge = True Then Me.Tag = D29.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D3_Click()
    If Charge = True Then Me.Tag = D3.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D30_Click()
    If Charge = True Then Me.Tag = D30.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D31_Click()
    If Charge = True Then Me.Tag = D31.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D32_Click()
    If Charge = True Then Me.Tag = D32.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D33_Click()
    If Charge = True Then Me.Tag = D33.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D34_Click()
    If Charge = True Then Me.Tag = D34.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D35_Click()
    If Charge = True Then Me.Tag = D35.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D36_Click()
    If Charge = True Then Me.Tag = D36.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D37_Click()
    If Charge = True Then Me.Tag = D37.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D38_Click()
    If Charge = True Then Me.Tag = D38.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D39_Click()
    If Charge = True Then Me.Tag = D39.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D4_Click()
    If Charge = True Then Me.Tag = D4.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D40_Click()
    If Charge = True Then Me.Tag = D40.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D41_Click()
    If Charge = True Then Me.Tag = D41.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D42_Click()
    If Charge = True Then Me.Tag = D42.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D5_Click()
    If Charge = True Then Me.Tag = D5.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub d6_Click()
    If Charge = True Then Me.Tag = D6.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D7_Click()
    If Charge = True Then Me.Tag = D7.Tag
    If Charge = True Then Me.Hide
    End Sub
     
    Private Sub D8_Click()
    If Charge = True Then Me.Tag = D8.Tag
    Me.Hide
    End Sub
     
    Private Sub D9_Click()
    If Charge = True Then Me.Tag = D9.Tag
    If Charge = True Then Me.Hide
    End Sub
    Fichiers attachés Fichiers attachés

  8. #8
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    non non non
    je veux du simple
    peut être n'est ce tout simplement pas possible

  9. #9
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour Patnel ... il vas falloir être plus clair lorsque tu dis cela :

    Citation Envoyé par Patnel Voir le message
    ...
    ils veulent simplement que tant que la date n'est pas valide ils peuvent changer la valeur de la cellule
    et bien il n'y as rien à faire, tes utilisateur peuvent saisir une date dans une cellule excel qu'elle soit valide ou pas, aucun besoin de code pour gérer cela ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/12/2009, 11h28
  2. Réponses: 2
    Dernier message: 17/06/2009, 23h42
  3. vba tant que cellule active n'est pas ma cellule
    Par elise1983 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/09/2008, 22h34
  4. Réponses: 2
    Dernier message: 01/04/2008, 13h22
  5. Réponses: 2
    Dernier message: 01/11/2006, 22h36

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