XL 2016 Problème code dans Userform

Ugodélires

XLDnaute Nouveau
Bonjour,

Voilà, à partir d'un Userform, je voudrai pouvoir saisir des activités dans une feuille, et ce à des dates données.

J'ai donc tapé ce code :

VB:
Private Sub CommandButton1_Click()

Dim CA As Range, Lg As Integer

If MsgBox("Voulez-vous ajouter cette activité à votre planning ?", vbYesNo) = vbYes Then

With Sheets("Données")

.Range("P1") = Me.TxBDate

.Range("P2") = Me.TxBDateF

End With

If Me.TxBDate <> "" And Me.CbXActivité <> "" Then
'Trouver la date'

Set CA = Sheets("Données").Range("A:A").Find(Sheets("Données").Range("P1"), LookIn:=xlValues, lookat:=xlWhole)

If Not CA Is Nothing Then

Lg = CA.Row
'Tester si j'ai déjà une activité à cette date ou non
If Sheets("Données").Cells("B" & Lg) <> "" Then

MsgBox ("Le " & Me.TxBDate & ", vous avez déjà " & Me.CbXActivité & " d'inscrit à votre planning")

Else

Sheets("Données").Cells("B" & Lg) = Me.CbXActivité

ThisWorkbook.Save

Unload UsFActivités

End If

Else

MsgBox ("Date non valide !")

End If

Else

MsgBox ("Les champs avec une * sont obligatoires")

End If

End If
End Sub
Or à chaque fois que je l'exécute, en rentrant les bons critères dans l'userform, j'ai toujours la Msgbox "Date non valide !" comme résultat.

Ci-joint un fichier pour être plus clair.

PS : la textbox DateF ne sert pas pour le moment, elle me sera utile juste pour inscrire une activité qui se répète sur plusieurs jours (mais il faut avant que le problème que je viens de vous exposer soit résolu)

Donc pour conclure, si quelqu'un peut m'expliquer d'où provient le petit soucis que je rencontre.

Merci
 

Pièces jointes

  • Test Planning.xlsm
    28.9 KB · Affichages: 6

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans le fichier joint, une façon de faire. Attention, vous vous dirigiez tout droit vers un truc inextricable au fur et à mesure de l'évolution de userForm.
Prenez un papier et tenter de faire une analyse fonctionnelle de votre programme, avant de vous lancer tête baissée.

VB:
Private Sub CommandButton1_Click()
    Dim idxLigne As Variant
    Dim Date1 As Date, Date2 As Date
    Dim Activité As String
    Dim CA As Range, Lg As Integer
    '
    '   Commencer par contrôler les champs obligatoires et les types de données
    '

    If CbXActivité.ListIndex = -1 Then
        MsgBox "Les champs avec une * sont obligatoire", vbExclamation, "Enregistrement interrompu"
        Exit Sub
    Else
        Activité = CbXActivité.Value
    End If

    If Not IsDate(TxBDate) Then
        MsgBox "Date non valide", vbExclamation, "Enregistrement interrompu"
        '
        Exit Sub
    Else
        Date1 = CDate(TxBDate)
    End If

    If IsDate(TxBDateF) Then Date2 = CDate(TxBDateF)

    If MsgBox("Voulez-vous ajouter cette activité à votre planning ?", vbYesNo + vbQuestion) = vbYes Then

        With Sheets("Données")
            ' la date 1 à déjà été contrôlée en début de macro
            .Range("P1") = Date1
            ' contrôle de la date 2
            If Date2 > 0 Then .Range("P2") = Date2 Else .Range("P2") = Empty
            '
            ' Utilisation de l'équivalent VBA de la fonction de feuille de calcul EQUIV pour trouver la date
            ' Comme c'est une fonction de feuille de calcul, elle peut toujours renvoyer une valeur d'erreur
            ' c'est pourquoi le type de la variable doit être Variant et qu'elle doit être testée par IsError
            '
            idxLigne = Application.Match(CLng(Date1), .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row), 0)
            If Not IsError(idxLigne) Then
                '
                ' Contrôler la présence d'une activité à cette date. Avertir l'utilisateur
                If .Cells(idxLigne, 2) <> "" Then
                    MsgBox ("Le " & Me.TxBDate & ", vous avez déjà '" & .Cells(idxLigne, 2) & "' d'inscrit à votre planning")
                Else
                    .Cells(idxLigne, 2) = Activité
                    ThisWorkbook.Save ' Est-ce bien nécessaire.
                    Unload Me
                End If
            Else
                ' date non trouvée en colonne A
                ' que faire si une date a disparu
            End If
        End With
    End If

End Sub

P.S. Demander à l'utilisateur s'il veut Enregistrer son activité, après qu'il ait cliquer sur un bouton Ok pour le faire, me semble un peu too much!
Attention à ne pas agacer vos utilisateurs.
La sauvegarde du classeur à chaque date est aussi un peu too much.

cordialement
 

Pièces jointes

  • Test Planning.xlsm
    30.5 KB · Affichages: 9

Ugodélires

XLDnaute Nouveau
Bonjour @Roblochon

merci beaucoup pour votre réponse qui va m'être d'un grand bénéfice.

Effectivement, je débute en VBA et je n'ai reçu aucun cours. Je recherche donc sur les forums et via des tutos les façons de faire.

Puis ensuite, je me créé de petits exercices pour voir si j'ai compris.

Je suis donc en train de me créer un agenda pour compléter mon apprentissage et j'étais bloqué sur ce petit détail.

Je vois dans votre code plusieurs choses que je ne connais pas, je vais donc pouvoir les étudier (surtout que vous les avez bien expliquées) et donc apprendre de nouvelles choses.

Encore un grand merci à vous.
Je vous tiendrai au courant de l'évolution de mon petit exercice lorsque j'aurai testé votre code.

Bonne soirée
 

Discussions similaires

Statistiques des forums

Discussions
312 090
Messages
2 085 210
Membres
102 820
dernier inscrit
SIEG68