Format date VBA
Bonjour,
J'ai une macro contenant des txtbox date mais je n'arrive pas à forcer le format date en VBA "dd-mmm-yy" comme dans une cellule Excel.
En effet, dans la cellule j'ai des MFC en format dd-mmm-yy, lorsque je suis dans le classeur et que je tape 27/02 et que je valide le format est automatiquement transformer 27-févr.-17.
J'ai bloqué le "txtNC" afin d'obliger les personnes à saisir quelque chose à l'intérieur et dès qu'il y a un caractère cela débloque les deux boutons NC REWORK ou NC REJECT.
Dans l'UserForm "Saisie Nouvelle NC le "txtdate" est rempli au couleur de base de l'UserForm afin de ne pas apparaître lors de la saisie mais la date du jour se met automatiquement.
Dans l'UserForm "Choix" il y a également deux «txtdate», "txtdate1" et "txtdate2". Je voudrais savoir s'il y a la possibilité de ne faire qu'un bouton pour valider en fonction du choix du "boutonOption" "RCC ou PEINTURE":
Comme ceci je peux supprimer un "txtdate" et un bouton valider.
Encore une petite chose qui pourrait bien être utile s'est lorsque je valide en cliquant sur le bouton NC REJECT indication "REJECT" cela devrait indiquer dans le genre de NC de la feuille Excel et de même sur le bouton valider dans l'Userform "Choix" l'indication "REWORK" devrait dans la cellule Excel être indiquée.
Je joints mon classeur pour que vous ayez un aperçu des mes demandes.
Dans l'attente de vos réponses et je vous remercie d'avance de votre aide.
Stéphane
Bonjour,
Tu veux mettre la date du jour dans une TextBox, au format "dd-mmm-yy". Tu utilises la fonction Format lors de l'affectation à la TextBox...
Attention, ne pas oublier que dans tous les cas une TextBox contient une valeur texte et non une donnée de type Date. Ce pourquoi, il convient de convertir en date lors de l'affectation à une cellule... Mais s'agissant de la date du jour, l'affectation à une cellule peut se faire directement, sans avoir à la prélever dans une TextBox.
Cordialement.
Bonjour MFerrand,
Oui c'est bien ce que je veux faire pour la cellule (A), mais pour les deux autres txtbox (txtdate1 et txtdate2) qui pour l'instant sont en date VBA ce qui signifie qu'ils ont la date du jour mais ce que j'aimerais pouvoir faire, c'est indiquer une autre date que la date du jour car dans la cellule excel qui est au format dd-mmm-yyyy et il y a une MFC, et pour le moment cela ne fonctionne pas.
Et pour les autres question as-tu une solutions.
Cordialement
Stéphane
Je ne comprends pas bien ce que tu veux dire.
Tu peux modifier ce format (format de cellule) pour que la date soit présentée autrement. De même, tu peux taper un nombre positif quelconque, puis appliquer à la cellule un format de date, tu verras une date dans la cellule selon le format que tu auras mis.
VBA réagit globalement de la même façon (avec un champ plus large de reconnaissance des dates, les nombres dates sont communs avec Excel à partir du 1er mars 1900), mais contrairement à Excel qui identifie les expressions littérales de date en fonction des paramètres régionaux uniquement, VBA les reconnaît en fonction d'un format américain d'abord, et ne se réfère aux paramètres régionaux que si l'on use de fonctions telles que CDate ou DateValue (ce qui contraint à user de conversion lors de l'affectation d'une date avec VBA, pour qu'elle soit identifiée à partir des paramètres régionaux, et ne risque pas d'être modifiée par VBA [inversion mois/jour possible qui est le problème récurrent en la matière]).
Et ces divers phénomènes ne se produisent lorsqu'une date est insérée dans une TextBox, justement parce que dans le contrôle il n'y a pas une donnée date, mais une expression texte. Expression qui sera interprétée comme date par VBA chaque fois que tu la manipules, s'il le peut... Si tu veux que la date se présente sous un format particulier, qu'il s'agisse de la date du jour ou d'une autre, tu la formates en utilisant Format, mais tu ne perds pas de vue que tu insères un texte dans ta TextBox dans tous les cas...
Bonjour MFerrand
J'ai bien compris le système, mais as-tu regardé le classeur qui est en pièces jointe. Cela pourra d'aider à comprendre le résultat qui j'aimerai avoir.
Cordialement
Stéphane
Prenons ton Userform Choix.
Il ne te sert qu'à mettre la date du jour en K4 ou M4 (après insertion de ligne) selon l'option cochée.
Donc : les deux cases d'option et un bouton Valider suffisent pour cette opération, et tout le reste est inutile...
Et de grâce, pas de sélection parasite ! VBA exécute sans avoir besoin d'y toucher
Une seule procédure de validation est nécessaire...
Renommer les boutons d'options avec un numéro d'ordre pour pouvoir les utiliser dans une boucle.
Vérifier qu'un des boutons a bien été coché.
Private Sub btnValider_Click()
Dim cel$, i%
For i = 1 To 2
If Controls("opt" & i).Value Then cel = Chr(73 + i * 2) & 4
Next i
If cel <> "" Then
With Worksheets("NC")
.Rows(4).Insert
.Range(cel) = Date
End With
Else
MsgBox "Cocher une option !", vbInformation, "Choix d'option"
End If
End SubSi l'on a oublier de cocher, message et rien ne se passe.
Sinon une ligne sera insérée et la date sera affectée en K ou M selon choix.
Elle apparaîtra selon le format de cellule.
Le format n'a aucune incidence sur les MFC (les conditions de MFC portent sur des valeurs !)
Bonjour MFerrand,
Je voudrais déjà te remercier pour ton code, c'est exactement ce que je voulais.
Mais je juste un petit soucis avec.
En effet, les données que saisis dans pour premier UserForm ne sont pas reprises et j'ai toujours deux cellules qui sont grisées même si j'insère une ligne manuellement. Et lorsque je saisi une NC REJECT cela ne change pas non plus.
Cordialement
Stéphane
Je ne comprends pas bien il est vrai, le pourquoi de deux Userforms...
Explique ce que tu veux obtenir, et quelles sont les saisies obligatoires pour valider un enregistrement.
Bonjour,
Le premier UserForm me sert de formulaire de saisie pour toutes les NC que je dois traiter.
Les textebox : date, MSN, NC, REFERENCE, DESIGNATION, OF, COMMENTAIRE doivent être repris soit sur NC REJECT et dans la cellule GENRE DE NC, il faut que "REJECT" s'inscrive lorsque je clique sur le bouton "NC REJECT".
Le second UserForm me sert à compléter soit la cellule "Amené au RCC" ou compléter la cellule "Amener à la Peinture" en fonction du bouton option comme tu as fait sur ton code tout en reprenant la saisie du premier UserForm "Formulaire de Saisie et que dans la cellule "GENRE DE NC" il faut que cela indique "REWORK".
Dans la première cellule à savoir "A4" il faut la date du jour, car cela représente la date de saisie de la nouvelle NC.
Mais il y à des MFC dans plusieurs cellules. En effets lors j'indique une date dans la cellule "RETOUR FAIT LE" cela me mets toute la ligne en vert mais avant cela lorsque je mets un "X" dans la cellule "SERVI" la ligne est orange de la cellule "A4 à H4 et les cellules K4 à N4 sont grisées lors dans le "GENRE DE NC il y est indiqué "REJECT".
Et comme je te l'ai déjà indiqué lorsqu'il y a une date dans la cellule "AMENE AU RCC" ou AMENE A LA PEINTURE" les cellules H4 et I4 sont à leur tour grisée.
Mes explications te sont-elles compréhensibles cette fois.
Cordialement
Stéphane
Pas complètement ! Il me semble comprendre que le Userform1 permet de faire une saisie que tu valides avec Reject, ce qui introduit une ligne.
Le même Userform te permet de la modifier (?) en utilisant le bouton Rework, lequel ouvre le Userform2 que l'on a déjà vu... mais ce Userform aboutissant à l'insertion d'une nouvelle ligne, ce n'est plus une modif. c'est un nouvel enregistrement !
Il faudrait me lever cette ambiguïté.
Les MFC, c'est à voir ensuite. Il faut d'abord régler la procédure (et elle peut de toute façon se régler avec un seul Userform).
Bonjour,
En attendant que tu répondes aux questions, j'ai opté pour l'inscription d'une ligne distincte selon qu'on use du Reject ou du Rework. Cette hypothèse est donc à confirmer (ou non !) ?
Et j'ai entrepris la réadaptation du Userform (assorti de la suppression du userform Choix).
- Substitution d'une CheckBox à l'étitquette NOUVELLE NC, cochée par défaut à l'ouverture.
- Ajout des Boutons d'option (antérieurement sur userform Choix), décochés par défaut à l'ouverture.
- Parallèlement, le bouton Rework est inactif à l'ouverture, et le bouton Reject actif.
Lorsqu'on coche une option, cela entraîne : décochage de la CheckBox, bouton Reject inactif, bouton Rework actif.
Si on recoche la CheckBox : décochage des deux options, bouton Rework inactif, bouton Reject actif.
J'ai aussi supprimé la zone de texte groupée avec ton rectangle, et mis le texte dans le rectangle (on le peut !), ce qui évite des complications...
Les procédures paraissent semblables en ce qui concerne l'affectation (une date en plus pour Rework). A me confirmer.
J'aimerais également savoir les vérifications à opérer lors de validation : saisies obligatoires ou non, types de données saisies... et également si des éléments significatifs interviennent pour différencier des données sur les mêmes champs selon qu'on est en Reject ou en Rework ?
En dernier lieu, pour ce qui est des MFC : un résumé exhaustif de ce qui doit être appliqué serait fort utile pour pouvoir y remettre de l'ordre !
Cordialement.
Bonjour MFerrand,
Je te remercie et me réjouis de voir les solutions que tu as faites.
Juste une petite chose comme je ne savais pas comment faire pour pouvoir insérer une ligne en fonction des MFC j'ai masqué la troisième ligne afin que les lignes qui je rajoutais prennent les MFC.
Pour les MFC :
1 - J'ai rajouté un colonne "Attente de Serviture" lorsque j'inscris la date la cellule passe au rouge avec une écriture en blanc et en gras. (Dans le classeur qui j'ai sur le lieu de mon travail et que je n'ai pas fait sur le fichier qui est en PJ).
2 - Lorsque je mets un "X" dans la cellule "SERVI" les cellules de "A" à "I" passent à l'orange.
3 - Et lorsque je indique la date dans la cellule "Retour fait le" toute la ligne passe en vert.
3 - Lorsque c'est une NE REJECT cela doit griser les cellules "Amené au RCC" - "Retour du RCC" - "Amené à la Peinture" et "Retour de la Peinture".
4 - Lorsqu'il s'agit une NC REWORK il faut que les cellules "SERVI" et "Retour Fait le" doivent à leur tour être grisées.
5 - lorsqu'il s'agit une "NC REWORK" qui va au "RCC" la ligne passe en jaune avec l'écriture en gras.
6 - Et lorsqu'il s'agit une "NC REWORK" qui va en "PEINTURE", la ligne passe en violet écriture blanche et grasse
Encore merci pour ton aide.
Cordialement
Stéphane
Bonjour,
Juste une petite chose comme je ne savais pas comment faire pour pouvoir insérer une ligne en fonction des MFC j'ai masqué la troisième ligne afin que les lignes qui je rajoutais prennent les MFC.
Tu avais raison de procéder ainsi : une ligne insérée prend par défaut les formats de la ligne qui précède...
Tu n'as toutefois pas répondu aux autres questions... A voir dans le fichier...
Cordialement.
Bonjour MFerrand
Je te remercie de ce que tu as fait car c'est exactement ce dont j'avais besoin.
Et je constate que tu n'as pas eu besoin d'attendre ma réponse pour savoir ce qu'il fallait dans les champs de saisies.
Encore un grand merci pour ton aide
Cordialement
Stéphane
J'ai fait selon les probabilités !
Il faudra surveiller tes MFC en cas de suppressions de lignes. Il y a toujours un risque qu'elle se fractionnent. Cela ne s'est pas produit dans mes essais mais il y a toujours un risque.
Dans ce cas, le mieux serait de les rétablir par une proc. VBA... J'ai renoncé à la faire à l'avance, tant que le problème ne se pose pas, car vu tes mises en forme c'était un peu long à écrire...
Cordialement.