Microsoft 365 vba format date et N° automatique

974RE

XLDnaute Occasionnel
Bonsoir le forum,
Une fois de plus je fais appel à vous.
Je rencontre 2 problèmes que je n'arrive pas à résoudre:
1° Sur mes USF Visualiser et Modifier, mes textBox Heures ne s'affiche pas au format hh:mm bien que j'ai précisé ce format.
2° je n'arrive pas à l'ouverture de l'USF Devis à ce qu'il me donne automatiquement le N° Suivant qui devrait être 2021-002 puis au prochain devis 2021-003...
Auriez-vous la gentillesse de bien vouloir m'aider s'il vous plaît.
Je sais pouvoir compter sur votre aide.
Merci d'avance!
 

Pièces jointes

  • Essai CL1 Copie.xlsm
    182.4 KB · Affichages: 182
Solution
Bonjour 974RE, Yeahou, le fil,

tu as écrit : « Je crois que Soan à raison, aujourd'hui je coupe: plage, déjeuner les pieds dans l'eau, sieste et......je reprends! »

quoi ? t'as déjà fini d'faire trempette ? 😱 ben t'as pas nagé bien longtemps, dis donc ! tu pourras jamais rattraper Laure Manaudou si tu t'entraînes aussi peu ! 😁 😄 😂 bon, t'as d'la chance, regarde, elle t'attend :

Regarde la pièce jointe 1100325



tu as aussi écrit : « Je vais de ce pas décortiquer tes codes. » ; ben ça non plus ça t'a pas pris bien longtemps ! moi qui croyais qu'on t'reverrai plus avant un mois ou deux ! 😁 🤣 🤣 🤣 bon, c'est vrai qu'mes codes sont très faciles à comprendre, et en plus c'est comme les crêpes : c'est bien plus...​

974RE

XLDnaute Occasionnel
re

c'est tout bonnement impossible

le numero s'incrémente a l'ouverture du formulaire

il n'y a pas plusieurs façons de procéder il y a les bonnes et les mauvaises

demo
Regarde la pièce jointe 1096749
Je ne comprends pas, j'ai revérifié les lignes de codes, ArchiveDevis Sub, tout me semble correct, mais chez-moi, le N° reste à 2021-001. Je te transmets le fichier, si tu veux bien y jeter un oeil . Merci
Désolé !!!
 

Pièces jointes

  • Essai CL du 25 Février 2021.xlsm
    216.3 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
pas de soucis
demo7.gif
 

974RE

XLDnaute Occasionnel
Je vois bien sur ta démo que cela fonctionne, mais je t'assure que chez moi je n'ai pas le même résultat et je ne comprends pas pourquoi????
Lorsque j'ouvre de nouveau l'USF Devis, il m'affiche systématiquement 2021-001. Pour le reste cela marche .
Je dois avoir une erreur, mais je ne la trouve pas. Mon cas est probablement désespéré et désespérant! Pardon pour la prise de tête!!!!!
 

patricktoulon

XLDnaute Barbatruc
bonsoir
j'ai tout regarder ton userform devis et il n'y a rien qui cloche
VB:
Option Explicit
Dim Ws As Worksheet
Dim SelectedIndex As Integer
Private Sub Montant_HT_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Montant_HT = CDbl(Qté.Text) * CDbl(PrixUnité.Text)
    Montant_HT = Format(Montant_HT.Value, "0€")
End Sub

Private Sub TexBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox6 = Format(TextBox6.Value, "000")
End Sub

Private Sub PrixUnité_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    PrixUnité = Format(Me.PrixUnité.Value, "0€")
End Sub
Private Sub UserForm_Initialize()
    Dim Lst, Lst2
    Jour = Date
    Set Lst = ThisWorkbook.Worksheets("Client").ListObjects(1)    ' ca c'est ton tableau structuré client
    ComboBox1.List = Lst.DataBodyRange.Columns(3).Value    ' la combo.list  prend la colonnes 3 du tableau

    Désignation.List = Sheets("Prestation").Range("ListForfaits").Value

    Set Lst2 = ThisWorkbook.Worksheets("Archive Devis").ListObjects(1)    ' ca c'est ton tableau structuré Archive Devis
    TextBox6 = Year(Date) & "-" & Format(Lst2.ListRows.Count + 1, "000")    'si le tableau n'est pas vide

End Sub

Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Ligne = Me.ComboBox1.ListIndex + 2    'pour faire correspondre l'index du nom sélectionné avec son numéro de ligne dans la feuille Excel

    With Sheets("Client")
        ComboBox2 = .Range("B" & Ligne)
        NOM = .Range("C" & Ligne)
        ADRESSE = .Range("D" & Ligne)
        ComboBox3 = .Range("F" & Ligne)
        TextBox1 = .Range("I" & Ligne)
    End With

End Sub

Private Sub Désignation_Change()
    Dim Ligne As Long
    'Ligne = Me.Désignation.ListIndex + 2 'pour faire correspondre l'index du nom sélectionné avec son numéro de ligne dans la feuille Excel
    '
    'With Sheets("Prestation")
    ''on peut remplir les champs tels que enregistrés dans la feuille
    '
    '
    '
    '    End With
    Me.PrixUnité = Me.Désignation.Column(1)

End Sub

Private Sub Estimatif_Click():    Estimatif_Coût.Show: End Sub



Private Sub ajouter_Click()
    Dim lr As ListRow, Ligne&, lig As Integer, tablo:
    Ligne = 2

    With Sheets("Devis")
        .Cells(Ligne + 2, "B") = TextBox6
        .Cells(Ligne, "C") = Jour
        .Cells(Ligne + 4, "C") = NOM
        .Cells(Ligne + 5, "C") = ADRESSE
        .Cells(Ligne + 6, "C") = CP & " " & ComboBox3
        .Cells(Ligne + 9, "B") = TextBox1
        .Cells(Ligne + 12, "A") = PriseEnCharge
        .Cells(Ligne + 14, "A") = Trajet
        .Cells(Ligne + 16, "A") = FinCourse

        With .ListObjects("Devis")
            With .ListRows.Add()
                If Désignation.ListIndex > -1 Then .Range(1, 1) = Désignation.Value
                If IsNumeric(Qté.Text) Then .Range(1, 2) = CDbl(Qté.Text)
                If IsNumeric(PrixUnité.Text) Then .Range(1, 3) = CDbl(PrixUnité.Text)
                If IsNumeric(Montant_HT) Then .Range(1, 4) = CDbl(Montant_HT.Text)
            End With
        End With
    
    End With
End Sub
Private Sub ArchiveDevis_Click()
    Dim A
    With Sheets("Archive Devis").ListObjects(1).ListRows.Add()
        A = Array(TextBox6.Value, Jour.Value, , NOM.Value, ADRESSE.Value, CP & " " & ComboBox3.Value, TextBox1.Value, _
                  Désignation.Value, CDbl(Qté.Text), CDbl(PrixUnité.Text), Int(CDbl(PrixUnité.Text) * CDbl(Qté.Text)), _
                  PriseEnCharge.Text, Trajet.Text, FinCourse.Text, "")
        
        .Range.Resize(, UBound(A) + 1).Value = A
    End With
End Sub

Private Sub Cp_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Me.CP.Value = Format(Me.CP.Value, "00 000 ")
End Sub
Private Sub QUITTER_Click()
    Dim sh As Worksheet: Set sh = Worksheets("Devis")
    With sh.ListObjects("Devis")
        If Not .DataBodyRange Is Nothing Then
            If MsgBox("Êtes-vous certain de vouloir vider le tableau ?", _
                      vbYesNo, "Demande de confirmation") = vbYes Then
                .DataBodyRange.Delete
                sh.Range("C6, C7, C8, B11, A14, A16, A18") = ""
            End If
        End If
    End With
    Unload Me: Accueil.Show 0
End Sub

Private Sub ComboBox3_Change()
    Me.CP.Value = Format(Me.ComboBox3.Column(1), "00 000")
End Sub

Private Sub cancel_Click()
    ActiveCell = TextBox1.Value
    Unload Me
End Sub

Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Calendar.Affiche Me, Me.TextBox1.Name, ActiveControl.Name
    Cancel = True
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Me.TextBox1.Value = Format(Me.TextBox1.Value, "dddd d mmmm yyyy ")
End Sub
peut être voir si tes cellules ne sont pas verrouillée ou protégée ou une validation quelconque
 

974RE

XLDnaute Occasionnel
bonsoir
j'ai tout regarder ton userform devis et il n'y a rien qui cloche
VB:
Option Explicit
Dim Ws As Worksheet
Dim SelectedIndex As Integer
Private Sub Montant_HT_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Montant_HT = CDbl(Qté.Text) * CDbl(PrixUnité.Text)
    Montant_HT = Format(Montant_HT.Value, "0€")
End Sub

Private Sub TexBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox6 = Format(TextBox6.Value, "000")
End Sub

Private Sub PrixUnité_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    PrixUnité = Format(Me.PrixUnité.Value, "0€")
End Sub
Private Sub UserForm_Initialize()
    Dim Lst, Lst2
    Jour = Date
    Set Lst = ThisWorkbook.Worksheets("Client").ListObjects(1)    ' ca c'est ton tableau structuré client
    ComboBox1.List = Lst.DataBodyRange.Columns(3).Value    ' la combo.list  prend la colonnes 3 du tableau

    Désignation.List = Sheets("Prestation").Range("ListForfaits").Value

    Set Lst2 = ThisWorkbook.Worksheets("Archive Devis").ListObjects(1)    ' ca c'est ton tableau structuré Archive Devis
    TextBox6 = Year(Date) & "-" & Format(Lst2.ListRows.Count + 1, "000")    'si le tableau n'est pas vide

End Sub

Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Ligne = Me.ComboBox1.ListIndex + 2    'pour faire correspondre l'index du nom sélectionné avec son numéro de ligne dans la feuille Excel

    With Sheets("Client")
        ComboBox2 = .Range("B" & Ligne)
        NOM = .Range("C" & Ligne)
        ADRESSE = .Range("D" & Ligne)
        ComboBox3 = .Range("F" & Ligne)
        TextBox1 = .Range("I" & Ligne)
    End With

End Sub

Private Sub Désignation_Change()
    Dim Ligne As Long
    'Ligne = Me.Désignation.ListIndex + 2 'pour faire correspondre l'index du nom sélectionné avec son numéro de ligne dans la feuille Excel
    '
    'With Sheets("Prestation")
    ''on peut remplir les champs tels que enregistrés dans la feuille
    '
    '
    '
    '    End With
    Me.PrixUnité = Me.Désignation.Column(1)

End Sub

Private Sub Estimatif_Click():    Estimatif_Coût.Show: End Sub



Private Sub ajouter_Click()
    Dim lr As ListRow, Ligne&, lig As Integer, tablo:
    Ligne = 2

    With Sheets("Devis")
        .Cells(Ligne + 2, "B") = TextBox6
        .Cells(Ligne, "C") = Jour
        .Cells(Ligne + 4, "C") = NOM
        .Cells(Ligne + 5, "C") = ADRESSE
        .Cells(Ligne + 6, "C") = CP & " " & ComboBox3
        .Cells(Ligne + 9, "B") = TextBox1
        .Cells(Ligne + 12, "A") = PriseEnCharge
        .Cells(Ligne + 14, "A") = Trajet
        .Cells(Ligne + 16, "A") = FinCourse

        With .ListObjects("Devis")
            With .ListRows.Add()
                If Désignation.ListIndex > -1 Then .Range(1, 1) = Désignation.Value
                If IsNumeric(Qté.Text) Then .Range(1, 2) = CDbl(Qté.Text)
                If IsNumeric(PrixUnité.Text) Then .Range(1, 3) = CDbl(PrixUnité.Text)
                If IsNumeric(Montant_HT) Then .Range(1, 4) = CDbl(Montant_HT.Text)
            End With
        End With
   
    End With
End Sub
Private Sub ArchiveDevis_Click()
    Dim A
    With Sheets("Archive Devis").ListObjects(1).ListRows.Add()
        A = Array(TextBox6.Value, Jour.Value, , NOM.Value, ADRESSE.Value, CP & " " & ComboBox3.Value, TextBox1.Value, _
                  Désignation.Value, CDbl(Qté.Text), CDbl(PrixUnité.Text), Int(CDbl(PrixUnité.Text) * CDbl(Qté.Text)), _
                  PriseEnCharge.Text, Trajet.Text, FinCourse.Text, "")
       
        .Range.Resize(, UBound(A) + 1).Value = A
    End With
End Sub

Private Sub Cp_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Me.CP.Value = Format(Me.CP.Value, "00 000 ")
End Sub
Private Sub QUITTER_Click()
    Dim sh As Worksheet: Set sh = Worksheets("Devis")
    With sh.ListObjects("Devis")
        If Not .DataBodyRange Is Nothing Then
            If MsgBox("Êtes-vous certain de vouloir vider le tableau ?", _
                      vbYesNo, "Demande de confirmation") = vbYes Then
                .DataBodyRange.Delete
                sh.Range("C6, C7, C8, B11, A14, A16, A18") = ""
            End If
        End If
    End With
    Unload Me: Accueil.Show 0
End Sub

Private Sub ComboBox3_Change()
    Me.CP.Value = Format(Me.ComboBox3.Column(1), "00 000")
End Sub

Private Sub cancel_Click()
    ActiveCell = TextBox1.Value
    Unload Me
End Sub

Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Calendar.Affiche Me, Me.TextBox1.Name, ActiveControl.Name
    Cancel = True
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Me.TextBox1.Value = Format(Me.TextBox1.Value, "dddd d mmmm yyyy ")
End Sub
peut être voir si tes cellules ne sont pas verrouillée ou protégée ou une validation quelconque
Patrick bonjour,
Merci d'avoir pris le temps de tout vérifier.
Je vais de nouveau baléyer tout ça et voir si je trouve.
Je te ferais un retour.
Merci encore. Bonne journée.
 

974RE

XLDnaute Occasionnel
Patrick bonjour,
Merci d'avoir pris le temps de tout vérifier.
Je vais de nouveau baléyer tout ça et voir si je trouve.
Je te ferais un retour.
Merci encore. Bonne journée.
Re bonjour,
Euréka!!!!! Ca marche super bien. Tu vois c'est gagné!
J'étais convaincu qu'avec votre savoir j'y serais arrivé à faire fonctionner ce truc.
Je ne sais toujours pas ou était le problème, mais je vais chercher, histoire de ne pas mourir idiot.
Comment j'ai fait, j'ai tout bonnement effacé les codes et j'ai recopié ton code que tu a eu la gentillesse de me communiquer.
En tout cas, chapeau bas pour l'investissement et la compréhension dont vous faîtes preuve sur ce forum.
Lorsque j'aurais terminé mon projet, je le posterais, cela pourra peut-être servir à d'autres.
Je risque certainement de devoir faire de nouveau appel à votre savoir, parce que je n'ai fini ce projet.
Merci, merci, merci et à bientôt.
 

974RE

XLDnaute Occasionnel
Je me permets de te solliciter à nouveau pour un autre problème:
Comme tu a pu le voir, dans l'USF Devis, j'ai un bouton rouge Estimatif qui me permet de renseigner un tableau dans la feuille "Prestation" . Le tableau "ListForfaits" récupère les montants du tableau précédent et devient mon PU dans l'USF "Devis" ListObjects("Devis"). La TextBox PrixUnité récupère donc le montant du Tableau "ListForfaits"). Cette opération se fait avant de saisir la désignation, la quantité. Or, lorsque j'active cet USF, je rentre les données, je quitte l'USF "Estimatif", je saisi la désignation, le PU ne prend pas le nouveau montant. Il affiche le montant du devis précédent. En un mot, il ne se met pas à jour. Comment lui dire de se mettre à jour pour qu'il rapatrie le montant correct?
Merci pour ton aide.
 

patricktoulon

XLDnaute Barbatruc
Bonjour
je pense que c'est juste un variable qui n'est pas communiqué d'un usf à l'autre
il faudrait lui mettre des variable public a ce userform estimatif on pourrait y avoir accès a partir de usf devis
ou carrément injecter a partir de l'usf estimatif la valeur dans le usf devis
bref des solutions il y a faut voir le contexte
 

soan

XLDnaute Barbatruc
Inactif
Bonjour 974RE, patrick,

réponse à ton post #19 uniquement (je verrai peut-être la suite plus tard).

légende des couleurs que j'utilise dans ce post :

* marron clair pour les noms des USF (UserForm)
* violet pour les noms des feuilles de calcul, et pour les titres des fenêtres des USF
* vert pour les boutons de commande
* bleu clair pour les noms de subs, les raccourcis clavier, et les données (des cellules et des USF)
* orange pour les références de cellules
* rouge pour le PU (et son endroit)



ton post #19 n'est vraiment pas clair du tout ! 😭

« après avoir activé l'USF pour entrer les données "KM ..." » : tu n'as pas précisé le nom du USF ! mais après vérif, ça a tout l'air d'être le USF Estimatif_Coût ; pour simplifier ce post, je vais l'appeler : l'USF Estimatif.

« je rentre les données dans le tableau (Désignation, Qté Prix Unitaire) » : tu n'as pas précisé le nom de la feuille de calcul ! après vérif, ça a tout l'air d'être la feuille "Prestation".

« le prix unitaire qui est rapatrié n'a rien à voir avec les données saisies avec l'USF Estimatif qui ont été intégrées dans le tableau "ListForfaits" de la feuille Prestation. » : le
PU qui est rapatrié ? de à ? :eek:



à l'ouverture du fichier joint en fin de post, le USF Accueil est affiché (fenêtre avec le titre "Menu") ; note qu'en arrière-plan, c'est la feuille "Devis" ; clique sur le bouton "Fermer" ; j'ai ajouté une sub ShowMenu() pour pouvoir l'ouvrir facilement de nouveau : fais Ctrl m (m pour menu).

clique sur le bouton "Devis" ➯ ça affiche le USF Devis ; juste pour info : N° Devis = 2021-003 ; Date = 26/02/21 ; toutes les autres TextBox sont vides.

clique sur le bouton "Estimatif" ➯ ça affiche le USF Estimatif (titre "Estimatif des Coûts") ; note qu'en arrière-plan, c'est maintenant la feuille "Prestation" (Total 504 et Total MG en D9 et D10 = 1 053 € ; en B13 et B14 : idem : 1 053 € ; ne te préoccupe pas si ces données sont fausses : laisse-les telles quelles car c'est juste pour la démo : dans le paragraphe suivant, tu pourras voir que ces données vont changer selon les données saisies dans le USF Estimatif).

dans l'USF Estimatif, il y a 4 données à saisir : Km ; Temps de travail ; Remise ; Panier Confort ; saisis respectivement 150 ; 10 ; 10 ; 1 ; clique sur le bouton "Valider" ➯ ces 4 données sont écrites sur la feuille "Prestation", en B3 ; B4 ; B6 ; B7 ➯ Total 504 et Total MG en D9 et D10 = 737 € ; en B13 et B14 : idem : 737 € ; bien noter que le PU de C3 (2,58 €) n'est aucunement modifié par le USF Estimatif, car selon le long détail de mon post #21, C3 est complètement indépendant des 4 données de B3 ; B4 ; B6 ; B7 !

clique sur le bouton "Retour Devis" ➯ ça retourne sur l'USF Devis ; note qu'en arrière-plan, c'est de nouveau la feuille "Devis" ; sur l'USF Devis, le PU est : 2,58 ; est-ce bien cela que tu voulais ? si oui : OK ! sinon : tu dois mieux expliquer ce que tu veux ! :rolleyes: en précisant les noms des USF, les noms des feuilles de calcul, les références des cellules, les noms des données et leurs valeurs, ainsi que le déroulement successif de ce que tu fais ! c'est-à-dire quelle est au juste la procédure que tu suis ?

mais ça sera peut-être plus la peine si j'ai réussi à faire ce que tu veux, malgré tes imprécisions ! 😁 😜

soan
 

Pièces jointes

  • Essai CL1.xlsm
    183.7 KB · Affichages: 5

974RE

XLDnaute Occasionnel
Merci de m'aider.
Je suis sur devis, à laide de la combobox1 (Recherche), je charge le client et toutes ses données qui se trouve sur la feuille "Client". C'est à ce moment là que j'active le bouton "Estimatif" qui ouvre l'USF "Estimatif_Coût" .
Je saisi dans cet USF les données qui alimentent le premier tableau de la Feuille "Prestation (Qté Km, Qté Temps de travail, Remise, QtéPanier confort). Les calculs se font et se répercutent sur le deuxième tableau "ListForfaits" qui se trouve juste en dessous. Je ferme l'USF "Estimatif_Coût". et je suis de nouveau sur l'USF Devis.
C'est à ce moment là que je saisi la désignation dans le tableau à l'aide de la ComboBox "Désigation" qui va cherché les données dans le tableau "ListForfaits" de la Feuille Prestation. Normalement il n'y a que la Qté que je saisie manuellement. Le PU doit normalement s'afficher dès la saisie de la Désignation. Or, ce qui se passe, c'est qu'il ne prend pas le nouveau mont qui a été généré par l'USF "Estimatif". Il affiche le montant existant avant les changements via l'USF.
J'espère ne pas avoir été trop brouillon dans mes explication.
Avec toute ma gratitude.
 

Discussions similaires

Réponses
12
Affichages
282

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 838
dernier inscrit
Christelle.B86