Microsoft 365 Userform Modification

eric72

XLDnaute Accro
Bonsoir à tous,
J'ai un code qui me permet de modifier des données en passant par un Userform, il fonctionne mais seulement 1 fois sur 2 ou 3, je pensais que ça n'était pas possible mais si je vous assure
Y a t il une boulette??
Voilà a question du soir!!!

Private Sub BtModifPlaque_Click()
'Procédure bouton Modifier
Dim X As Integer, derligne As Integer
If Cells(Rows.Count, 4).End(xlUp).Row = 1 Then
derligne = 2
Else
derligne = Cells(Rows.Count, 4).End(xlUp).Row
End If
For X = 1 To derligne
Application.ScreenUpdating = False
Sheets("Données").Visible = True
Worksheets("Données").Activate
Call Unprotect
If LstPlaque.ListIndex = -1 Then MsgBox "Vous n'avez pas sélectionné de Ligne à Modifier": Exit Sub
If Cells(X, 4) = LstPlaque.List(LstPlaque.ListIndex, 0) Then
Cells(X, 4) = TxtRefPlaque.Value
Cells(X, 5) = CDbl(TxtNbTrouPlaque.Value)
Cells(X, 6) = CDbl(TxtDiamTrouPlaque.Value)
Cells(X, 7) = CDbl(TxtPrixPlaque.Value)
End If
Next X
question = MsgBox("voulez vous Modifier un autre Produit", vbQuestion + vbYesNo, "Information")
If question = vbYes Then
Unload Me
UsfmODIFGeneral.MultiPage1.Value = 3
UsfmODIFGeneral.Show
Else
Unload Me
End If
Call Tri_Tb
Call Protect
Sheets("Données").Visible = False
Application.ScreenUpdating = True
Sheets("Menu").Activate

End Sub
Merci à tous pour votre aide
Eric
 

eric72

XLDnaute Accro
Patrick,
J'ai mis ça sur le click de la LstCoutTransAval :
TxtPrixKgTrans = Round((CDec(TxtCoutBox) / CDec(TxtPoidsBox)) * CDec(TxtCoeffTransBox), 2)

ça fonctionne bien, par contre est-ce que dois le mettre dans le change de :

TxtPoidsBox , TxtCoutBox et TxtCoeffTransBox

pour que cela se calcule à chaque changement?
 

eric72

XLDnaute Accro
euh je ne crois pas car il faut en cas de modif que ça s'actualise, peut être dans le afterupdate de chaque textbox comme ça:

Private Sub TxtPoidsBox_AFTERUPDATE()
If TxtCoutBox = "" And TxtCoeffTransBox = "" Then Exit Sub
TxtPrixKgTrans = Round((CDec(TxtCoutBox) / CDec(TxtPoidsBox)) * CDec(TxtCoeffTransBox), 2)
End Sub

Qu'en penses-tu?
 

patricktoulon

XLDnaute Barbatruc
l'erreur est normale si tu fait x=cdbl(rien du tout ) ben forcement il va avoir bobo
donc au lieu de CDbl(TxtPvAPEX) qui est vide
tu fait iif (TxtPvAPEX="","",CDbl(TxtPvAPEX)) et il y en a quelque uns comme ça
peut etre que là vu le nombre de textbox il va falloir utiliser une autre strategie

ca r en fait il faudrait tous les faire comme ça dans cette page du moins tout ceux qui son sensé être numérique
en tout cas c'est pas trop mal t a pigé le truc
je vais réflechir a une strategie je sais pas encore la quelle je vais choisir
en attendant tu peux faire avec la formule "IIF" comme montré ci dessus
 

patricktoulon

XLDnaute Barbatruc
voilà ma stratégie seul le 1er textbox est string et le dernier est boolean (vrai faux)
donc le reste est sensé etre numerique
donc
on crée toujours un array mais non injecté directement que l'on remastérise en cdbl et puis injection
j'ai pas tester mais ca doit etre ça
VB:
Private Sub BtModifProduit_Click()
    Dim TBL
    With Range("TbProduit").ListObject
        If LstProduit.ListIndex = -1 Then MsgBox "Vous n'avez pas sélectionné de Ligne à Modifier": Exit Sub
        TBL = Array(TxtLibelle, TxtCodeArticle, TxtPrixVente, TxtCdt, TxtGencod, TxtCodeLM, TxtPvLM, TxtCodeAPEX, TxtPvAPEX, TxtCodeGAMMVERT, _
                    TxtPvGAMMVERT, TxtCodeAUCHAN, TxtPvAUCHAN, TxtGencodTRUFF, TxtCodeTRUFF, TxtPvTRUFF, TxtPvCactusClub, TxtPvParticulier, ChbECommPro)
        For I = 1 To UBound(TBL) - 1
            If Val(TBL(I)) > 0 Then TBL(I) = CDbl(TBL(I))
        Next
        .ListRows(LstProduit.ListIndex + 1).Range.Value = TBL

        'on modifie la ligne selectionnée
    End With
    Alimenter_List LstProduit, Range("TbProduit").Value    'on remet la listbox a jour automatiquement
    TxtLibelle = "": TxtCodeArticle = "": TxtPrixVente = "": TxtCdt = "": TxtGencod = "": TxtCodeLM = "": TxtPvLM = "": TxtCodeAPEX = "": _
            TxtPvAPEX = "": TxtCodeGAMMVERT = "": TxtPvGAMMVERT = "": TxtCodeAUCHAN = "": TxtPvAUCHAN = "": TxtGencodTRUFF = "": TxtCodeTRUFF = "": _
            TxtPvTRUFF = "": TxtPvCactusClub = "": TxtPvParticulier = "": ChbECommPro = "":
End Sub

voilà voilà
 

eric72

XLDnaute Accro
et de cette manière même Bug

.ListRows(LstProduit.ListIndex + 1).Range.Value = Array(TxtLibelle, TxtCodeArticle, CDbl(TxtPrixVente) _
, TxtCdt, IIf(TxtGencod = "", "", TxtGencod), IIf(TxtCodeLM = "", "", TxtCodeLM), IIf(TxtPvLM = "", "", CDbl(TxtPvLM)) _
, IIf(TxtCodeAPEX = "", "", TxtCodeAPEX), IIf(TxtPvAPEX = "", "", CDbl(TxtPvAPEX)) _
, IIf(TxtCodeGAMMVERT = "", "", TxtCodeGAMMVERT), IIf(TxtPvGAMMVERT = "", "", CDbl(TxtPvGAMMVERT)) _
, IIf(TxtCodeAUCHAN = "", "", TxtCodeAUCHAN), IIf(TxtPvAUCHAN = "", "", CDbl(TxtPvAUCHAN)) _
, IIf(TxtGencodTRUFF = "", "", TxtGencodTRUFF), IIf(TxtCodeTRUFF = "", "", TxtCodevTRUFF), IIf(TxtPvTRUFF = "", "", CDbl(TxtPvTRUFF)) _
, IIf(TxtPvCactusClub = "", "", CDbl(TxtPvCactusClub)), IIf(TxtParticulier = "", "", CDbl(TxtParticulier)), IIf(ChbECommPro = "", "", ChbECommPro)) 'on modifie la ligne selectionnée
 

Discussions similaires

Réponses
17
Affichages
759

Statistiques des forums

Discussions
311 705
Messages
2 081 724
Membres
101 804
dernier inscrit
chefTarik