[résolu] date et VB

date et VB [résolu] - VB/VBA/VBS - Programmation

Marsh Posté le 06-09-2007 à 15:50:05    

Bonjour à tous
 
Tout d'abord je tiens à préciser que je suis pas ceinture noire en VB  :o  
 
Bon maintenant place à mon problême.
J'ai une jolie macro qui permet de gérer des péremptions et qui déplace des lignes dans un onglet "périmés" lorsque la date limite d'utilisation est supérieure à la date d'aujourd'hui. Tout marche très bien  :bounce:  
 
J'ai voulu perfectionné la bête en ajoutant une combobox permettant une saisie plus friendly de nouveaux éléments à gérer.
Et là, c'est le drame.
 
La date que je récupère de la combobox et systématiquement reconnue comme du texte et par conséquent la macro estime que le produit n'est pas périmé même si il l'ai.
 
Je précise que j'ai essayé tout les format de date possible et que mes cellules sont parfaitement formattées. De plus, ma date apparait en 02/02/2007 au lieu de 2 septembre 2007 mais si double-click dans la cellule puis que je selectionne une autre cellule, le format devient comme par magie correcte  :pt1cable:  
 
Quelqu'un aurait-il une explication voire même une solution ?
 
Pour être plus clair j'aimerais rentrer la date au format 02/02/2007 dans ma combobox et qu'excel me retranscrive cette saisie comme étant une date dans une cellule (et non du texte :o ) !
 
Edit > Au fait tout cela se passe sous excel 2003
 
 
En espérant avoir été clair :jap: merchi d'avance


Message édité par yomg 95 le 12-09-2007 à 09:11:19

---------------
Ch'titeS venteS ! ~ "S'il n'y a pas de solution, c'est qu'il n'y a pas de probleme" Devise ShadokS.
Reply

Marsh Posté le 06-09-2007 à 15:50:05   

Reply

Marsh Posté le 06-09-2007 à 16:09:47    

Bonjour,
 
A un moment donné du force la cellule à la valeur de ta combo par  
cells(x,y)=combo_xxx.value
 
après tu fais  
cells(x,y).NumberFormat = "m/d/yyyy"
 
Ca va peut être résoudre ton problème
 

Reply

Marsh Posté le 06-09-2007 à 16:19:56    

J'ai essayé ça :
 
Private Sub TextBox4_Change()
[D35] = TextBox4
Cells(35, 4).NumberFormat = "dddd dd mmmm yyyy"
End Sub
 
Sans grand succès ...


---------------
Ch'titeS venteS ! ~ "S'il n'y a pas de solution, c'est qu'il n'y a pas de probleme" Devise ShadokS.
Reply

Marsh Posté le 06-09-2007 à 16:28:17    

Autre solution
 
tmp = Split(TextBox4 , "/" )
date1 = DateSerial(tmp(2), tmp(1), tmp(0))
Cells(35, 4) = date1

Reply

Marsh Posté le 06-09-2007 à 16:34:53    

C'est bien dans le userform que je colle ça ???
 
 
J'avais prévenu, je ne suis pas ceinture noire :D
 
En tout cas, merci de me soutiendre :jap:


Message édité par yomg 95 le 06-09-2007 à 16:35:11

---------------
Ch'titeS venteS ! ~ "S'il n'y a pas de solution, c'est qu'il n'y a pas de probleme" Devise ShadokS.
Reply

Marsh Posté le 06-09-2007 à 16:36:26    

Ca me donne un super erreur d'execution 9 :sweat:
 


---------------
Ch'titeS venteS ! ~ "S'il n'y a pas de solution, c'est qu'il n'y a pas de probleme" Devise ShadokS.
Reply

Marsh Posté le 06-09-2007 à 17:21:42    

euh, tant qu'à faire user friendly, pkoi n'utilises tu pas un control calendar ?

Reply

Marsh Posté le 06-09-2007 à 18:49:35    

En fait j'ai 7 zones de saisie dont 2 zones de dates plus 3 menus déroulants :/ déja pour faire ça, récupérer les données dans des cellules et mettre tous ça dans un tableau j'en ai un peu ch*é :D
Je suis biologiste, pas informaticien ... j'apprends sur le tas.
 
Mais si tu as une solution super friendly et simple je suis preneur :love:
 


---------------
Ch'titeS venteS ! ~ "S'il n'y a pas de solution, c'est qu'il n'y a pas de probleme" Devise ShadokS.
Reply

Marsh Posté le 06-09-2007 à 19:02:07    

J'ai p'tet une solution qui a l'air de fonctionner malheureusement je suis chez moi et je n'ai pas le code pour vérifier.
 
Il semblerais qu'un collage spécial > valeur permette de modifier mon 02/02/2007 en 02 février 2007 (la cellule de destination étant correctement formatée)  alors qu'un collage spécial > valeur et format des nombres ne fonctionne pas :??:


---------------
Ch'titeS venteS ! ~ "S'il n'y a pas de solution, c'est qu'il n'y a pas de probleme" Devise ShadokS.
Reply

Marsh Posté le 07-09-2007 à 07:55:28    

Bonjour,
 
Voici une autre proposition
remplace :
Private Sub TextBox4_Change()
[D35] = TextBox4
Cells(35, 4).NumberFormat = "dddd dd mmmm yyyy"
End Sub  
 
par
Private Sub TextBox4_Change()
tmp = TextBox4  
pos = InStr(tmp, "/" )
j = Left(tmp, pos - 1)
tmp = Mid(tmp, pos + 1)
pos = InStr(tmp, "/" )
m = Left(tmp, pos - 1)
a = Mid(tmp, pos + 1)
Cells(35, 4) = DateSerial(a, m, j)
 
Cells(35, 4).NumberFormat = "dddd dd mmmm yyyy"
End Sub

Reply

Marsh Posté le 07-09-2007 à 07:55:28   

Reply

Marsh Posté le 07-09-2007 à 08:23:15    

Erreur d'execution '5' :sweat:


---------------
Ch'titeS venteS ! ~ "S'il n'y a pas de solution, c'est qu'il n'y a pas de probleme" Devise ShadokS.
Reply

Marsh Posté le 07-09-2007 à 08:52:10    

Je viens de comprendre ton problème
 
Quand tu saisis ta date dans la textbox, tu commences par le jour  
pour exemple tu saisis 1, et là le traitement se fait immédiatement
Or 1 ne peut être reconnu comme une date, il formate donc la cellule en texte
 
Ce qu'il faut faire:
 
 
Private Sub TextBox4_Change()
End Sub
 
Dans le bouton de validation (généralement OK qu'il faut créer)
 
Private Sub CommandButton1_Click()
tmp = TextBox4
tmp = Split(tmp, "/" )
date1 = DateSerial(tmp(2), tmp(1), tmp(0))
Cells(35, 4) = date1
Cells(35, 4).NumberFormat = "dddd dd mmmm yyyy"
End Sub

Reply

Marsh Posté le 07-09-2007 à 09:49:46    

Et si tu utilisais la fonction de conversion de texte en Date nommée  CDate() ?

Reply

Marsh Posté le 07-09-2007 à 09:58:57    


Tegu  
 
La fonction cdate() fonctionne si ton argument a un format bien précis
 
Simulation de la saisie
 
Je saisis 1 pour le jour : cdate("1" )  = 31/12/1899
 
je saisis 1/  (pour passer au mois)
 cdate("1:" ) = message d'erreur Erreur d'exécution 13
 
Il faut impérativement saisir la date complètement avant d'utiliser cdate
Donc ne pas écrire le code dans textbox_change
mais dans un bouton

Reply

Marsh Posté le 07-09-2007 à 10:27:24    

Sinon j'ai trouve la fonction dateval(unecellule) qui fonctionne à merveille lors de tests (je colle 02/03/2007 dans a1 et la cellule b1 contenant le formule =dateval(a1) m'affiche "2 mars 2007" ) mais pendant l'execution de la macro la cellule ne se met pass à jour :sweat:


---------------
Ch'titeS venteS ! ~ "S'il n'y a pas de solution, c'est qu'il n'y a pas de probleme" Devise ShadokS.
Reply

Marsh Posté le 07-09-2007 à 10:30:26    

elle se met pas a jour, mais est-ce que la cellule a1 l'est elle ?

Reply

Marsh Posté le 07-09-2007 à 10:35:22    

J'insiste: to problème vient pas de dateval ......
 
Il vient de la conversion d'une saisie (textbox, boite de dialogue) en un format date d'une cellule
 
As tu essayé le code dans le bouton?......

Reply

Marsh Posté le 07-09-2007 à 11:18:26    

:bounce: And the winner is Yomg :bounce:
 
j'ai réussi à faire sorte de la cellule contenant dateval s'active en collant ça

Cells(2, 14) = "=DATEVAL(N1)"
Range("N2" ).Select
    ActiveCell.FormulaR1C1 = "=DATEVALUE(R[-1]C)"
    Range("N3" ).Select

 
Avec N1 contenant la date au format texte
 
Tout fonctionne à merveille maintenant, merci à tous pour votre soutien :jap:


Message édité par yomg 95 le 07-09-2007 à 11:41:11

---------------
Ch'titeS venteS ! ~ "S'il n'y a pas de solution, c'est qu'il n'y a pas de probleme" Devise ShadokS.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed