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
bonjour
bon! étant moins patient que la moyenne
et ayant perdu un œil avec tes codes
afin de garder le seul qu'il me reste j'ai pris la decision dans le module de ton userform multipage
de faire un CTR +A + touche suppr (si tu vois ce que je veux dire ;))😂

des que j'ai enfin eu une page blanche (j'aime bien les pages blanche moi)c'est les pages les plus prometteuses

j'ai donc commencer a coder certaines pages
les 3 boutons ajouter/modifier/supprimer
le remplissage des listbox
bien entendu tes textbox numeriques
tes boutons fermer aussi
et 2/3 fonction génériques qui serviront a toutes les pages
notamment le test d'un textbox vide l'ors de l'ajout et le test de l’existence du terme de la colonne 1 dans le tableau
on a ainsi plus besoins de bloquer ou débloquer les textbox et tout i cointi
il y a la fonction de remplissage des listbox qui est aussi est générique
pour le moment il n'y a que 4 pages de codées
les codes sont assez similaires
page Plaque
page Etiquette
page Coeff
page Transporteur achat

seules ces page fonctionnent

voila on ajoute on modifie on supprime a souhait et la listbox de la page est de suite mis a jour en même temps que le tableau respectif de la page dans la feuille

j'ai tout supprimé mot de passe et tout i cointi pour le moment on fera cela après
dis moi ce que tu en pense
pour info voila ce que represente le code d'une de ces pages
VB:
'*************************************************************************************************
'PAGE plaque  -->TbPlaque

Private Sub LstPlaque_Click()
    With LstPlaque
        TxtRefPlaque = .Value
        TxtNbTrouPlaque = .List(.ListIndex, 1)
        TxtDiamTrouPlaque = .List(.ListIndex, 2)
        TxtPrixPlaque = .List(.ListIndex, 3)
    End With
End Sub
Private Sub BtAjoutPlaque_Click()
     Dim X As Boolean, y As Boolean
    'd'abords on teste avant d'ajouter si ca existe deja ou si un des textbox n'est pas rempli
    X = exist_in_tableau(TxtRefPlaque, Range("TbPlaque"))
    y = TextboxestVide(Array(TxtRefPlaque, TxtNbTrouPlaque, TxtDiamTrouPlaque, TxtPrixPlaque))
    If X Then MsgBox "ce nom existe deja dans la liste ":  TxtRefPlaque = "": TxtNbTrouPlaque = "": TxtDiamTrouPlaque = "": TxtPrixPlaque = "": Exit Sub
    If y Then MsgBox " au moins un des textbox est vide veuillez le remplir SVP!"
   
 
    With Range("TbPlaque").ListObject
        .ListRows.Add.Range.Value = Array(TxtRefPlaque, TxtNbTrouPlaque, TxtDiamTrouPlaque, TxtPrixPlaque)    'on ajoute une ligne au tableau
    End With
    Alimenter_List LstPlaque, Range("TbPlaque").Value    'on remet la listbox a jour automatiquement
    TxtRefPlaque = "": TxtNbTrouPlaque = "": TxtDiamTrouPlaque = "": TxtPrixPlaque = ""
End Sub

Private Sub BtModifPlaque_Click()
    With Range("TbPlaque").ListObject
        .ListRows(LstPlaque.ListIndex + 1).Range.Value = Array(TxtRefPlaque, TxtNbTrouPlaque, TxtDiamTrouPlaque, TxtPrixPlaque)   'on modifie la ligne selectionnée
    End With
    Alimenter_List LstPlaque, Range("TbPlaque").Value    'on remet la listbox a jour automatiquement
    TxtRefPlaque = "": TxtNbTrouPlaque = "": TxtDiamTrouPlaque = "": TxtPrixPlaque = ""
End Sub

Private Sub BtSupprPlaque_Click()
    With Range("TbPlaque").ListObject
        .ListRows(LstPlaque.ListIndex + 1).Delete    'on supprime la ligne du tableau
    End With
    Alimenter_List LstPlaque, Range("TbPlaque").Value    'on remet la listbox a jour automatiquement
    TxtRefPlaque = "": TxtNbTrouPlaque = "": TxtDiamTrouPlaque = "": TxtPrixPlaque = ""
End Sub
'*************************************************************************************************

je joint le fichier
 

Pièces jointes

  • Gestion Fiche Produit TEST.xlsm
    259.5 KB · Affichages: 10

eric72

XLDnaute Accro
alors j'ai fait cela :

Alimenter_List LstCoutTransAval, Range("TbCalcTransVente").Value 'on met la listbox a jour automatiquement
Alimenter_List LstTransVente, Range("TbTransVente").Value 'on met la listbox a jour automatiquement
et bizarrement ça affiche seulement la 1ère colonne, pour les autres pas de problème!!!
 

patricktoulon

XLDnaute Barbatruc
re
je viens de tester et effectivement
j'ai regarder on ne peut déprotéger certaines plages le bouton ok est grisé
je l'avais remarqué sur l'ancien fichier aussi
la il n'y a rien a faire a part refaire cette feuille a mon avis c'est dans les xml des feuilles que ça a cafouillé
ca arrive après plusieurs enregistrement avec changement de version excel
je sais c'est pénible
ca arrive de plus en plus avec les échanges de fichier entre version d'excel
 

patricktoulon

XLDnaute Barbatruc
ca y est j'avais oublié que .list n'accepte pas un tableau 2 dim de 1 ligne et x colonnes
il faut transformer ce tableau 2 dim en array(1dim) et utiliser .column
du coup voilà la fonction list générique corrigée
VB:
'*******************************************************************************
'sub generique pour alimenter les listbox et combobox pouvant etre appellée a tout moment
Sub Alimenter_List(ctrl, tablo)
     ctrl.ColumnCount = UBound(tablo, 2)
    If UBound(tablo) = 1 Then ctrl.Column = Application.Index(tablo, 1, 0) Else ctrl.List = tablo
End Sub
'*************************************************************************************************
tu n'aura plus de problème sur ce point
 

patricktoulon

XLDnaute Barbatruc
tu a 4 exemple et tu a encore quelques pages pareil pour un intitulé différent
tu a donc l'event ajout modifier,supprimer,le list click
essaie en copiant le format de mes code d'une d'entre elle de faire celui d'un autre je corrigerais
dans les 4 event seul le nom de la listbox etle range(blablabla") et les textbox changent
là aussi j'ai essayé de faire le plus générique possible
une différence peut etre dans le nombre de textbox dans l'array lors de la modif
tu a de toute façon des exemple avec 2 textbox et un exemple avec 4 textbox avec plaque
fait moi plaisir ajoute un module standard et test dedans pas dans le userform gardons le propre
je sais pas si tu a remarqué mais j'ai bien séparé le code des page et des fonctions et sub générique par des lignes de "*****...." tu peux donc t y retrouver facilement a l'inverse de ton fichier d'origine ou il fallait naviguer de haut en bas pour trouver les 4 event d'une page
 

eric72

XLDnaute Accro
Ok je duplique pour les autres pages, pour la taille du Userform ce fichier sera utilisé sur des tailles d'écran différents et les essais que j'ai fait montrent que sur certains écrans les userform sont tout petits donc un peu galère à utiliser!
Merci 1000 fois pour tout ce temps consacré
Eric
 

patricktoulon

XLDnaute Barbatruc
re
j'ai corrigé tout les numerique (avec cdbl) pour les boutons modifier

je t'ai mis mon dernier module pour tes userform fullscreen je l'utilise d'ailleurs sur l'userform sur le quel on travaille
il est compatible all version excel all windows celui la pas de soucis
tes duplications de code envoie les moi je corrigerais
voici ton nouveau fichier

ps j'oubliais tu a la possibilité maintenant de fenetrer ou reduire ou full screen ton userform comme n'importe quelle fentre de windows avec les 3 bouton dans la barre de titre du userform
y compris meme le resize manunel dans les coins ou sur les cotés et les controls se redim tout seuls dynamiquement
demonstration
demo.gif
 

Pièces jointes

  • eric72 V°2 patricktoulon.xlsm
    268.1 KB · Affichages: 9
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 097
Messages
2 085 261
Membres
102 844
dernier inscrit
atori2