VB Problème de calcul avec TextBox

Arpette

XLDnaute Impliqué
Bonjour à toutes et à tous, tout est dit dans le titre, je vous joints mon code.
Merci pour votre aide.

Code:
Private Sub CommandButton3_click()
Application.ScreenUpdating = False
Dim dernLign As Long
Dim NB&, cell As Range
Dim i As Integer
Dim J As Integer
Dim PAILLE As String
Dim MAIS As String
Dim LAIT As String
Dim FIBRA As String
Dim MELANGE As String

NB = 0
With Sheets("Alimentation")
    'On mémorise dans DernLign le numéro de la première ligne libre de la feuille Alimentation
    dernLign = .Cells(.Rows.Count, 4).End(xlUp).Row + 1
    'On met à jour la feuille Alimentation avec les données du Userform
        
    If TextBox6.Value = "" Then
        TextBox6.Value = 0
        Else
        If .Cells(dernLign, 2).Value = "FIBRA" Then
        .Cells(dernLign, 4).Value = TextBox6.Value * 1250
            If .Cells(dernLign, 2).Value = "MAIS" Then
            .Cells(dernLign, 4).Value = TextBox6.Value * 1250
                If .Cells(dernLign, 2).Value = "LAIT" Then
                .Cells(dernLign, 4).Value = TextBox6.Value * 1500
                    If .Cells(dernLign, 2).Value = "PAILLE" Then
                    .Cells(dernLign, 4).Value = TextBox6.Value * 1050
                    End If
                End If
            End If
        End If
    End If
 
With Sheets("Identifiants")
    For Each cell In .Range("F2:F65536")
        If cell <> "" Then NB = NB + 1
    Next cell
With Sheets("Alimentation")

    If TextBox8.Value = "" Then
    'Si la TextBox8 est vide , je mais 0 dans colonne E
        .Cells(dernLign, 5).Value = 0
        ElseIf TextBox8.Value <> "" Then
    'Si la TextBox8 est <> de vide , je mais sa valeur dans colonne E
    
        dernLign = .Cells(.Rows.Count, 5).End(xlUp).Row + 1
        Cells(2, 12).Value = TextBox8.Value
        .Cells(dernLign, 5).Value = NB * Cells(2, 12) / 1000
    
    If .Cells(dernLign, 5).Value = NB * Cells(2, 12) / 1000 < 25 Then
       .Cells(dernLign, 5).Value = 25
    'Ici si le résultat est < à 25, je mais 25 et si il est > 25 je mets 50 ( multiple de 25)
    End If
    
    .Cells(dernLign, 6).Value = .Cells(dernLign, 4).Value - .Cells(dernLign, 5).Value
    'Ici je calcule, mais dand le cas où la TextBox8 est vide, il ne fait pas le calcul.
    
    For i = 3 To Range("B65536").End(xlUp).Row
        For J = 3 To 6
          If Range("H" & J) = Range("B" & i) Then Range("I" & J) = Range("F" & i)
        Next J
    Next i
    
Application.ScreenUpdating = True
End If
End With
End With
End With
End Sub
 

tototiti2008

XLDnaute Barbatruc
Re : VB Problème de calcul avec TextBox

Bonjour Arpette, Bonjour Hasco ;)

Le côté succint de la réponse de l'ami Hasco sous-entend qu'une recherche sur le forum avec les mots clés appropriés t'aurais sans doute déjà mis sur la voie

Edit :
si tes nombres ont un séparateur décimal "." : Val
si tes nombres ont un séparateur décimal "," : CDbl
 
Dernière édition:
G

Guest

Guest
Re : VB Problème de calcul avec TextBox

Re,

Il y a plein de sujets sur ce thèmes dans le forum, fait une recherche.

Quant à ma réponse elle était égale à ta question: imprécise et du style 'je vous donne un bout de code et débrouillez-vous'.

A+
 

Arpette

XLDnaute Impliqué
Re : VB Problème de calcul avec TextBox

Re,

Il y a plein de sujets sur ce thèmes dans le forum, fait une recherche.

Quant à ma réponse elle était égale à ta question: imprécise et du style 'je vous donne un bout de code et débrouillez-vous'.

A+

Merci à tous les deux, excuses moi Hasco pour ma question, je pensais qu'en ayant mis des commentaires dans mon code ce serait plus parlant. Je vais chercher sur le forum, mais mes nombres ne contiennent pas de décimale.
Merci de vos conseils.
@+
 
G

Guest

Guest
Re : VB Problème de calcul avec TextBox

Re,

Hello Tototiti:D


Autre subtilité,

Si TextBox8.Value <> "" TextBox8.Value peut être = " " (x caractères vides)

Alors

Cdbl("") ou Cdbl(" ") -> erreur 13 (incompatibilité de type)
Val("") ou Val(" ") = 0

D'où:
Tester les vides comme suit (entre autres)
If Trim(TextBox8.Text)= "" Then

Eventuellement si l'utilisateur entre des espaces comme séparateur de milliers (1 000) et avant le test des vides:

Valeur = replace(TextBox8," ","")

A+



A+
 

Arpette

XLDnaute Impliqué
Re : VB Problème de calcul avec TextBox

Re,

Hello Tototiti:D


Autre subtilité,

Si TextBox8.Value <> "" TextBox8.Value peut être = " " (x caractères vides)

Alors

Cdbl("") ou Cdbl(" ") -> erreur 13 (incompatibilité de type)
Val("") ou Val(" ") = 0

D'où:
Tester les vides comme suit (entre autres)
If Trim(TextBox8.Text)= "" Then

Eventuellement si l'utilisateur entre des espaces comme séparateur de milliers (1 000) et avant le test des vides:

Valeur = replace(TextBox8," ","")

A+



A+

Re, Hasco merci pour cette piste mais j'ai adopté ce code qui ma fois marche bien.
Merci encore pour ton aide.
@+

Code:
With Sheets("Alimentation")
    
    If TextBox8.Value = "" Then
        TextBox8.Text = 0
        Cells(2, 12) = TextBox8.Text
        Cells(dernLign - 1, 5).Value = TextBox8.Text
        .Cells(dernLign - 1, 6).Value = .Cells(dernLign - 1, 3).Value + .Cells(dernLign - 1, 4).Value - .Cells(dernLign - 1, 5).Value
        Else
        dernLign = .Cells(.Rows.Count, 5).End(xlUp).Row + 1
         Cells(2, 12).Value = TextBox8.Value
        .Cells(dernLign, 5).Value = NB * Cells(2, 12) / 1000
    
    If Cells(2, 12).Value = 0 Then
        .Cells(dernLign, 5).Value = 0
        Else
        .Cells(dernLign, 5).Value = NB * Cells(2, 12) / 1000 < 25
        .Cells(dernLign, 5).Value = 25
    
    End If
    
    .Cells(dernLign, 6).Value = .Cells(dernLign, 3).Value + .Cells(dernLign, 4).Value - .Cells(dernLign, 5).Value
 

Arpette

XLDnaute Impliqué
Re : VB Problème de calcul avec TextBox

Re, Hasco merci pour cette piste mais j'ai adopté ce code qui ma fois marche bien.
Merci encore pour ton aide.
@+

Code:
With Sheets("Alimentation")
    
    If TextBox8.Value = "" Then
        TextBox8.Text = 0
        Cells(2, 12) = TextBox8.Text
        Cells(dernLign - 1, 5).Value = TextBox8.Text
        .Cells(dernLign - 1, 6).Value = .Cells(dernLign - 1, 3).Value + .Cells(dernLign - 1, 4).Value - .Cells(dernLign - 1, 5).Value
        Else
        dernLign = .Cells(.Rows.Count, 5).End(xlUp).Row + 1
         Cells(2, 12).Value = TextBox8.Value
        .Cells(dernLign, 5).Value = NB * Cells(2, 12) / 1000
    
    If Cells(2, 12).Value = 0 Then
        .Cells(dernLign, 5).Value = 0
        Else
        .Cells(dernLign, 5).Value = NB * Cells(2, 12) / 1000 < 25
        .Cells(dernLign, 5).Value = 25
    
    End If
    
    .Cells(dernLign, 6).Value = .Cells(dernLign, 3).Value + .Cells(dernLign, 4).Value - .Cells(dernLign, 5).Value
Bonsoir à toutes et à tous, je souhaites améliorer le code ci-joint. Je m'explique:
Si la dernière ligne de ma colonne B est égal à A,B ou C, je mets en colonne E
ma variable NB x L2 / 1000 et si c'est inférieur à 25 je mets 25 et si ma colonne B est égal à D je fais la même chose sauf que j'arrondis à 21.
J'ai donc deux problèmes, mon premier ElseIf plante et le second pour les arrondis ex: pour D si je suis en dessous de 21 çà renseigne bien 21, mais si je suis au-dessus de 21 il faudrait renseigner 42 etc..Mais la je ne sais pas faire.
Merci de votre aide
@+


Code:
If Cells(2, 12).Value = 0 Then
        .Cells(dernLign, 5).Value = 0
        ElseIf .Cells(dernLign, 2) = "A" Or "B" Or "C" Then
        .Cells(dernLign, 5).Value = NB * Cells(2, 12) / 1000 < 25
        .Cells(dernLign, 5).Value = 25
            ElseIf .Cells(dernLign, 2) = "D" Then
            .Cells(dernLign, 5).Value = NB * Cells(2, 12) / 1000 < 21
            .Cells(dernLign, 5).Value = 21
            End If
    End If
 

Arpette

XLDnaute Impliqué
Re : VB Problème de calcul avec TextBox

Bonsoir à toutes et à tous, je souhaites améliorer le code ci-joint. Je m'explique:
Si la dernière ligne de ma colonne B est égal à A,B ou C, je mets en colonne E
ma variable NB x L2 / 1000 et si c'est inférieur à 25 je mets 25 et si ma colonne B est égal à D je fais la même chose sauf que j'arrondis à 21.
J'ai donc deux problèmes, mon premier ElseIf plante et le second pour les arrondis ex: pour D si je suis en dessous de 21 çà renseigne bien 21, mais si je suis au-dessus de 21 il faudrait renseigner 42 etc..Mais la je ne sais pas faire.
Merci de votre aide
@+


Code:
If Cells(2, 12).Value = 0 Then
        .Cells(dernLign, 5).Value = 0
        ElseIf .Cells(dernLign, 2) = "A" Or "B" Or "C" Then
        .Cells(dernLign, 5).Value = NB * Cells(2, 12) / 1000 < 25
        .Cells(dernLign, 5).Value = 25
            ElseIf .Cells(dernLign, 2) = "D" Then
            .Cells(dernLign, 5).Value = NB * Cells(2, 12) / 1000 < 21
            .Cells(dernLign, 5).Value = 21
            End If
    End If

Bonjour le forum, quelqu'un aurait-il une idée.
Merci.
@+
 

tototiti2008

XLDnaute Barbatruc
Re : VB Problème de calcul avec TextBox

Bonsoir Arpette,

Est-il obligatoire que tu cites ton dernier post dans chacun de tes posts ? c'est pas trés lisible

mon premier ElseIf plante

change la ligne

Code:
ElseIf .Cells(dernLign, 2) = "A" Or "B" Or "C" Then

en

Code:
ElseIf .Cells(dernLign, 2) = "A" Or .Cells(dernLign, 2) ="B" Or .Cells(dernLign, 2) ="C" Then

Pour le reste je n'ai pas compris
 

Arpette

XLDnaute Impliqué
Re : VB Problème de calcul avec TextBox

Bonsoir Arpette,

Est-il obligatoire que tu cites ton dernier post dans chacun de tes posts ? c'est pas trés lisible



change la ligne

Code:
ElseIf .Cells(dernLign, 2) = "A" Or "B" Or "C" Then

en

Code:
ElseIf .Cells(dernLign, 2) = "A" Or .Cells(dernLign, 2) ="B" Or .Cells(dernLign, 2) ="C" Then

Pour le reste je n'ai pas compris
Bonjour tototiti, merci pour ta réponse, tu as raison mes post précédents non rien à voir.
@+