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: 9

soan

XLDnaute Barbatruc
Rebonjour 974RE,

c'est l'USF "Modifier" : ok ; c'est pour les TextBox 2 à 13 de janvier à décembre ok.

dans une TextBox, c'est normal que ça n'affiche pas les zéros non significatifs (les zéros de droite de la partie fractionnaire) ; pour faire ça, faut le faire explicitement.

exemple : TextBox1 = Format(Nombre, "0.00")

quand tu parles de saisie des données, tu les saisis dans les TextBox du USF ? ou directement dans les cellules de la feuille de calcul ? (puis tu les affiche dans le USF) ; je t'avais demandé quelle est la démarche que tu fais ? exemple :

à l'ouverture du fichier, le USF "Menu" s'affiche ; je clique sur le 2ème bouton "Modifier ou Ajouter Dépenses Mensuelles" ➯ ça affiche le USF "Modifier" ; pour "RECHERCHE", je choisis "PAPANGUES" ; ensuite ?

en plus, comme tout est à zéro sur ta feuille de calcul "Controle", je préfère ton fichier précédent avec plusieurs données !​



edit : je crois que c'est plus nécessaire : jean marie (salut) t'a trouvé une solution. :)

soan
 
Dernière édition:

974RE

XLDnaute Occasionnel
Re
Bonjour soan content de te croiser !
cordialement
Bonne fin de journée
jean marie
Soan, bonsoir Jean-Marie,
Tout d'abord, merci Jean-Marie pour ta réponse. Mais le problème est que la cellule alimenté m'indique "Le nombre de cette cellule est format texte ..." ce qui risque de me poser des problèmes car derrière cette ce simple tableau et il y d'autres feuilles de calcul, graphique d'évolution des consommations par agents par mois et par année...
Soan pour répondre à tes questions:
Lors de l'ouverture du classeur, l'USF Menu s'affiche.
Si une nouvelle ligne téléphonique est ouverte, j'incrémente le tableau d'une nouvelle ligne à l'aide du bouton Nouveau numéro.
Mais la plupart du temps, c'est l'USF Modifier ou Ajouter... qui est utilisé.
Cet Usf me permet de saisir les montants des communications pour chaque agent, pour chaque mois.
Chaque saisie alimente le tableau, chaque mois pour chaque agent (dans la réalité 150 lignes ouvertes et à renseigner chaque mois) issue de la facture de l'opérateur. D'où l'intérêt pour moi de garder, si possible les cellules vides avant saisi. Cela me permet de vérifier qu'il n'y a pas eu d'oubli lors du contrôle de la facture. C'est pourquoi, j'ai un code qui lors du choix de la ComboBox "Rechercher" recherche le nom de l'agent dans le tableau et se positionne sur la ligne concernée, ceci dans un soucis de contrôle visuel qu'il s'agit bien du bon agent et que le montant validé est bien celui saisi via l'USF.
Derrière ce tableau il y a d'autres feuilles qui récupère les montants et sont répartis en fonction de la direction, du service ou de la cellule du service. Cela me permet de chiffrer en bout de chaîne le coût de fonctionnement de chaque service, de chaque Direction, avec les graphiques d'évolution des coûts.
Si je n'ai pas été clair, n'hésite pas à demander des précisions.
Merci à vous.
 

soan

XLDnaute Barbatruc
@974RE

pendant que j'écrivais ce post, tu as posté ton post #5 ; je vais bientôt arrêter mon PC et je lirai ton post #5 quand je serai de nouveau disponible.​



je te retourne modifié le fichier avec plusieurs données que tu m'as transmis sur ton autre sujet. :)

question : trouves-tu vraiment pratique d'afficher le USF "Menu" seulement à l'ouverture du classeur ? je veux dire : si tu as fermé ce USF et qu'ensuite tu veux l'afficher de nouveau, tu dois fermer le classeur puis ouvrir de nouveau le classeur ; c'est vraiment pas top ! ferme ton USF ; fais Ctrl m ➯ affichage du USF.

sélectionne "PAPANGUES", et regarde les dépenses de Janvier à Mai : cette fois, c'est bien des nombres avec 2 décimales.​

VB:
Private Sub ComboBox1_Change()
  Dim Ligne&, i%
  SelectedIndex = ComboBox1.ListIndex
  If ComboBox1.ListIndex = -1 Then
    ComboBox2.ListIndex = -1
    For i = 2 To 14
      Controls("TextBox" & i) = ""
    Next i
  Else
    Ligne = ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, "B")
    For i = 2 To 15
      Controls("TextBox" & i) = Format(Ws.Cells(Ligne, i + 2), "0.00")
    Next i
    Ligne = Cells(Rows.Count, "P").End(3).Row
    TextBox15 = Cells(Ligne, "P")
  End If
  If ComboBox1.ListIndex <> -1 Then Cells(ComboBox1.ListIndex + 2, 1).Select
End Sub

soan
 

Pièces jointes

  • Essai Contrôle Facturation Mai 2021.xlsm
    159.3 KB · Affichages: 9

ChTi160

XLDnaute Barbatruc
Re
j'ai modifié le fichier pour ne plus avoir ce problème de Format (Texte) des données Chiffre.
de plus j'ai supprimé la Boucle
for i =1 to 14 qui était inutile Lol
car cette Boucle transférait 14 fois les mêmes données .
car Une seule Ligne est concernée lors de la validation des Modifications.
voir code initial :
VB:
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 'Valeur Unique
        Ws.Cells(Ligne, "B") = ComboBox2
For i = 1 To 14 'La Boucle sur la même Ligne
  If Me.Controls("TextBox" & i).Visible = True Then
                Ws.Cells(Ligne, i + 2) = Me.Controls("TextBox" & i) 'ici on colle déjà les données des TextBox
            End If    
'Ci dessous on recolle les données
        Range("D" & Ligne).Value = CDbl(TextBox2.Value)
        Range("E" & Ligne).Value = CDbl(TextBox3.Value)
        Range("F" & Ligne).Value = CDbl(TextBox4.Value)
        Range("G" & Ligne).Value = CDbl(TextBox5.Value)
        Range("H" & Ligne).Value = CDbl(TextBox6.Value)
        Range("I" & Ligne).Value = CDbl(TextBox7.Value)
        Range("J" & Ligne).Value = CDbl(TextBox8.Value)
        Range("K" & Ligne).Value = CDbl(TextBox9.Value)
        Range("L" & Ligne).Value = CDbl(TextBox10.Value)
        Range("M" & Ligne).Value = CDbl(TextBox11.Value)
        Range("N" & Ligne).Value = CDbl(TextBox12.Value)
        Range("O" & Ligne).Value = CDbl(TextBox13.Value)
        Range("P" & Ligne).Formula = "=SUM(D" & Ligne & ":O" & Ligne & ")"    
Next i
End If
Bonne fin de Soirée
jean marie
 

Pièces jointes

  • Essai Contrôle Facturation Chti160-2.xlsm
    157.9 KB · Affichages: 3
Dernière édition:

cathodique

XLDnaute Accro
Bonsoir 974RE , Soan, ChTi160 ,

une modeste contribution. Ajouter ce code pour les textboxs (2 à 13) soit pour tous les mois.
VB:
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'si taper (.) Point alors remplacer par (,) Virgule
    If KeyAscii = 46 Then KeyAscii = 44
End Sub

J'ai ajouté condition pour éviter plantage quand textbox non numérique ou vide (code bouton valider).
Code:
Private Sub Valider_Click()
'Correspond au programme du bouton Modifier
    Dim Ligne As Long
    Dim i As Integer
    Dim L As Long, MaSomme, DercelP, MC, MPL, MDL, UneLigne
    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

        For i = 1 To 14
            If Me.Controls("TextBox" & i).Visible = True Then
                Ws.Cells(Ligne, i + 2) = Me.Controls("TextBox" & i)
            End If

            If IsNumeric(TextBox2.Value) Then Range("D" & Ligne).Value = CDbl(TextBox2.Value)
            If IsNumeric(TextBox3.Value) Then Range("E" & Ligne).Value = CDbl(TextBox3.Value)
            If IsNumeric(TextBox4.Value) Then Range("F" & Ligne).Value = CDbl(TextBox4.Value)
            If IsNumeric(TextBox5.Value) Then Range("G" & Ligne).Value = CDbl(TextBox5.Value)
            If IsNumeric(TextBox6.Value) Then Range("H" & Ligne).Value = CDbl(TextBox6.Value)
            If IsNumeric(TextBox7.Value) Then Range("I" & Ligne).Value = CDbl(TextBox7.Value)
            If IsNumeric(TextBox8.Value) Then Range("J" & Ligne).Value = CDbl(TextBox8.Value)
            If IsNumeric(TextBox9.Value) Then Range("K" & Ligne).Value = CDbl(TextBox9.Value)
            If IsNumeric(TextBox10.Value) Then Range("L" & Ligne).Value = CDbl(TextBox10.Value)
            If IsNumeric(TextBox11.Value) Then Range("M" & Ligne).Value = CDbl(TextBox11.Value)
            If IsNumeric(TextBox12.Value) Then Range("N" & Ligne).Value = CDbl(TextBox12.Value)
            If IsNumeric(TextBox13.Value) Then Range("O" & Ligne).Value = CDbl(TextBox13.Value)
            Range("P" & Ligne).Formula = "=SUM(D" & Ligne & ":O" & Ligne & ")"

        Next i

    End If
    DercelP = Cells(Rows.Count, 16).End(xlUp).Row - 1    '16 = colonne P
    MC = 16    'Ma Collone
    MPL = 2    ' Ma Première Ligne
    MDL = DercelP    'Ma Dernière Ligne
    MaSomme = 0

    For UneLigne = MPL To MDL
        MaSomme = MaSomme
    Next UneLigne
    TextBox15 = MaSomme
End Sub

Bonne soirée.

edit: Je partage l'avis de Chti160 quant à la boucle inutile (que je n'ai pas retiré).
 

ChTi160

XLDnaute Barbatruc
Re
vous allez me dire si cette Boucle de 1 à 14 sert a quelque chose Lol
soit :
VB:
For i = 1 To 14
  If Me.Controls("TextBox" & i).Visible = True Then
     Ws.Cells(Ligne, i + 2) = Me.Controls("TextBox" & i)
  End If
j'ai remplacé par
Code:
 Ws.Cells(Ligne, 3) = Me.Controls("TextBox1")
'et la suite moins
 Next i
ce qui donne
Code:
Private Sub Valider_Click()
'Correspond au programme du bouton Modifier
    Dim Ligne As Long
    Dim i As Integer
    Dim L As Long, MaSomme, DercelP, MC, MPL, MDL, UneLigne
    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) = Me.Controls("TextBox1")
           Ws.Columns("D:P").NumberFormat = "0.00"
     On Error Resume Next
        Ws.Range("D" & Ligne).Value = Trim(TextBox2) * 1
        Ws.Range("E" & Ligne).Value = Trim(TextBox3) * 1
        Ws.Range("F" & Ligne).Value = Trim(TextBox4.Value) * 1
        Ws.Range("G" & Ligne).Value = Trim(TextBox5.Value) * 1
        Ws.Range("H" & Ligne).Value = Trim(TextBox6.Value) * 1
        Ws.Range("I" & Ligne).Value = Trim(TextBox7.Value) * 1
        Ws.Range("J" & Ligne).Value = Trim(TextBox8.Value) * 1
        Ws.Range("K" & Ligne).Value = Trim(TextBox9.Value) * 1
        Ws.Range("L" & Ligne).Value = Trim(TextBox10.Value) * 1
        Ws.Range("M" & Ligne).Value = Trim(TextBox11.Value) * 1
        Ws.Range("N" & Ligne).Value = Trim(TextBox12.Value) * 1
        Ws.Range("O" & Ligne).Value = Trim(TextBox13.Value) * 1
        Ws.Range("P" & Ligne).Formula = "=SUM(D" & Ligne & ":O" & Ligne & ")"    
     
    Err.Clear
        End If
      DercelP = Cells(Rows.Count, 16).End(xlUp).Row - 1 '16 = colonne P
    MC = 16 'Ma Collone
    MPL = 2 ' Ma Première Ligne
    MDL = DercelP 'Ma Dernière Ligne
    MaSomme = 0  
    For UneLigne = MPL To MDL
    MaSomme = MaSomme
    Next UneLigne
      TextBox15 = MaSomme
End Sub
Bonne fin de Soirée
jean marie
 

974RE

XLDnaute Occasionnel
Re
vous allez me dire si cette Boucle de 1 à 14 sert a quelque chose Lol
soit :
VB:
For i = 1 To 14
  If Me.Controls("TextBox" & i).Visible = True Then
     Ws.Cells(Ligne, i + 2) = Me.Controls("TextBox" & i)
  End If
j'ai remplacé par
Code:
 Ws.Cells(Ligne, 3) = Me.Controls("TextBox1")
'et la suite moins
 Next i
ce qui donne
Code:
Private Sub Valider_Click()
'Correspond au programme du bouton Modifier
    Dim Ligne As Long
    Dim i As Integer
    Dim L As Long, MaSomme, DercelP, MC, MPL, MDL, UneLigne
    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) = Me.Controls("TextBox1")
           Ws.Columns("D:P").NumberFormat = "0.00"
     On Error Resume Next
        Ws.Range("D" & Ligne).Value = Trim(TextBox2) * 1
        Ws.Range("E" & Ligne).Value = Trim(TextBox3) * 1
        Ws.Range("F" & Ligne).Value = Trim(TextBox4.Value) * 1
        Ws.Range("G" & Ligne).Value = Trim(TextBox5.Value) * 1
        Ws.Range("H" & Ligne).Value = Trim(TextBox6.Value) * 1
        Ws.Range("I" & Ligne).Value = Trim(TextBox7.Value) * 1
        Ws.Range("J" & Ligne).Value = Trim(TextBox8.Value) * 1
        Ws.Range("K" & Ligne).Value = Trim(TextBox9.Value) * 1
        Ws.Range("L" & Ligne).Value = Trim(TextBox10.Value) * 1
        Ws.Range("M" & Ligne).Value = Trim(TextBox11.Value) * 1
        Ws.Range("N" & Ligne).Value = Trim(TextBox12.Value) * 1
        Ws.Range("O" & Ligne).Value = Trim(TextBox13.Value) * 1
        Ws.Range("P" & Ligne).Formula = "=SUM(D" & Ligne & ":O" & Ligne & ")"   
    
    Err.Clear
        End If
      DercelP = Cells(Rows.Count, 16).End(xlUp).Row - 1 '16 = colonne P
    MC = 16 'Ma Collone
    MPL = 2 ' Ma Première Ligne
    MDL = DercelP 'Ma Dernière Ligne
    MaSomme = 0 
    For UneLigne = MPL To MDL
    MaSomme = MaSomme
    Next UneLigne
      TextBox15 = MaSomme
End Sub
Bonne fin de Soirée
jean marie
Merci Jean-Marie pour le travail fourni. Cela fait beaucoup d'info à ingurgiter. Je regarde tout ça et je reviens vers toi.
Merci.
 

974RE

XLDnaute Occasionnel
Bonsoir 974RE , Soan, ChTi160 ,

une modeste contribution. Ajouter ce code pour les textboxs (2 à 13) soit pour tous les mois.
VB:
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'si taper (.) Point alors remplacer par (,) Virgule
    If KeyAscii = 46 Then KeyAscii = 44
End Sub

J'ai ajouté condition pour éviter plantage quand textbox non numérique ou vide (code bouton valider).
Code:
Private Sub Valider_Click()
'Correspond au programme du bouton Modifier
    Dim Ligne As Long
    Dim i As Integer
    Dim L As Long, MaSomme, DercelP, MC, MPL, MDL, UneLigne
    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

        For i = 1 To 14
            If Me.Controls("TextBox" & i).Visible = True Then
                Ws.Cells(Ligne, i + 2) = Me.Controls("TextBox" & i)
            End If

            If IsNumeric(TextBox2.Value) Then Range("D" & Ligne).Value = CDbl(TextBox2.Value)
            If IsNumeric(TextBox3.Value) Then Range("E" & Ligne).Value = CDbl(TextBox3.Value)
            If IsNumeric(TextBox4.Value) Then Range("F" & Ligne).Value = CDbl(TextBox4.Value)
            If IsNumeric(TextBox5.Value) Then Range("G" & Ligne).Value = CDbl(TextBox5.Value)
            If IsNumeric(TextBox6.Value) Then Range("H" & Ligne).Value = CDbl(TextBox6.Value)
            If IsNumeric(TextBox7.Value) Then Range("I" & Ligne).Value = CDbl(TextBox7.Value)
            If IsNumeric(TextBox8.Value) Then Range("J" & Ligne).Value = CDbl(TextBox8.Value)
            If IsNumeric(TextBox9.Value) Then Range("K" & Ligne).Value = CDbl(TextBox9.Value)
            If IsNumeric(TextBox10.Value) Then Range("L" & Ligne).Value = CDbl(TextBox10.Value)
            If IsNumeric(TextBox11.Value) Then Range("M" & Ligne).Value = CDbl(TextBox11.Value)
            If IsNumeric(TextBox12.Value) Then Range("N" & Ligne).Value = CDbl(TextBox12.Value)
            If IsNumeric(TextBox13.Value) Then Range("O" & Ligne).Value = CDbl(TextBox13.Value)
            Range("P" & Ligne).Formula = "=SUM(D" & Ligne & ":O" & Ligne & ")"

        Next i

    End If
    DercelP = Cells(Rows.Count, 16).End(xlUp).Row - 1    '16 = colonne P
    MC = 16    'Ma Collone
    MPL = 2    ' Ma Première Ligne
    MDL = DercelP    'Ma Dernière Ligne
    MaSomme = 0

    For UneLigne = MPL To MDL
        MaSomme = MaSomme
    Next UneLigne
    TextBox15 = MaSomme
End Sub

Bonne soirée.

edit: Je partage l'avis de Chti160 quant à la boucle inutile (que je n'ai pas retiré).
Cathodique bonsoir,
Merci de participer à la résolution de mes problèmes de codes. C'est sympa! J'apprécie! Je regarde çà et je te fais un retour.
 

974RE

XLDnaute Occasionnel
@974RE

pendant que j'écrivais ce post, tu as posté ton post #5 ; je vais bientôt arrêter mon PC et je lirai ton post #5 quand je serai de nouveau disponible.​



je te retourne modifié le fichier avec plusieurs données que tu m'as transmis sur ton autre sujet. :)

question : trouves-tu vraiment pratique d'afficher le USF "Menu" seulement à l'ouverture du classeur ? je veux dire : si tu as fermé ce USF et qu'ensuite tu veux l'afficher de nouveau, tu dois fermer le classeur puis ouvrir de nouveau le classeur ; c'est vraiment pas top ! ferme ton USF ; fais Ctrl m ➯ affichage du USF.

sélectionne "PAPANGUES", et regarde les dépenses de Janvier à Mai : cette fois, c'est bien des nombres avec 2 décimales.​

VB:
Private Sub ComboBox1_Change()
  Dim Ligne&, i%
  SelectedIndex = ComboBox1.ListIndex
  If ComboBox1.ListIndex = -1 Then
    ComboBox2.ListIndex = -1
    For i = 2 To 14
      Controls("TextBox" & i) = ""
    Next i
  Else
    Ligne = ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, "B")
    For i = 2 To 15
      Controls("TextBox" & i) = Format(Ws.Cells(Ligne, i + 2), "0.00")
    Next i
    Ligne = Cells(Rows.Count, "P").End(3).Row
    TextBox15 = Cells(Ligne, "P")
  End If
  If ComboBox1.ListIndex <> -1 Then Cells(ComboBox1.ListIndex + 2, 1).Select
End Sub

soan
Merci Soan, je regarde çà et je reviens vers toi. Avec les différentes contributions, çà fait beaucoup de données à ingurgiter.
Est-ce que tu as vu mon poste sur l'autre fil que je viens de te faire?
 

soan

XLDnaute Barbatruc
Bonjour 974RE,

* oui, j'ai vu ton post #201 sur l'autre fil, et j'viens d'y répondre. (mes 2 posts #202 et #203)

* j'ai bien lu ton post #5 ; merci pour ta description.

* tu as écrit dans ton post #1 : « Je rencontre un problème d'affichage sur des TextBox de l'USF Modifier : après avoir saisi 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). » ; j'ai résolu ce problème : essaye le fichier joint de mon post #6.

* toujours dans ton post #1, tu as aussi écrit : « J'ai également un "bug" qui intervient après la validation du montant saisi : 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. » ; j'vais essayer d'trouver une solution. (sans garantie)

soan
 

974RE

XLDnaute Occasionnel
Bonjour 974RE,

* oui, j'ai vu ton post #201 sur l'autre fil, et j'viens d'y répondre. (mes 2 posts #202 et #203)

* j'ai bien lu ton post #5 ; merci pour ta description.

* tu as écrit dans ton post #1 : « Je rencontre un problème d'affichage sur des TextBox de l'USF Modifier : après avoir saisi 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). » ; j'ai résolu ce problème : essaye le fichier joint de mon post #6.

* toujours dans ton post #1, tu as aussi écrit : « J'ai également un "bug" qui intervient après la validation du montant saisi : 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. » ; j'vais essayer d'trouver une solution. (sans garantie)

soan
Merci Soan, je suis sur que tu vas trouver où se trouve le problème. Après avoir tout essayer et avoir beaucoup lu sur les formats textBox, j'ai le sentiment que le problème pourrait venir de la sub des TxtBox.
 

soan

XLDnaute Barbatruc
@974RE

attention : il y a 2 fichiers différents ! le v1 (vignette gauche) est avec des données autres que 0,00 ; le v2 (vignette droite) est avec des 0,00 ; pour les 2 fichiers, le code VBA est le même pour ces 2 subs :​

VB:
Private Sub ComboBox1_Change()
  Dim Ligne&, i%
  SelectedIndex = ComboBox1.ListIndex
  If SelectedIndex = -1 Then
    ComboBox2.ListIndex = -1
    For i = 2 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 15
      Controls("TextBox" & i) = Format(Ws.Cells(Ligne, i + 2), "0.00")
    Next i
    Ligne = Cells(Rows.Count, "P").End(3).Row: TextBox15 = Cells(Ligne, "P")
    Cells(SelectedIndex + 2, 1).Select
  End If
End Sub


Private Sub Valider_Click() 'sub du bouton Modifier
  If TextBox1 = "" Then Exit Sub 'il faut qu'il y aie un nom !
  Dim Ligne&, i%
  If MsgBox("Êtes-vous certain de vouloir mofifier la fiche ?", vbYesNo, _
    "Demande de confirmation") <> vbYes Then Exit Sub
  If SelectedIndex = -1 Then Exit Sub
  Ligne = SelectedIndex + 2
  Ws.Cells(Ligne, "B") = ComboBox2
  If TextBox1.Visible Then Ws.Cells(Ligne, 3) = TextBox1
  For i = 2 To 13
    With Controls("TextBox" & i)
      If .Visible Then
        If .Value <> "" Then Ws.Cells(Ligne, i + 2) = Val(Replace$(.Value, ",", "."))
      End If
    End With
  Next i
  TextBox14 = Ws.Cells(Ligne, "P"): Ligne = Cells(Rows.Count, "P").End(3).Row
  TextBox15 = Cells(Ligne, "P")
End Sub



pour les 2 fichiers : je te laisse faire les tests ; pour le séparateur décimal, tu peux taper au choix le point « . » du pavé numérique ou la virgule « , » de la touche « ? » ; les valeurs affichées des TextBox14 et TextBox15 sont correctes à l'ouverture du UserForm et après choix d'un nom dans ComboBox1 : ce sont les valeurs de la feuille de calcul, en colonne P ; si tu modifies une des TextBox 2 à 13, les valeurs correctes de TextBox14 et TextBox15 seront affichées seulement APRÈS clic sur le bouton Valider et APRÈS confirmation ; ce seront aussi les valeurs de la feuille de calcul, en colonne P.​

à te lire pour avoir ton avis. ;)

soan
 

Pièces jointes

  • Essai Contrôle Facturation Mai 2021 v1.xlsm
    159.7 KB · Affichages: 7
  • Essai Contrôle Facturation Mai 2021 v2.xlsm
    159.5 KB · Affichages: 6

Statistiques des forums

Discussions
288 632
Messages
1 893 633
Membres
169 984
dernier inscrit
mdemrs
Haut Bas