Aide formulaire de saisie VBA

Hello Dan,

Je rencontre un petit problème. Lorsque j'entre une date dans mon formulaire sur le mois de décembre entre le 1 et le 12 décembre, dans mon tableau (date de la facture) il m'inverse le mois et le jour

image

Et comme on peut le constater c'est bien sur le bon chrono B-23-12-7

Bonjour

Ah.... ces dates avec excel !

Vous devez modifier deux codes :

1. Code Private Sub CommandButton2_Click()
A. Remplacez la ligne

 .Item(lig, 2) = TextBox1.Value 'Date

par cette ligne

 .Item(lig, 2) = CDate(TextBox1.Value) 'Date

B. Ajoutez cette ligne juste en dessous de la précédente

.Item(lig, 2).NumberFormat = "dd/mm/yyyy"

2. Code Private Sub incrementer() : dans la boucle DO, il faut rajouter CDATE. Modifiez la ligne comme ceci

If Month(CDate(TextBox1.Value)) = Month(c) and .......

Crdlt

Merci ça fonctionne parfaitement

Bonjour Dan, bonjour la team excel-pratique

Je me permets de redéterrer ce sujet de Forum pour une petite question que je me pose ou que peut-être quelqu'un se poserait.

J'ai essayé de voir de mon côté mais en vain :(

Qu'elle serait la formule à appliquer si je souhaite que mon numéro d'enregistrement ex :"B-23-09-14" ne se fasse qu'uniquement en fonction de la date de saisie et non plus en fonction de la date de la facture afin d'avoir un chrono d'enregistrement en fonction du nombre de factures enregistrées au mois.

Donc peu importe la date de la facture celle-ci s'enregistrera au mois en cours alors qu'actuellement elle s'enregistrait au mois de la facture et en chaine.

Merci à vous

Cordialement

Bonjour

Qu'elle serait la formule à appliquer si je souhaite que mon numéro d'enregistrement ex :"B-23-09-14" ne se fasse qu'uniquement en fonction de la date de saisie et non plus en fonction de la date de la facture afin d'avoir un chrono d'enregistrement en fonction du nombre de factures enregistrées au mois.

deux questions :
- la date de saisie, on la trouve où dans l'userform ?
- que se passe-t-il si vous faites deux facture le même jour ?

Edit :

En revoyant votre userform, on peut prendre la date du jour où vous ciquez sur Valider
Essayez en modifiant cette ligne dans le code Private Sub CommandButton2_Click()

.Item(lig, 1) = "B-" & Right(Year(Now), 2) & "-" & Format(Month(Now), "00") & "-" & i

Ici vous n'avez pas le jour. Le résultat est identique. Si par exemple vous mettez votre date de facture au 14/08/2023 et que vous valider aujourd'hui, le num d'enregistrement sera B-23-09-1.
SI vous faites une deuxième facture, vous aurez B-23-09-2
Si vous faites plus de 10 facture par mois on peut aussi remplacer la ligne par ceci pour avoir deux chiffres à la fin du numéro d'enregsitrement

.Item(lig, 1) = "B-" & Right(Year(Now), 2) & "-" & Format(Month(Now), "00") & "-" & format(i, "00")

Wow merci pour cette rapidité de réponse Dan!

J'ai appliqué la petite modification.

Par ailleurs, cela prend bien le mois en cours mais je ne sais pas pourquoi le numéro séquentiel quand à lui ne démarre pas à zéro alors que je n'ai rien d'enregistré pour ce mois de septembre.

Il me fait cela :

image

(j'ai appliqué la seconde ligne mentionnée)

Penses-tu que le numéro séquentiel suit toujours le mois de saisie de la facture au lieu de démarrer zéro chaque mois ?

Cordialement

Par ailleurs, cela prend bien le mois en cours mais je ne sais pas pourquoi le numéro séquentiel quand à lui ne démarre pas à zéro alors que je n'ai rien d'enregistré pour ce mois de septembre.

A essayer
- Allez dans la Sub incrementer
- remplacez les 3 Textbox1.value par NOW

Merci Dan pour ta réponse,

Il me communique le même numéro séquentiel cette fois-ci

image

Merci

Bah non je n'ai pas cela sur votre fichier

Vous avez dû faire une erreur quelque part.
Dans la sub Incrementer, vérifiez cette ligne

If Month(CDate(Now)) = Month(c) And Year(Now) = Year(c) Then i = i + 1

Voici ce que j'ai :

Private Sub incrementer()
Dim c As Range
Dim prem As String

i = 1
With Worksheets("FACTURATION").ListObjects(1).ListColumns(2).DataBodyRange
    Set c = .Find(Month(CDate(Now)), LookIn:=xlValues)
        If Not c Is Nothing Then
            prem = c.Address
            Do
                If Month(CDate(Now)) = Month(c) And Year(Now) = Year(c) Then i = i + 1
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And prem <> c.Address
        End If
    End With

End Sub

C'est bon cela.

Au dessus de tous les codes en dessous de Option explicit vous avez bien la déclaration "Dim i as byte" ?


Edit : Ah oui je viens de voir le souci.
En fait dans le code Incrémenter on se servait de la colonne 2 du tableau pour attribuer le numéro. Avec votre demande il faut revoir tout

Oui j'ai bien le Dim i as byte.

Ah donc il s'agit de ma colonne "date de la facture" qui perturbe la ligne de texte ?

C'est uniquement le Private Sub incrémenter qu'il faut modifier ?

Encore merci pour tes réponses Dan

Ok
Remplacez toute la sub Incrementer par celle ci-dessous. Cela devrait fonctionner

Private Sub incrementer()
Dim c As Range
Dim prem As String, ref As String

i = 1
With Worksheets("FACTURATION").ListObjects(1).ListColumns(1).DataBodyRange
    ref = "B-" & Right(Year(Now), 2) & "-" & Format(Month(Now), "00")
    Set c = .Find(ref, LookIn:=xlValues)
    If Not c Is Nothing Then
        prem = c.Address
        Do
            If c Like ref & "*" Then i = i + 1
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And prem <> c.Address
    End If
End With
End Sub

Faite un test

Ca fonctionne parfaitement ! Ca fait vraiment plaisir que vous preniez le temps de répondre et trouver une solution à chaque demande et en soulignant votre réactivité.

Mille mercis

Rechercher des sujets similaires à "aide formulaire saisie vba"