[résolu]Ou est l'erreur ?

  • Initiateur de la discussion anthonygg
  • Date de début
A

anthonygg

Guest
Bonjour,

J'ai une userform qui me sert de boite de saisie. Je dois choisir une date et faire un commentaire ensuite je valide et le logiciel me l'enregistre dans un tableau. Pour améliorer le confort j'incrémente la date de +1 à chaque saisie.

Problème : Si je saisie mes données à la suite, tout marche mais si je saute une date (par exemple du 16/01 au 18/01), mes données ne s'enregistre plus pour un jour, puis le jour d'après cela remarche ...

Comment faire pour que cela enregistre mes données à 100% ?
 

Pièces jointes

  • Problème de date.xlsm
    45.7 KB · Affichages: 43
  • Problème de date.xlsm
    45.7 KB · Affichages: 51
  • Problème de date.xlsm
    45.7 KB · Affichages: 52
Dernière modification par un modérateur:

Jacou

XLDnaute Impliqué
Re : Ou est l'erreur ?

Bonjour Anthonygg,
tes données semblent bien s'enregistrer à chaque fois, mais uniquement pour la date enregistrée en cellule A1 de la feuille "saisie" et non en fonction de la date modifiée dans le textbox "dateBox".
Je m'explique :
en A1 tu as par exemple la date 01/02/2015
quand tu affiches ton formulaire, c'est bien cette date qui est affichée.
le commentaire saisi va être enregistré dans la cellule correspondante à la date 01/02/2015 de la feuille DATA.
puis en A1 la date va être mise à jour en ajoutant 1 à la date affichée dans le textbox "dateBox".
je suppose que si tu veux sauter une date (par exemple passer directement au 04/02/2015) tu vas modifier la date affichée (dans mon exemple : 02/02/2015) en tapant la date souhaitée(04/02/2015).
en cliquant sur le bouton "valider" comme tu mets à jour la feuille DATA en fonction de la date enregistrée en A1 de la feuille "saisie" le deuxième commentaire va s'enregistrer dans la feuille DATA pour la date du 02/02/2015. puis tu mets à jour la cellule A1 de la feuille "saisie" mais cette fois en tenant compte de ce que tu as modifié dans le textbox "dateBox".
si bien que pour la saisie suivante tu passeras bien au 05/02/2015, mais le commentaire de la date 04/02/2015 n'a pas été mis à jour au bon endroit.
il faut modifier ton code :
Private Sub validerBouton_Click()

'Recopie les données vers la BDD
dateBox.Value = Format(dateBox.Value, "dd/mm/yyyy")
Sheets("Saisie").Range("A1") = dateBox.Text
Sheets("Saisie").Range("A1") = Format(Sheets("Saisie").Range("A1").Value, "mm/dd/yyyy")
lig5 = Application.Match(Sheets("Saisie").[A1], Sheets("data").[A1:A367], 0)
If IsError(lig5) Then MsgBox "date non trouvée": Exit Sub
Sheets("data").Cells(lig5, 2) = commentairesBox.Value

'Incrémente de 1 la date
Sheets("Saisie").Range("A1") = CDate(DateAdd("d", 1, dateBox.Value))
dateBox.Value = Sheets("Saisie").Range("A1").Text


End Sub
bonne journée
 
A

anthonygg

Guest
Re : Ou est l'erreur ?

Merci c'est la fonction que je voulais !

Par contre le logiciel ne marche pas pour les dates type 06/01/2015 ... ça l'enregistre dans 01/06/2015 :(
 
Dernière modification par un modérateur:

Jacou

XLDnaute Impliqué
Re : Ou est l'erreur ?

bonsoir,
c'est l'éternel problème des formats date "dd/mm/aaaa" et "mm/dd/aaaa".
comme tu as sans doute pu le remarquer, j'ai modifié le type de format dans l'instruction
Sheets("Saisie").Range("A1") = Format(Sheets("Saisie").Range("A1").Value, "mm/dd/yyyy")
.
en effet avec le format "dd/mm/aaaa" l'instruction
lig5 = Application.Match(Sheets("Saisie").[A1], Sheets("data").[A1:A367], 0)
ne trouve pas les dates dont le jour est supérieur à 12.
Il faut trouver le compromis.
à suivre
bon courage
 
Dernière édition:
A

anthonygg

Guest
Re : Ou est l'erreur ?

Ca serait super utile comme fonction. Sinon ce n'est pas très grave.
J'ai cherché de mon coté pendant plusieurs heures mais c'est au delas de mes capacités en Excel.
 

Jacou

XLDnaute Impliqué
Re : Ou est l'erreur ?

Bonsoir Anthony,
voilà une version qui semble fonctionner.
tous les test que j'ai faits ont satisfait aux règles que tu souhaites.
tu verras, il n'y a pas de grosses modifications dans la macro.
bonne nuit
 

Pièces jointes

  • Problème de date Anthony.xlsm
    40.2 KB · Affichages: 28

Docmarti

XLDnaute Occasionnel
Re : Ou est l'erreur ?

Bonjour à tous.

Moi, je ferais comme ceci :

Code:
Private Sub validerBouton_Click()
Dim madate As Date

'Recopie les données vers la BDD
    madate = dateBox.Value
    Sheets("Saisie").Range("A1").NumberFormat = "m/d/yyyy"
    Sheets("data").[A2:A368].NumberFormat = "m/d/yyyy"
    
'L'inversion survient quand une valeur contenant une date est transférée vers une cellule, le format de celle-ci étant de type Date et la valeur étant de type String, ou l'inverse.
'Pour éviter tout risque d'inversion Jour/Mois, il y a FormulaLocal 
    Sheets("Saisie").Range("A1").FormulaLocal = madate
    
    lig5 = Application.Match(Sheets("Saisie").Range("A1"), Sheets("data").[A1:A368], 0)
    If IsError(lig5) Then MsgBox "date non trouvée": Exit Sub
     
    Sheets("data").Cells(lig5, 2) = commentairesBox.Value
'Incrémente de 1 la date
    madate = madate + 1
    Sheets("Saisie").Range("A1").FormulaLocal = madate
    dateBox.Value = madate

End Sub

Cordialement

Docmarti
 
Dernière édition:
A

anthonygg

Guest
Re : [résolu]Ou est l'erreur ?

C'est encore moi !

J'ai essayé vos deux fonctions sur un pc en anglais et hélàs plus rien ne marche !
Or mon code doit pouvoir marcher sur un pc en anglais principalement :(

Excel ne fait t'il pas la conversion automatiquement ?
 
A

anthonygg

Guest
Re : [résolu]Ou est l'erreur ?

Problème : La date dans ma boite de saisie s'affiche en anglais : ex : 01/21/2015 pour le 21 janvier et si on met une date avec un seul chiffre ça passe du 3/3 au 3/4 puis au 4/4 ... :(

Voici le fichier :
 

Pièces jointes

  • Problème de date.xlsm
    46.5 KB · Affichages: 27
  • Problème de date.xlsm
    46.5 KB · Affichages: 34
  • Problème de date.xlsm
    46.5 KB · Affichages: 37

Docmarti

XLDnaute Occasionnel
Re : [résolu]Ou est l'erreur ?

Le problème provient de
Code:
dateBox.Value = madate

Le premier élément étant de type String et le second étant de type Date, il y a conversion d'un type à l'autre, ce qui peut créer une mauvaise interprétation de la date.

Il faut éviter la conversion par.

Code:
dateBox = madate
'ou
dateBox.Value = CStr(madate)
 

job75

XLDnaute Barbatruc
Re : [résolu]Ou est l'erreur ?

Bonjour,

Je me demande vraiment ce que vous fabriquez tous sur ce fil avec vos formats, c'est pourtant simple :

Code:
Private Sub UserForm_Initialize()
    dateBox = Sheets("Saisie").Range("A1").Text
End Sub
 
Private Sub validerBouton_Click()
Dim lig5

'Recopie les données vers la BDD
    lig5 = Application.Match(Sheets("Saisie").[A1].Value2, Sheets("data").[A1:A367], 0)
    If IsError(lig5) Then MsgBox "date non trouvée": Exit Sub
    Sheets("data").Cells(lig5, 2) = commentairesBox
    
'Incrémente de 1 la date
    Sheets("Saisie").[A1] = Sheets("Saisie").[A1] + 1
    UserForm_Initialize
End Sub
A+
 

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 937
Membres
101 844
dernier inscrit
pktla