Microsoft 365 Vba affichage Numérique TextBox

974RE

XLDnaute Occasionnel
Soan, Le Forum,
Je rencontre un problème d'affichage sur des TextBox de l'USF Modifier: après avoir saisie un nombre, les textBox (2 à 13 donc Janvier à Décembre) n'affichent pas les décimales si elles sont à 0 ( saisie: 20,10 affichage textBox = 20,1). Apparemment, il y aurait un problème sur les codes concernant ces TexBox: impossible de forcer le format.
J'ai également un "beug" qui intervient après la validation du montant saisie: si les cellules du tableau (Janvier à Décembre) sont vides: "Incompatibilité de Type" sur les lignes "Range("E" & Ligne).Value = CDbl(TextBox3.Value). Il est nécessaire que les cellules soient vides, car cela me permet de voir que j'ai loupé la saisie d'une ligne. Si la consommation est à 0, cela signifie qu'il n'y a pas de loupé: la consommation est à 0,00.
Ci-joint le fichier.
Avec tous mes remerciements.
 

Pièces jointes

  • Essai Contrôle Facturation Mai 2021.xlsm
    159.4 KB · Affichages: 48

974RE

XLDnaute Occasionnel
Soan, merci beaucoup.
Je viens de jeter un œil sur tes fichiers. Cela fonctionne comme je le voulais.
Je dois sortir, apéro sur la plage programmé. A mon retour je regarde ça de plus près afin de comprendre pourquoi cela ne fonctionnait pas, et je reviens vers toi.
Tu as vu mon post sur le fil pour mon numéro de facture?
J'ai essayé de comprendre tes codes, mais je dois avouer que pour le moment, je suis loin d'avoir tout saisi. Il faudrait mettre le numéro facture automatiquement, sans manipulation manuelle.
Je te souhaite une bonne matinée. A tout à l'heure.
 

soan

XLDnaute Barbatruc
Inactif
Bonjour jean marie, 974RE, le fil,

la colonne C est pour « Nom Prénom », alors j'aime bien le contenu de ta cellule C2 : 11,20 ; je suppose que tu as voulu anonymiser le fichier : « Monsieur 11 Euros 20 » ; ainsi, personne ne peut deviner qui fait l'objet d'une recherche ; mais j'ai une bien mauvaise nouvelle pour toi : pour seulement 11,20 € ils n'ont même pas voulu prendre la peine d'imprimer des affiches ; ils ont juste dit : « qu'il aille se faire pendre ailleurs ; quand M. 11 Euros 20 atteindra la renommée de certains dont on ose à peine prononcer le nom, on y repensera... »

Image.jpg

en plus, ils ont même ajouté : « nous, les Euros, on s'en fiche ! on préfère notre monnaie à nous : les Dollars ! »

soan
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour Soan ou devrais je dire " Yoan " Lol
Je pense que tu as compris que cela est le résultat d'un décalage de la copie des données du userform.
J'ai du modifier , mais pas dans le fichier joint.
Edit : fichier modifié #17
Bonne journée
Jean marie
 
Dernière édition:

974RE

XLDnaute Occasionnel
Bonsoir 974RE
j'espère que tu as récupéré Lol
Bonsoir le Fil (soan) ,le Forum
un petit fichier avec quelques Modifs;
bonne fin de Soirée
jean marie

Bonsoir 974RE
j'espère que tu as récupéré Lol
Bonsoir le Fil (soan) ,le Forum
un petit fichier avec quelques Modifs;
bonne fin de Soirée
jean marie
Bonjour Jean-Marie,
Tout d'abord merci pour ta contribution.
Je cherche ton fichier joint mais je ne le vois pas???
Je comprends d'autant moins que apparemment Soan la vu!
Dans l'attente d'un retour.
 

974RE

XLDnaute Occasionnel
Bonsoir Soan,
Dossier marché étant bouclé, je reprends les choses là où je les avais laissées.
J'espère que tout va pour le mieux pour toi.
Si tu trouve un petit moment à me consacrer, j'ai un petit soucis sur des textBox.
Pour la première fois, sur ma dernière facture, j'ai un chiffre négatif à entrer. J'ai donc modifié la Sub des TextBox. Le problème que je n'arrive pas à résoudre se situe sur les TextBox 14 et 15.
Si j'entre un chiffre négatif: beug dans la Sub "Txtb_Change".
J'ai beaucoup tenté en vain.:mad:
Merci à toi
Ci-joint fichier modifié.
 

Pièces jointes

  • 2021 Contrôle Facturation.xlsm
    80.7 KB · Affichages: 4

soan

XLDnaute Barbatruc
Inactif
Bonjour 974RE,

ton fichier en retour. 🙂 je te laisse faire tous les tests nécessaires. 😜

pour le code VBA : attention : j'ai modifié la sub TxtB_Change(), mais j'ai aussi modifié beaucoup d'autres choses ! donc je te recommande de relire entièrement tout le code VBA ci-dessous ! 🤓 comme ton dossier marché est bouclé, ça tombe très bien : tu auras tout l'temps pour potasser tout ça à la plage, dans un hamac, les doigts de pieds en éventail, avec un cocktail exotique en guise d'apéro ; j'espère que tu auras beaucoup de mal à comprendre mon code VBA, car ça te donnera un excellent prétexte pour inviter la fille des cocotiers à venir te faire la lecture ! 😄 😂 🤣 éventuellement, si tu as tout compris parfaitement tout seul, de toi-même, tu peux toujours faire semblant de n'avoir rien compris du tout ! 🤪 (si c'est pour que tu puisses revoir la fille de tes rêves, c'est une occasion à ne pas manquer ! 💘)



module du UserForm "Modifier" (126 lignes) :

VB:
Option Explicit

Public WithEvents TxtB As MSForms.TextBox

Dim Ws As Worksheet
Dim SelectedIndex As Integer
Dim cls(1 To 15) As New Modifier

Const fmt1 = "#,##0.00;-#,##0.00"
Const fmt2 = "#,##0.00 €;-#,##0.00 €"

Private Sub Quitter_Click()
  Unload Me 'Ferme le Formulaire
  Accueil.Show 0
End Sub

Private Sub TextBox14_change()
  TextBox14 = Format(TextBox14, fmt2)
End Sub

Private Sub TextBox15_Change()
  TextBox15 = Format(TextBox15, fmt2)
End Sub

Private Sub TxtB_Change()
  Dim chn$, mem#, i As Byte
  If Right$(TxtB, 1) = "." Then TxtB = Replace$(TxtB, ".", ",")
  For i = 2 To 13
    With Modifier.Frame1.Controls("TextBox" & i)
      chn = .Value: If IsNumeric(chn) Then mem = mem + CDbl(chn)
    End With
    Frame1.Controls("TextBox" & i) = Format(chn, fmt1)
  Next i
  Modifier.Frame1.TextBox14 = mem
End Sub


Private Sub UserForm_Activate()
  Dim ctrl, MaSomme#, MC%, J&, MPL&, MDL&, a&
  ComboBox2.ColumnCount = 1 'Pour la liste Civilité
  ComboBox2.List() = Array("Civilité", "Mr", "Mme")
  Set Ws = Sheets("Controle") 'Correspond au nom de l'onglet dans le fichier Excel
  With Me.ComboBox1
    For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
      .AddItem Ws.Range("C" & J) & " - " & Format(Ws.Range("A" & J), "0# ## ## ## ##")
    Next J
  End With
  For Each ctrl In Frame1.Controls
    If TypeName(ctrl) = "TextBox" And ctrl.Name <> "TextBox14" Then
      a = a + 1: Set cls(a).TxtB = ctrl
    End If
  Next ctrl
  Worksheets("Controle").Select
  MC = 16 'Ma Collone
  MPL = 2 'Ma Première Ligne
  MDL = Cells(Rows.Count, "P").End(xlUp).Row - 1 'Ma Dernière Ligne
  MaSomme = 0
  For J = MPL To MDL
    MaSomme = MaSomme + Cells(J, MC)
  Next J
  TextBox15 = MaSomme
End Sub


Private Sub ComboBox1_Change()
  Dim Ligne&, i As Byte
  SelectedIndex = ComboBox1.ListIndex
  If ComboBox1.ListIndex = -1 Then
    ComboBox2.ListIndex = -1
    For i = 1 To 14
      Controls("TextBox" & i) = ""
    Next i
  Else
    Ligne = ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, "B")
    Textbox1 = Ws.Cells(Ligne, "C")
    For i = 2 To 14
      Controls("TextBox" & i) = Format(Ws.Cells(Ligne, i + 2), fmt1)
    Next i
  End If
  If ComboBox1.ListIndex <> -1 Then Cells(ComboBox1.ListIndex + 2, 1).Select
End Sub


Private Sub Valider_Click()
  'Correspond au programme du bouton Modifier
  Dim MaSomme#, MC%, Ligne&, MPL&, MDL&
 
  If MsgBox("Etes-vous certain de vouloir mofifier la fiche?", vbYesNo, "Demande de confirmation") = vbYes Then
    If SelectedIndex = -1 Then Exit Sub
    Ligne = SelectedIndex + 2
    Ws.Cells(Ligne, "B") = ComboBox2
    Ws.Cells(Ligne, 3) = Textbox1
    Ws.Columns("D:O").NumberFormat = fmt1
    Ws.Columns("P").NumberFormat = fmt2
    On Error Resume Next
    Ws.Range("D" & Ligne) = Trim$(TextBox2) * 1
    Ws.Range("E" & Ligne) = Trim$(TextBox3) * 1
    Ws.Range("F" & Ligne) = Trim$(TextBox4) * 1
    Ws.Range("G" & Ligne) = Trim$(TextBox5) * 1
    Ws.Range("H" & Ligne) = Trim$(TextBox6) * 1
    Ws.Range("I" & Ligne) = Trim$(TextBox7) * 1
    Ws.Range("J" & Ligne) = Trim$(TextBox8) * 1
    Ws.Range("K" & Ligne) = Trim$(TextBox9) * 1
    Ws.Range("L" & Ligne) = Trim$(TextBox10) * 1
    Ws.Range("M" & Ligne) = Trim$(TextBox11) * 1
    Ws.Range("N" & Ligne) = Trim$(TextBox12) * 1
    Ws.Range("O" & Ligne) = Trim$(TextBox13) * 1
    Ws.Range("P" & Ligne).Formula = "=SUM(D" & Ligne & ":O" & Ligne & ")"
    Err.Clear
  End If
 
  MC = 16 'Ma Colonne
  MPL = 2 'Ma Première Ligne
  MDL = Cells(Rows.Count, "P").End(xlUp).Row - 1 'Ma Dernière Ligne
 
  For Ligne = MPL To MDL
    MaSomme = MaSomme + Cells(Ligne, MC)
  Next Ligne
  TextBox15 = MaSomme
    
  Worksheets("Top 10 Conso").Select: Tri
  Worksheets("Controle").Select
 
End Sub

j'ai aussi fait de petites modifs dans Module1 :

VB:
Option Explicit

Sub Tri()
  Dim plage As Range
  Worksheets("Top10Conso").Select: Application.ScreenUpdating = 0
  Set plage = Range("B2:P" & Range("P" & Rows.Count).End(xlUp).Row - 1)
  plage.Sort key1:=[P2], Order1:=xlDescending, Header:=xlGuess, _
    OrderCustom:=1, Orientation:=xlTopToBottom
End Sub

à te lire pour avoir ton avis. ;)

soan
 

Pièces jointes

  • 2021 Contrôle Facturation.xlsm
    87.9 KB · Affichages: 3

patricktoulon

XLDnaute Barbatruc
Bonjour
juste un petit exemple du comment j'envoi 12 textbox nombre décimal (point ou virgule dans la meme session)ou pas en un seul coup dans la ligne
VB:
Private Sub CommandButton1_Click()
    arr = Array(TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox12, TextBox13)
    For i = LBound(arr) To UBound(arr): arr(i) = Val(Replace(arr(i), ",", ".")): Next
    ligne = 1
    With Range("D" & ligne).Resize(, UBound(arr) + 1): .Value = arr: .NumberFormat = "#0.00": End With
End Sub
 

Discussions similaires

Réponses
7
Affichages
2 K

Statistiques des forums

Discussions
311 725
Messages
2 081 944
Membres
101 849
dernier inscrit
florentMIG