format date sous vba

  • Initiateur de la discussion misterk
  • Date de début
M

misterk

Guest
bonjour,

je suis sur un petit projet de saisie dit comptable. A partir d'un formulaire de saisie je souhaite stocker des données selon le date de saisie. En l lignes les dates de saisies, en colonnes les postes budgetaires
Deux problèmes :
- le formats date sous vba ca ne passe pas !
- il peut y avoir plusieurs saisie pour le meme jour donc inccémenter
les postes si la saisie ce fait dans la meme journée..

ps : j'ai déja eu eu un bon coup de main de Zon.

merci pour vos lumières.
mk
 

Pièces jointes

  • etatdelajournee.zip
    26.1 KB · Affichages: 20
  • etatdelajournee.zip
    26.1 KB · Affichages: 32
  • etatdelajournee.zip
    26.1 KB · Affichages: 32
J

Jacques

Guest
Bonjour mk
pour le problème de date, ce n'est pas que le format date sous VBA ne passe pas, mais que le recalcul ne se fait pas automatiquement.
En effet pour une raison que je n'ai pas encore élucidé (car je ne suis pas allé dans le détail de tous tes codes), l'option de recalcul pour ton classeur est "sur ordre" et non "automatique" (Va voir dans "Outils-Options-Calcul"),
si bien que le calcul ne se fait (et donc la mise à jour de tes colonnes D à J) que si tu appuie sur la touche F9.

Pour que le calcul se fasse en automatique, deux solutions:
la première tu ajoutes dans ta proc "Workbook_Open()" la ligne suivante
Application.Calculation = xlAutomatic
la deuxième, dans ta proc "CommandButton1_Click()" tu ajoutes une ligne "Calculate" après avoir rempli tes cellules B et C (la mise à jour de tes colonnes D à J se fera alors).
Une question :
à quoi te serve les colonnes D, E et F?
Tu pourrais directement faire ton calcul en G, voire en J.
en G2 : (C2-B2)*24*60
ou en J2 : ((C2-B2)*24*60-h2)*i2

Pour les saisies multiples, Il faudrait ajouter des lignes quand il y a déjà des valeurs. Si j'ai un petit peu de temps je regarderai plus tard

Bon 1er mai
 
M

misterk

Guest
Bonjour Jacques,

Je viens de voir tes conseils mais j'ai essayé avec calcul automatique
mais ce ne marche pas. Je ne comprends pas pourquoi le calcul de la date
reste figée au début du siècle dernier !

les colonnes en questions ne sont que de simples résidus de tentatives
de formules via excel

non mon vrai souci c'est vraiment me deplacer dans les cellules
et incrementer en fonction de la date du jour ...

alors mon premier but est donc de résoudre cette petite accroche avec
la date.. puis incrementer mes données ...

donc si tu peux jetter un coup d'oeil ca serait sympas

à plus

mk
 
P

polpoye

Guest
je sais pas si ca peut aider mais il faut savoir que le format de date sous VB n'est pas le mm que sous excel!!!
yyyy-mm-dd alors que sous excel il est definit par jj-mm-dddd (reste apres a le mettre en forme selon l'affichage que l'on souhaite)
Ne pas confondre donc le format de la date (fixe) et son mode d'affichage !! :)

voila... (une parade est donc de reformater la date que l'on recupere d'excel et de la traiter selon ce que l'on souhaite faire sous vb)
 
J

Jacques

Guest
Bonjour mk,
j'ai déjà commencer à regarder tes codes et il semble qu'il y ait quelques petits trucs qui ne vont pas.
Comment as-tu essayé le calcul automatique?
en allant dans le menu "outils-options-calcul" avant d'ouvrir ton fichier ou bien en ajoutant comme je te le suggérais la ligne
"Application.Calculation = xlAutomatic"
dans ta proc "Workbook_Open()" ?
Parce que dans le premier cas, effectivement ça ne marche pas car en ouvrant ton fichier on revient à un calcul sur ordre.

autre question : quand ta macro"monargent" est-elle lancée?
J'ai l'impression d'ailleurs que des msgbox de cette macro font double emploi avec ton formulaire.

Enfin je regarde pour la date.

à bientôt
 
J

Jacques

Guest
re bonjour

Nous allons procéder par étape:

Dans ta proc "ComboBox1_Change()"

If TextBox1.Value = "" Then
MsgBox "Veuillez saisir l'heure de début", vbOKOnly, "ERREUR"
Exit Sub
Else: GoTo 1
End If
If TextBox2.Value = "" Then
MsgBox "Veuillez saisir l'heure de fin", vbOKOnly, "ERREUR"
Exit Sub
Else: GoTo 1
End If
If ComboBox1.Value = "" Then
MsgBox "Veuillez sélectionner un poste", vbOKOnly, "ERREUR"
Exit Sub
Else: GoTo 1
End If

1
Set plage2 = ws1.Range("A2:A" & L)
(....)

Tout d'abord, je te conseille de mettre toutes les instructions du même niveau de condition avec la même tabulation (pour moi c'est plus lisible) :
If TextBox1.Value = "" Then
MsgBox "Veuillez saisir l'heure de début", vbOKOnly, "ERREUR"
Exit Sub
Else
GoTo 1
End If

D'autre part, personellement ( mais là c'est une affaire de goût) je préfère les étiquettes explicites plutôt que numérique. mais comme ça ne change rien laisse les comme tu as envie.
En revanche, pour tes tests, je supprimerais le Else: GoTo 1.
En effet, si ta condition est réalisée, on affiche le message et on quitte la proc, et dans le cas contraire, on va au branchement 1.
Donc ton 2ème test n'est jamais exécuté.


If TextBox1.Value = "" Then
MsgBox "Veuillez saisir l'heure de début", vbOKOnly, "ERREUR"
Exit Sub
End If
If TextBox2.Value = "" Then
MsgBox "Veuillez saisir l'heure de fin", vbOKOnly, "ERREUR"
Exit Sub
End If
If ComboBox1.Value = "" Then
MsgBox "Veuillez sélectionner un poste", vbOKOnly, "ERREUR"
Exit Sub
End If

1
Set plage2 = ws1.Range("A2:A" & L)
(....)


Ensuite


'verification de l'existence de la date
adres_date = ws.Range("A65536").End(xlUp).Address
date_val = ws.Range(adres_date).Value
If date_val = "date" Then
adres_date = ws.Range(adres_date).Offset(1, 0)
ws.Range(adres_date).Value = LaDate
L1 = ws.Range(adres_date).Row
ElseIf date_val = Date Then
L1 = ws.Range(adres_date).Row
ElseIf date_val <> LaDate Then
adres_date = ws.Range(adres_date).Offset(1, 0).Address
ws.Range(adres_date).Value = LaDate
L1 = ws.Range(adres_date).Row
End If

Dans ce dernier test :
Si le contenu de la dernière cellule remplie dans la feuille "totaldujour" est égale à la chaîne "date", tu mets la valeur de la variable LaDate dans la cellule du dessous. mais comme cette variable est vide, c'est considéré comme "0" et on obtient donc la date "1 janvier 1904" (qui est la date "0" par définition)

suite de l'analyse un peu plus tard

à bientôt
 
M

misterk

Guest
Bonjour Jacques,

Je te remercie de tes conseils. J'ai finalement résolu le problème de la date
et le fichier s'incrémente bien en fonction de la date du jour.

Reste que je ne comprends pas pourquoi il existe un décalage entre
la date du jour et la valeur des différents poste.

Voila ce que je souhaite faire avec l'etiquette control_date (cf code) :

(1)je remonte la colonne A, je recupère l'adresse de la dernière cellule

(2)si la valeur de la derniere cellule ="date" (en fait je suis dans le cas d'une première saisie), je descends d'une cellule, et j'incremente la date du jour ainsi que la valeur des postes.

(3)si valeur de la derniere cellule = la date aujourd'hui, je reste sur la
meme ligne et je l'incrémente .

(4)si valeur de la derniere cellule <> la date aujourd'hui, je descends d'une
ligne, je mets la nouvelle date et j'incremente la ligne .

(5)voila donc litteralement je que je souhaite faire mais il subsiste le décalage dû au fait que l'on utilise l'application pour la première fois

voila voilou

A bientôt

misterk
 

Pièces jointes

  • etatdelajournee.zip
    28.6 KB · Affichages: 25
  • etatdelajournee.zip
    28.6 KB · Affichages: 37
  • etatdelajournee.zip
    28.6 KB · Affichages: 28

Discussions similaires

Réponses
3
Affichages
512
Réponses
21
Affichages
1 K

Statistiques des forums

Discussions
314 653
Messages
2 111 578
Membres
111 205
dernier inscrit
Adrien25