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
 

patricktoulon

XLDnaute Barbatruc
je vois aussi des codes a répétition pour les alim de listbox et combobox on peut faire du genrique
je vois aussi mon vieux code resize userform fullscreen ( c'est pas ce que j'ai fait de meilleur)
j'ai fait beaucoup plus propre et précis depuis avec ou sans api macro4 ou déclaré

bref avant de régler un quelconque problème il faudrait ré écrire tout ça proprement
 

ChTi160

XLDnaute Barbatruc
Re
Bonjour Patrick !
une approche!
Edit : Je n'ai vu les post de Patrick qu'après ma proposition
il y a effectivement beaucoup de Boulot de Simplification ......
jean marie
 

Pièces jointes

  • Fiche Produit test (Chti160).xlsm
    314.2 KB · Affichages: 6

patricktoulon

XLDnaute Barbatruc
Ok j'ai fait la modif et c'est beaucoup plus clair, pour ce qui est du bouton AJOUTER qui se bloque c'est parce que je ne veux pas prendre le risque qu'après modification d'un des paramètre la personne se trompe et l'ajoute à la base de données mais ce n'est peut être pas la bonne méthode.
Pour le reste les tirets, virgules etc... Je ne connais pas la méthode!!!
Merci beaucoup
Eric
oui je suis d'accords mais il faudrait quand meme pourvoir le débloquer en cliquant sur le textbox en dessous par exemple et mettre la listbox a index -1 pour repasser en mode ajout
c'est des raisonnements tout simples
 

patricktoulon

XLDnaute Barbatruc
comme tes bouton fermer d'ailleurs là aussi (du générique )
VB:
Sub ferme_un_point_cest_tout(): Unload Me: End Sub

Private Sub BtFermerAcess_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerCoeff_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerCommCentrale_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerCoutTrans_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerEmballage_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerEtiquette_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerOpe_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerPlaque_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerProduit_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerTransporteur_Click(): ferme_un_point_cest_tout: End Sub
Private Sub btnFermer_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerTransVente_Click(): ferme_un_point_cest_tout: End Sub
;)

Je comprends ce que vous me dites mais je suis bien incapable de le mettre en place, auriez-vous la gentillesse de m'envoyer un code exemple?
Désolé de vous embêter!!!
Merci
oui bref il faut tout refaire quoi 🤣
purée ya du boulot

@ChTi160 envoie les codes pas les fichier je l'ai déjà, je travaille avec un pcportable tout petit mon pc est en panne je peux pas trop télécharger
 

eric72

XLDnaute Accro
je vois aussi des codes a répétition pour les alim de listbox et combobox on peut faire du genrique
je vois aussi mon vieux code resize userform fullscreen ( c'est pas ce que j'ai fait de meilleur)
j'ai fait beaucoup plus propre et précis depuis avec ou sans api macro4 ou déclaré

bref avant de régler un quelconque problème il faudrait ré écrire tout ça proprement
Re,
Pour le code resize userform, il ne fonctionne pas sur tous les écrans, est-ce normal?
Merci
 

eric72

XLDnaute Accro
Bonsoir patrick,
Voilà un fichier sans protection (normalement), j'imagine que c'est un gros tas de M....
Désolé et merci pour ta patience à toute épreuve (ou presque)
Eric
 

Pièces jointes

  • Gestion Fiche Produit TEST.xlsm
    382.8 KB · Affichages: 5

patricktoulon

XLDnaute Barbatruc
re
a ouais d'accords c'est pire
déjà je vire ce module allinone c'est de la daube
on repart a zéro si tu veux par ce que là c'est un sac de noeuds
pour info voila comment je code j'ai fait la page transporteur et la page coeef
les 3 boutons ajout/modifier/supprimer
j'ai préparé une sub alimenter_list générique que j'appelle déjà dans ces deux pages lors de la modification pour qu'elle soient toujours a jour

j'ai compilé tes boutons numériques et tes boutons "fermer"

voilà comment ça se présente
compare le nombre de ligne que tu utilise pour ajouter modifier et supprimer par rapport a moi

donc on va commencer comme ça (on verra après pour les blocage de bouton selon ajout ou modif )

VB:
Option Compare Text
Option Base 1

Private Sub MultiPage1_Change(): End Sub
'
'
'*************************************************************************************************
'PAGE coeff  -->TbCoeff
Private Sub LstCoeff_Click()
    With LstCoeff
        TxtDesignationCoeff = .Value
        TxtCoeffApplique = .List(.ListIndex, 1)
    End With
End Sub

Private Sub BtAjoutCoeff_Click()
    With Range("TbCoeff").ListObject
        .ListRows.Add.Range.Value = Array(TxtDesignationCoeff, TxtCoeffApplique)    'on ajoute une ligne au tableau
    End With
    Alimenter_List LstCoeff, Range("TbCoeff").Value    'on remet la listbox a jour automatiquement
End Sub

Private Sub BtModifierCoeff_Click()
    With Range("TbCoeff").ListObject
        .ListRows(LstCoeff.ListIndex + 1).Range.Value = Array(TxtDesignationCoeff, TxtCoeffApplique)   'on modifie la ligne selectionnée
    End With
    Alimenter_List LstCoeff, Range("TbCoeff").Value    'on remet la listbox a jour automatiquement
 TxtDesignationCoeff = "": TxtCoeffApplique = ""
End Sub

Private Sub BtSupprCoeff_Click()
    With Range("TbCoeff").ListObject
        .ListRows(LstCoeff.ListIndex + 1).Delete    'on supprime la ligne du tableau
    End With
    Alimenter_List LstCoeff, Range("TbCoeff").Value    'on remet la listbox a jour automatiquement
    TxtDesignationCoeff = "": TxtCoeffApplique = ""
End Sub
'*************************************************************************************************

'*************************************************************************************************
'PAGE TRANSPORTEUR ACHAT  -->TbTransporteur
Private Sub LstTransporteur_Click()
    With LstTransporteur
        TxtNomTransporteur = .Value
        TxtPourcentage = .List(.ListIndex, 1)
    End With
End Sub

Private Sub BtAjoutTransporteur_Click()
    With Range("TbTransporteur").ListObject
        .ListRows.Add.Range.Value = Array(TxtNomTransporteur, TxtPourcentage)    'on ajoute une ligne au tableau
    End With
    Alimenter_List LstTransporteur, Range("TbTransporteur").Value    'on remet la listbox a jour automatiquement
End Sub

Private Sub BtModifTransporteur_Click()
    With Range("TbTransporteur").ListObject
        .ListRows(LstTransporteur.ListIndex + 1).Range.Value = Array(TxtNomTransporteur, TxtPourcentage)    'on modifie la ligne selectionnée
    End With
    Alimenter_List LstTransporteur, Range("TbTransporteur").Value    'on remet la listbox a jour automatiquement
End Sub

Private Sub BtSupprTransporteur_Click()
    With Range("TbTransporteur").ListObject
        .ListRows(LstTransporteur.ListIndex + 1).Delete    'on supprime la ligne du tableau
    End With
    Alimenter_List LstTransporteur, Range("TbTransporteur").Value    'on remet la listbox a jour automatiquement
End Sub
'*************************************************************************************************


'*************************************************************************************************
' TOUT LES BOUTONS FERMER
Sub ferme_un_point_cest_tout(): Unload Me: End Sub

Private Sub BtFermerAcess_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerCoeff_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerCommCentrale_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerCoutTrans_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerEmballage_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerEtiquette_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerOpe_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerPlaque_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerProduit_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerTransporteur_Click(): ferme_un_point_cest_tout: End Sub
Private Sub btnFermer_Click(): ferme_un_point_cest_tout: End Sub
Private Sub BtFermerTransVente_Click(): ferme_un_point_cest_tout: End Sub
'*************************************************************************************************

'*************************************************************************************************
'forcer  les textbox en numerique seulement
Function KeyAsciiX(keyascii)
'TRANSFORMER LE POINT PAR UNE VIRGULE
    If keyascii = 46 Then keyascii = 44
    If InStr("1234567890,-", Chr(keyascii)) = 0 Then keyascii = 0
    With ActiveControl
        If InStr(.Value, ",") Then keyascii = 0
        If Chr(keyascii) = "-" And .Value <> "" Then keyascii = 0
    End With
End Function

Private Sub TxtDiamTrouPlaque_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtCoeffApplique_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPourcentage_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPrixKgTransVente_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPourcentageComm_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPrixKgTrans_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPrixEmballage_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPrixEtiquette_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPrixPlaque_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPrixPot_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtCoeffTransBox_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPrixVente_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPrixAccess_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPvLM_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPvAPEX_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPvGAMMVERT_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
Private Sub TxtPvAUCHAN_KeyPress(ByVal keyascii As MSForms.ReturnInteger): KeyAsciiX keyascii: End Sub
'*************************************************************************************************


'*******************************************************************************
'sub generique pour alimenter les listbox et combobox pouvant etre appellée a tout moment
Sub Alimenter_List(ctrl, tablo)
    ctrl.ColumnCount = UBound(tablo)
    ctrl.List = tablo
End Sub
'*************************************************************************************************
pour moi c'est déjà plus net
juste une demo
demo.gif
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 107
Messages
2 085 354
Membres
102 872
dernier inscrit
YvanCB