XL 2016 Calculs à partir date Textbox pour affichage autres Textbox

Grall

XLDnaute Nouveau
Bonjour à toutes et tous,

J'ai un soucis car je n'arrive pas à résoudre un problème de calcul.

J'ai une userform avec des Textbox, pour certaines modifiables et d'autres juste pour affichage de dates d'échéances.

J'ai deux types de calcul:
- un calcul par rapport à une date d'une Textbox avec -50 jours et -70 jours pour prise en compte dans un tableau, puis affichage dans deux Textbox de l'userform
- un calcul par rapport à la même Tetxbox avec 6 mois - 1 jour, puis 3 mois + 1 jour, avec prise en compte dans le même tableau puis affichage dans deux autres Textbox de la même userform

Je voudrais faire le calcul par Vba afin d'éviter la modification des formules des calculs du tableau si cela est réalisable. Mon soucis est principalement les calculs avec des mois moins des jours.

Merci par avance.
 

Pièces jointes

  • Explication.pdf
    81.8 KB · Affichages: 28
Dernière édition:
Solution
Bonjour,
Sans réellement comprendre ce que vous souhaitez, dans le code ci-dessous, si vous initialisez "Case rng.Rows.Count = 1 " à 4 ça ne règle pas votre problème ?

VB:
Private Sub RemoveRecord(ByVal RecordNumber As Long)
 
 'ActiveSheet.Unprotect ' enlève la protection et mettre le mot de passe entre "_"
 
 ' Suppression de l'enregistrement
 ' Contrainte : il doit rester un enregistrement
 
 Select Case True
 
  Case rng.Rows.Count = 1 ' Reste 1 enregistrement
    MsgBox "Vous devez laisser un enregistrement", vbInformation, "Suppression impossible"
 
  Case MsgBox("Voulez-vous supprimer la ligne sélectionnée", _
            vbCritical + vbYesNo + vbDefaultButton2, _
            "Suppression de la ligne " & CurrentRecord + 1) =...

Grall

XLDnaute Nouveau
Effectivement.

Par contre le soucis de la non saisie de la date possible ce qui implique une erreur pour moi.

J'ai utilisé le code suivant dans le WriteRecord:
"If Me.txtName.Value = "" Then
MsgBox "Entrer un Nom, vous devez reprendre la saisie"
Unload Me 'fermeture et réouverture obligatoire
Exit Sub
End If

If Me.txtFirstName.Value = "" Then
MsgBox "Entrer un Prénom,vous devez reprendre la saisie"
Unload Me
Exit Sub
End If

If Me.txt.Value = "" Then
MsgBox "Entrer un Identifiant ou Sécurité sociale à défaut,vous devez reprendre la saisie"
Unload Me
Exit Sub
End If"

Juste un problème avec le code:
"Me.cboMember.ListIndex = rng.Rows.CIf" au dessus
 

dg62

XLDnaute Barbatruc
Bonjour Grall
Pourquoi vous faites le contrôle au moment de l'écriture ?
faites le au moment de la saisie avec ce code
VB:
Private Sub TXTName_Exit(ByVal cancel As MSForms.ReturnBoolean)
    If txtName = "" Then
        MsgBox ("Saisie du nom obligatoire")
        cancel = True
    End If
End Sub
Si le champ est passé, message et le focus est rendu au textbox. (remplacer "textname" par le nom du textbox vérifié)
 

Grall

XLDnaute Nouveau
Bonjour dg62,

Par principe le dernier moment avant enregistrement, mais je reprends votre solution, effectivement plus logique et je n'ai pas le soucis du combobox.

Par contre, toujours le soucis de la txtDebutConge dans le cas d'un vide.
Pas logique pour moi, mais il arrive que certain dossier n'est pas la date de debut car nous attendons l'avis. Donc préparation du dossier par anticipation afin d'éviter une date de convocation.
Exemple: date de début de congé qui nous arrive après 2 à 5 semaines de retard (courrier, réunion pour avis ...).

Cette élément viens de m'être communiquer ce qui effectivement peut entrainer une saisie sans date.

Un peu galère, car j'ai les éléments au compte goutte. Ce qui explique pourquoi le masque de saisie comporte des blocs afin de pouvoir modifier celui-ci en cas de besoin.

Merci pour l'aide.
 

dg62

XLDnaute Barbatruc
Re,
"Par contre, toujours le soucis de la txtDebutConge dans le cas d'un vide."
Pourquoi un soucis ? Si le textbox est vide il n'y a pas de bug l'enregistrement peut avoir lieu. Il ne faut pas mettre de contrôle dessus.
 

Grall

XLDnaute Nouveau
Bonjour,

Je suis un idiot, j'avais laisser le code dans la partie enregistrement.
J'ai pris en compte aussi le cas d'un enregistrement sans date, puis modification tout de suite.
"Private Sub btnDebutConge_Click()

Dim dateRef1, dateRef2 As Date ' Declaration de variables
Dim IntervalType As String 'm pour ajouter des mois d pour des jours
Dim Nombre_Ajout As Integer 'nombre de mois ou de jour à ajouter à la date de référence

'prise en compte modification après saisie sans date
If txtDebutConge.Value = "" Then
dateRef1 = ""
Else
dateRef1 = CDate(txtDebutConge.Value)
End If

"
J'appele après le calendar.

Je refais par la suite le code au propre avec le fichier pour un dernier message et pour la communauté.
 

Grall

XLDnaute Nouveau
Bonjour,

Je viens de finir avec la non possibilité de supression de certaines lignes de mon tableau par click droitmais je voudrais maintenant empécher la supression des 4 premières lignes de mon tableau par le masque de saisie.

Une idée sur une méthode ? Je n'ai aucune idée sur le code: sur la feuille ou procédure globale?

Merci d'avance.
 

dg62

XLDnaute Barbatruc
Bonjour,

Je viens de finir avec la non possibilité de supression de certaines lignes de mon tableau par click droitmais je voudrais maintenant empécher la supression des 4 premières lignes de mon tableau par le masque de saisie.

Une idée sur une méthode ? Je n'ai aucune idée sur le code: sur la feuille ou procédure globale?

Merci d'avance.
Bonjour,

Vous pouvez remettre votre classeur et préciser quelles lignes vous souhaitez bloquer et qu’entendez-vous par masque de saisie ?
 

dg62

XLDnaute Barbatruc
Bonjour,
Sans réellement comprendre ce que vous souhaitez, dans le code ci-dessous, si vous initialisez "Case rng.Rows.Count = 1 " à 4 ça ne règle pas votre problème ?

VB:
Private Sub RemoveRecord(ByVal RecordNumber As Long)
 
 'ActiveSheet.Unprotect ' enlève la protection et mettre le mot de passe entre "_"
 
 ' Suppression de l'enregistrement
 ' Contrainte : il doit rester un enregistrement
 
 Select Case True
 
  Case rng.Rows.Count = 1 ' Reste 1 enregistrement
    MsgBox "Vous devez laisser un enregistrement", vbInformation, "Suppression impossible"
 
  Case MsgBox("Voulez-vous supprimer la ligne sélectionnée", _
            vbCritical + vbYesNo + vbDefaultButton2, _
            "Suppression de la ligne " & CurrentRecord + 1) = vbYes
     RecordNumber = RecordNumber + 1
     rng.Rows(RecordNumber).Delete Shift:=xlUp ' Supprime la ligne de la plage
     InitData      ' Initialisation des variables objets
     InitRowSource ' Initialisation de la propriété RowSource
     CurrentRecord = 0: Me.cboMember.ListIndex = CurrentRecord
 
 End Select
 
 UserFormStatus = Status.Consultation

'ActiveSheet.Protect ' Remettre le mot de passe et celui-ci entre "_"

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 161
Messages
2 085 855
Membres
103 005
dernier inscrit
gilles.hery