XL 2019 saisie de date dans une listbox

micpid62

XLDnaute Occasionnel
bonsoir à tous
Je vous expose mon problème : je suis en charge de la gestion d'un cimetière (pas gaie mais intéressant) dont j'ai une base de donnée pour gérer les emplacements.
Pour cela j'ai une formulaire(FrmSaisie) pour géré l'ajout de concessions et une autre (Database) pour modifier ou supprimer.
Dans ma base(source) je fait le calcul de la durée de concession(date de début et date de fin)
Lorsque que je saisie à l'aide du formulaire (FrmSaisie) le calcule se fait correctement mais lorsque je veux modifier la date de début j'obtiens dans la cellule date de fin le résultat TEXTE
Je ne sais pas si je me suis bien expliqué mais je joint le fichier pour plus de compréhension
D'avance je vous remercie pour votre aide
MP
 

Pièces jointes

  • CimetiereWeb1.xlsm
    86.9 KB · Affichages: 25

micpid62

XLDnaute Occasionnel
En fait je veux modifier une ligne de la source avec le formulaire Datebase qui mer permet de faire une recherche pour l'afficher dans la listbox et ensuite pouvoir modifier la ligne
je joint mon fichier pour plus de compréhension
 

Pièces jointes

  • CimetiereWeb_03.xlsm
    56.5 KB · Affichages: 6

Deadpool_CC

XLDnaute Accro
Bonjour,
après avoir traiter la date ... tu n'as pas traiter la durée => tu la remets dans ton tableau mais sous forme de texte. alors que tu a besoin d'un numérique pour la formule de calcul de ta date de fin.

---

1660896942432.png


---

1660897042561.png

---

1660897180490.png


C'est ta fonction DateFin qui te met "texte" au lieu de tenter de modifier la chaine de caractère en un chiffre pour faire le calcul.

Je crois que c'est la cause :)
 

Dranreb

XLDnaute Barbatruc
Je vous recommanderai de réécrire comme ça votre fonction :
VB:
Option Explicit
Function DateFin(ByVal DtDéb, ByVal Durée)
   Dim TSp() As String
   If TypeOf DtDéb Is Range Then DtDéb = DtDéb.Value
   If TypeOf Durée Is Range Then Durée = Durée.Value
   If VarType(Durée) = vbString Then
      If IsNumeric(Durée) Then Durée = CDbl(Durée)
      End If
   If VarType(Durée) = vbDouble Then
      If VarType(DtDéb) = vbDate Then
         DateFin = DateSerial(Year(DtDéb) + Durée, Month(DtDéb), Day(DtDéb))
      ElseIf DtDéb Like "*/*/*" Then
         TSp = Split(DtDéb, "/")
         TSp(2) = TSp(2) + Durée
         DateFin = Join(TSp, "/")
         If TSp(2) >= 1900 Then DateFin = CDate(DateFin)
      Else
         DateFin = CVErr(xlErrValue)
         End If
   Else
      DateFin = "Perpétuité"
      End If
   End Function
 

Dranreb

XLDnaute Barbatruc
Par ailleurs je propose d'habitude une solution avec un seul UserForm de consultation et mise à jour basé sur le modèle joint.
Quelles seraient les infos d'identification et/ou de recherche, dans l'hypothèse ou chacune devrait être saisie dans une ComboBox ? Je l'adapterai peut être pour votre besoin …
 

Pièces jointes

  • CLsCAsEric72.xlsm
    159.9 KB · Affichages: 10

Deadpool_CC

XLDnaute Accro
En attendant sa réponse ...
pour la modif => son champ de recherche vérifie dans la colonne "Recherches" où il a concaténé toutes les données de la ligne ... => recherche full texte :)
et ensuite il double clique sur la ligne qu'il veut modifier parmi les résultats qui correspondent à la recherche.
 

Statistiques des forums

Discussions
312 204
Messages
2 086 198
Membres
103 153
dernier inscrit
SamirN