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
ok, j'en prends note. :)

soan
Soan, je reviens vers toi sur ce fil car je viens de constater que l'USF Facture ne fonctionnement pas. Lors de la sélection de l'un des devis sans facture, le nouveau numéro de la facture reste vide???? et le bouton valider ne fonctionne pas! Impossible donc de faire une nouvelle facture!
Pourrais-tu y jeter un œil et voir pourquoi cela ne fonctionne pas.
Merci à toi.
 

soan

XLDnaute Barbatruc
Inactif
Bonjour 974RE,

ce post est à partir du fichier "Essai CL9 (4).xlsm".

1) sur la feuille "A.DV", y'a les 6 devis "DEV2021-001" à "DEV2021-6" ; sur le USF "Facturation", quand tu sélectionnes "⦿ Tous les devis", ils sont tous affichés : ok.

2) sur la feuille "A.Fact", y'a une seule facture "FACT2021-001", qui est pour le devis "DEV2021-001"

3) dans le USF "Facturation", après avoir sélectionné "⦿ Tous les devis", sélectionne maint'nant le 1er devis "DEV2021-001" ➯ N° Devis : DEV2021-001 et Facture : FACT2021-001 : ok ; comme c'est le seul devis a avoir fait l'objet d'une facture, c'est normal que si tu sélectionnes un autre devis, seul le N° Devis est affiché et Facture est vide.

4) si tu veux facturer un devis non encore facturé, par exemple pour "DEV2021-002" : cette suite dépend de la procédure que tu suis ; est-ce que pour le champ Facture tu saisis le N° Facture "FACT2021-002" puis tu cliques sur le bouton "
Valider" ? mais je crois que ce serait mieux de laisser vide le champ Facture et tu cliques directement sur le bouton "Valider" ; c'est alors la sub appelée par ce bouton qui devra mettre le prochain n° Facture, donc "FACT2021-002", ainsi qu'enregistrer tous les éléments de la facturation qui sont affichés sur le USF ; autre possibilité : faire les deux, dans ce sens :

a) si tu as laissé vide le champ Facture, alors ça met automatiquement le prochain N° Facture : "FACT2021-002" ; b) tu saisis toi-même le N° Facture, ce qui te permettra de sauter un numéro facture si une facture a été annulée (pour une raison ou une autre) ; exemple : la facture "FACT2021-002" a été annulée, donc tu saisis toi-même "FACT2021-003".

ensuite, une fois que le N° Facture a été attribué selon a) ou b), c'est la sub du bouton "Valider" qui va enregistrer tous les éléments de la facturation qui sont affichés sur le USF.


mais p't'être que j'me trompe et qu'j'ai pas choisi une bonne procédure à suivre ? c'est à toi de choisir ce qui te convient le mieux. ;) essaye de faire la suite de la facturation selon les nouvelles infos de ce post ; si tu veux que je t'aide davantage là-dessus, tu dois m'indiquer quelle est la procédure que tu auras choisi.
soan
 

soan

XLDnaute Barbatruc
Inactif
@974RE

Lis d'abord mon post #202 précédent. :) ajout important :

si tu fais toujours une facturation à partir d'un devis déjà existant, les éléments de la facturation ont déjà été calculés lors de la saisie du devis ; il suffit donc de les reprendre tels quels ; or dans ce cas, il me semble que ton tableau de la feuille "Facture" qui est en A21: D18 ne sert plus à rien : c'est inutile de saisir des éléments de facturation vu qu'on reprend les éléments du devis ; mais c'est peut-être plutôt ceci : le tableau en A21: D18 doit être rempli par la sub du bouton "Valider" ; comme ça, ensuite, si tu décides que la facture te convient, tu pourras choisir de l'imprimer ou non. (c'est donc un choix manuel, ça doit pas être automatique)

encore mieux : au lieu d'imprimer la facture, tu l'envoies par mail : ça évite de gaspiller du papier ! :)

soan
 

974RE

XLDnaute Occasionnel
@974RE

Lis d'abord mon post #202 précédent. :) ajout important :

si tu fais toujours une facturation à partir d'un devis déjà existant, les éléments de la facturation ont déjà été calculés lors de la saisie du devis ; il suffit donc de les reprendre tels quels ; or dans ce cas, il me semble que ton tableau de la feuille "Facture" qui est en A21: D18 ne sert plus à rien : c'est inutile de saisir des éléments de facturation vu qu'on reprend les éléments du devis ; mais c'est peut-être plutôt ceci : le tableau en A21: D18 doit être rempli par la sub du bouton "Valider" ; comme ça, ensuite, si tu décides que la facture te convient, tu pourras choisir de l'imprimer ou non. (c'est donc un choix manuel, ça doit pas être automatique)

encore mieux : au lieu d'imprimer la facture, tu l'envoies par mail : ça évite de gaspiller du papier ! :)

soan
bonjour Soan,
Tu ne dors jamais? Il est 4h00 du matin chez toi. Moi ici c'est l'heure de se lever.
La procédure concernant la facturation est la suivante:
1) choix du devis à facturer: le nouveau numéro de la facture s'affiche, bouton valider: l'ensemble des informations sont validées, Archiver: la facture est validée.
Les éléments de la facture doit être ceux du devis: il récupère les éléments de la feuille ADV et ALD.
Là, lors de l'ouverture de l'USF Facturation, le numéro s'affiche, tout est OK.
Puis choix du devis, le numéro disparaît, et les info s'affiche dans l'USF.
Bouton valider inactif.
Bien évidemment les autres bouton, hormis le bouton quitter ne fonctionne pas. Le bouton Archiver PDF m'envoi un message "veuillez choisir un numéro", normal puisqu'il n'y a pas de numéro de facture.
Bonne journée à toi
 

974RE

XLDnaute Occasionnel
bonjour Soan,
Tu ne dors jamais? Il est 4h00 du matin chez toi. Moi ici c'est l'heure de se lever.
La procédure concernant la facturation est la suivante:
1) choix du devis à facturer: le nouveau numéro de la facture s'affiche, bouton valider: l'ensemble des informations sont validées, Archiver: la facture est validée.
Les éléments de la facture doit être ceux du devis: il récupère les éléments de la feuille ADV et ALD.
Là, lors de l'ouverture de l'USF Facturation, le numéro s'affiche, tout est OK.
Puis choix du devis, le numéro disparaît, et les info s'affiche dans l'USF.
Bouton valider inactif.
Bien évidemment les autres bouton, hormis le bouton quitter ne fonctionne pas. Le bouton Archiver PDF m'envoi un message "veuillez choisir un numéro", normal puisqu'il n'y a pas de numéro de facture.
Bonne journée à toi
Soan je viens de tester de nouveau l'usf Facturation: le problème vient de l'effacement du nouveau numéro de la facture. Il faut que nouveau numéro s'affiche automatiquement. Il ne faut pas que l'on renseigne le numéro manuellement. En cas de facture annulée, on refait la facture avec le numéro suivant. Comptablement c'est la procédure à suivre.
 

soan

XLDnaute Barbatruc
Inactif
@974RE

attention : il y a 2 fichiers différents ! le 1er est la 2ème version de ton ancien "CL9.xlsm" ; le 2ème est la 2ème version de ton ancien "CL9 (4).xlsm" ; pour les 2 fichiers, le code VBA est le même pour ces 2 subs :​

VB:
Private Sub Rechercher_Click()
  If Me.Rechercher.ListIndex = -1 Then Exit Sub
  If Me.Rechercher.List(Me.Rechercher.ListIndex, 0) = "Aucun devis" Then Exit Sub
  Dim cel As Range, ref$, DerLgn&, Lgn&, lig&, n&
  lig = Tab_Devis_Filtre_Final(Me.Rechercher.ListIndex + 1, 11)
  With Worksheets("A.DV").Cells(lig, 1)
    'on remplit les champs avec les cellules de la feuille "A.DV"
    ref = .Value: NuméroDevis = ref
    Set cel = Worksheets("A.Fact").Columns(1).Find(ref, , -4163, 1, 1)
    If Not cel Is Nothing Then
      TextBox1 = cel.Offset(, 1) 'N° Facture d'un Devis déjà facturé
    Else
      lig = Worksheets("A.Fact").Cells(Rows.Count, 1).End(3).Row
      TextBox1 = "FACT" & Year(Date) & "-" & Format(lig, "000") 'nouveau N° Facture
    End If
    DateDevisInitial = .Offset(, 1): DateModif = .Offset(, 2): NOM = .Offset(, 3)
    ADRESSE = .Offset(, 4): Ville = .Offset(, 5): DateEvènement = .Offset(, 6)
    PriseEnCharge = .Offset(, 7): Trajet = .Offset(, 8): FinCourse = .Offset(, 9)
  End With
  Me.LigsDétail.Clear
  With Worksheets("A.LD")
    DerLgn = .Cells(.Rows.Count, 1).End(xlUp).Row
    For Lgn = 2 To DerLgn
      If Trim(.Cells(Lgn, 1)) Like NuméroDevis Then
        LigsDétail.AddItem .Cells(Lgn, 2) 'Désignation
        n = LigsDétail.ListCount - 1
        LigsDétail.List(n, 1) = .Cells(Lgn, 3) 'Qté
        LigsDétail.List(n, 2) = Format(.Cells(Lgn, 4), "#,##0 €")  'lblPU
        LigsDétail.List(n, 3) = Format(.Cells(Lgn, 5), "#,##0 €")  'lblHT
        LigsDétail.Height = LigsDétail.ListCount * LigsDétail.Font.Size * 2
      End If
    Next Lgn
  End With
  Me.Repaint
End Sub

VB:
Private Sub UserForm_Initialize()
  Dim Compteur&, Dico_Devis, Dico_Noms, Dico_Villes, Dico_Factures
  Set Dico_Noms = CreateObject("Scripting.Dictionary")
  Set Dico_Villes = CreateObject("Scripting.Dictionary")
  Set Dico_Devis = CreateObject("Scripting.Dictionary")
  Set Dico_Factures = CreateObject("Scripting.Dictionary")
  If Not Worksheets("A.Fact").Range("A2").Value = "" Then
    Tab_Devis = Worksheets("A.Fact").Range("A2:K" & Worksheets("A.Fact").Cells(Worksheets("A.Fact").Rows.Count, 1).End(3).Row).Value
    For Compteur = LBound(Tab_Devis, 1) To UBound(Tab_Devis, 1)
      If Not Dico_Factures.Exists(Tab_Devis(Compteur, 1)) Then Dico_Factures.Add Tab_Devis(Compteur, 1), Compteur + 1
    Next Compteur
  End If
  Tab_Devis = Worksheets("A.DV").Range("A2:L" & Worksheets("A.DV").Cells(Worksheets("A.DV").Rows.Count, 1).End(3).Row).Value
  For Compteur = LBound(Tab_Devis, 1) To UBound(Tab_Devis, 1)
    Tab_Devis(Compteur, 11) = Compteur + 1
    If Dico_Factures.Exists(Tab_Devis(Compteur, 1)) Then Tab_Devis(Compteur, 12) = Dico_Factures(Tab_Devis(Compteur, 1))
    If Not Dico_Noms.Exists(Tab_Devis(Compteur, 4)) Then Dico_Noms.Add Tab_Devis(Compteur, 4), Tab_Devis(Compteur, 4)
    If Not Dico_Villes.Exists(Tab_Devis(Compteur, 6)) Then Dico_Villes.Add Tab_Devis(Compteur, 6), Tab_Devis(Compteur, 6)
    If Not Dico_Devis.Exists(Year(Tab_Devis(Compteur, 2))) Then Dico_Devis.Add Year(Tab_Devis(Compteur, 2)), Year(Tab_Devis(Compteur, 2))
  Next Compteur
  ReDim Tab_Devis_Filtre_Final(LBound(Tab_Devis, 1) To UBound(Tab_Devis, 1), LBound(Tab_Devis, 2) To UBound(Tab_Devis, 2))
  Tab_Devis_Filtre_Final = Tab_Devis
  Dim lig&: lig = Worksheets("A.Fact").Cells(Rows.Count, 1).End(3).Row
  TextBox1 = "FACT" & Year(Date) & "-" & Format(lig, "000") 'N° Facture
  JourFre = Format(Date, "dd/mm/yyyy"): Rechercher.List = Tab_Devis
  FiltreNom.List = Dico_Noms.Keys: FiltreVille.List = Dico_Villes.Keys: FiltreDevis.List = Dico_Devis.Keys
  Re_Ini_Rechercher Me.FiltreNom.Text, Me.FiltreVille.Text, Me.FiltreDevis.Text
End Sub

pour cette 2ème sub, j'ai modifié seulement un peu la fin.

soan
 

Pièces jointes

  • Essai CL9 v2.xlsm
    407.6 KB · Affichages: 7
  • Essai CL9 (4) v2.xlsm
    408 KB · Affichages: 10

974RE

XLDnaute Occasionnel
@974RE

attention : il y a 2 fichiers différents ! le 1er est la 2ème version de ton ancien "CL9.xlsm" ; le 2ème est la 2ème version de ton ancien "CL9 (4).xlsm" ; pour les 2 fichiers, le code VBA est le même pour ces 2 subs :​

VB:
Private Sub Rechercher_Click()
  If Me.Rechercher.ListIndex = -1 Then Exit Sub
  If Me.Rechercher.List(Me.Rechercher.ListIndex, 0) = "Aucun devis" Then Exit Sub
  Dim cel As Range, ref$, DerLgn&, Lgn&, lig&, n&
  lig = Tab_Devis_Filtre_Final(Me.Rechercher.ListIndex + 1, 11)
  With Worksheets("A.DV").Cells(lig, 1)
    'on remplit les champs avec les cellules de la feuille "A.DV"
    ref = .Value: NuméroDevis = ref
    Set cel = Worksheets("A.Fact").Columns(1).Find(ref, , -4163, 1, 1)
    If Not cel Is Nothing Then
      TextBox1 = cel.Offset(, 1) 'N° Facture d'un Devis déjà facturé
    Else
      lig = Worksheets("A.Fact").Cells(Rows.Count, 1).End(3).Row
      TextBox1 = "FACT" & Year(Date) & "-" & Format(lig, "000") 'nouveau N° Facture
    End If
    DateDevisInitial = .Offset(, 1): DateModif = .Offset(, 2): NOM = .Offset(, 3)
    ADRESSE = .Offset(, 4): Ville = .Offset(, 5): DateEvènement = .Offset(, 6)
    PriseEnCharge = .Offset(, 7): Trajet = .Offset(, 8): FinCourse = .Offset(, 9)
  End With
  Me.LigsDétail.Clear
  With Worksheets("A.LD")
    DerLgn = .Cells(.Rows.Count, 1).End(xlUp).Row
    For Lgn = 2 To DerLgn
      If Trim(.Cells(Lgn, 1)) Like NuméroDevis Then
        LigsDétail.AddItem .Cells(Lgn, 2) 'Désignation
        n = LigsDétail.ListCount - 1
        LigsDétail.List(n, 1) = .Cells(Lgn, 3) 'Qté
        LigsDétail.List(n, 2) = Format(.Cells(Lgn, 4), "#,##0 €")  'lblPU
        LigsDétail.List(n, 3) = Format(.Cells(Lgn, 5), "#,##0 €")  'lblHT
        LigsDétail.Height = LigsDétail.ListCount * LigsDétail.Font.Size * 2
      End If
    Next Lgn
  End With
  Me.Repaint
End Sub

VB:
Private Sub UserForm_Initialize()
  Dim Compteur&, Dico_Devis, Dico_Noms, Dico_Villes, Dico_Factures
  Set Dico_Noms = CreateObject("Scripting.Dictionary")
  Set Dico_Villes = CreateObject("Scripting.Dictionary")
  Set Dico_Devis = CreateObject("Scripting.Dictionary")
  Set Dico_Factures = CreateObject("Scripting.Dictionary")
  If Not Worksheets("A.Fact").Range("A2").Value = "" Then
    Tab_Devis = Worksheets("A.Fact").Range("A2:K" & Worksheets("A.Fact").Cells(Worksheets("A.Fact").Rows.Count, 1).End(3).Row).Value
    For Compteur = LBound(Tab_Devis, 1) To UBound(Tab_Devis, 1)
      If Not Dico_Factures.Exists(Tab_Devis(Compteur, 1)) Then Dico_Factures.Add Tab_Devis(Compteur, 1), Compteur + 1
    Next Compteur
  End If
  Tab_Devis = Worksheets("A.DV").Range("A2:L" & Worksheets("A.DV").Cells(Worksheets("A.DV").Rows.Count, 1).End(3).Row).Value
  For Compteur = LBound(Tab_Devis, 1) To UBound(Tab_Devis, 1)
    Tab_Devis(Compteur, 11) = Compteur + 1
    If Dico_Factures.Exists(Tab_Devis(Compteur, 1)) Then Tab_Devis(Compteur, 12) = Dico_Factures(Tab_Devis(Compteur, 1))
    If Not Dico_Noms.Exists(Tab_Devis(Compteur, 4)) Then Dico_Noms.Add Tab_Devis(Compteur, 4), Tab_Devis(Compteur, 4)
    If Not Dico_Villes.Exists(Tab_Devis(Compteur, 6)) Then Dico_Villes.Add Tab_Devis(Compteur, 6), Tab_Devis(Compteur, 6)
    If Not Dico_Devis.Exists(Year(Tab_Devis(Compteur, 2))) Then Dico_Devis.Add Year(Tab_Devis(Compteur, 2)), Year(Tab_Devis(Compteur, 2))
  Next Compteur
  ReDim Tab_Devis_Filtre_Final(LBound(Tab_Devis, 1) To UBound(Tab_Devis, 1), LBound(Tab_Devis, 2) To UBound(Tab_Devis, 2))
  Tab_Devis_Filtre_Final = Tab_Devis
  Dim lig&: lig = Worksheets("A.Fact").Cells(Rows.Count, 1).End(3).Row
  TextBox1 = "FACT" & Year(Date) & "-" & Format(lig, "000") 'N° Facture
  JourFre = Format(Date, "dd/mm/yyyy"): Rechercher.List = Tab_Devis
  FiltreNom.List = Dico_Noms.Keys: FiltreVille.List = Dico_Villes.Keys: FiltreDevis.List = Dico_Devis.Keys
  Re_Ini_Rechercher Me.FiltreNom.Text, Me.FiltreVille.Text, Me.FiltreDevis.Text
End Sub

pour cette 2ème sub, j'ai modifié seulement un peu la fin.

soan
Soan, je me suis plongé dans tes codes, et j'avoue ne pas saisir la différence entre les deux fichiers.
J'ai constaté la modification du code par rapport au fichier que j'ai souhaité modifier (TextBox1....).
Mais pour le reste.
Si tu pouvais tenter de m'éclairer un peu, comme ça je m'endormirais ce soir un peu moins "Cou....".
Merci beaucoup pour ton aide.
 

soan

XLDnaute Barbatruc
Inactif
@974RE

LOLLL ! tu m'as envoyé plusieurs versions différentes, et maint'nant, toi-même tu ne t'y retrouves plus ! 🤣

sauf erreur de ma part, la seule différence entre les 2 fichiers, c'est que pour "CL9 (4).xlsm" fermer le USF ferme aussi Excel ; alors que pour "CL9.xlsm", fermer le USF ne ferme pas Excel.

c'est idem pour les versions 2, où j'ai fait le job que tu m'avais demandé. ;) c'est-à-dire que pour un devis qui a déjà fait l'objet d'une facturation, le n° de cette facture est affiché ; pour un devis qui n'avait pas encore été facturé, ça affiche le prochain n° facture. (numéro automatique)

soan
 

974RE

XLDnaute Occasionnel
@974RE

LOLLL ! tu m'as envoyé plusieurs versions différentes, et maint'nant, toi-même tu ne t'y retrouves plus ! 🤣

sauf erreur de ma part, la seule différence entre les 2 fichiers, c'est que pour "CL9 (4).xlsm" fermer le USF ferme aussi Excel ; alors que pour "CL9.xlsm", fermer le USF ne ferme pas Excel.

c'est idem pour les versions 2, où j'ai fait le job que tu m'avais demandé. ;)

soan
Aiiiiiii! Aiiiiii, me plonger la dedans après l'apéro et le déjeuner accompagnés de son litre de rouge, j'aurais jamais dû! 🥵😈🐴
Merci encore Yoan
 

Discussions similaires

Réponses
12
Affichages
297

Statistiques des forums

Discussions
312 169
Messages
2 085 911
Membres
103 033
dernier inscrit
thazet