USF pour gestion BDD : petit soucis de modification de ligne

vsan

XLDnaute Junior
Bonjour à tous et à toutes,
Voilà, j'ai un "petit" soucis avec une USF…
Je l'ai mis en pièce-jointe.
Pour cela, je suis parti d'un exemple de l'excellent @+Thierry que j'essaie de mettre à ma sauce progressivement.
Là, je bloque sur la fonction "Modification"… La fonction "Ajouter" semble fonctionner pour le moment.
J'aimerai que la fonction s'exécute de la façon suivante :
L'utilisateur rentre le type de document via la Combobox0 puis le numéro du document via Textbox2, il clique sur modification
L'USF affiche alors automatiquement les anciennes valeurs reprises dans le tableau via une recherchev ou qqch qui fonctionne.
L'utilisateur ne peut modifier que le champ description (Textbox1) sinon message erreur.
Puis message validant les modifications
Ecriture de la nouvelle valeur de Textbox1 dans la cellule colonne G.
Voilà, voilà…
Merci de votre aide.
Vsan

voici le code lié à la fonction MODIF du USF...
Code:
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'MODIFICATION DE VALEUR DU USERFORM
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Private Sub CmdModif_Click()
Dim CTRL As Control 'Variable pour la collection des controls
Dim i As Integer
Dim L, X As Integer
Dim Response, Match As Byte
Dim val_type, val_fam, val_prod, val_proc, val_deno, val_num As String

'Message d'information sur les changements possibles
MsgBox "Attention dans cette Base de Données, le type de document et la numérotation sont les clefs de l'enregistrement" & vbCrLf & vbCrLf & _
       "La recherche du document à modifier ne se fait donc qu'à partir de ces 2 clefs. Seule la dénomination peut être modifiée. " & vbCrLf & vbCrLf & _
       "Par conséquent pour tout changement autre que la dénomination, veuillez supprimer le document visé et en créer un nouveau.", vbCritical, T & " Warning System Integrity"
'ici une boucle sur les controls, si le numéro ou le type est vide, on set le focus dessus
If ComboBox0.Value = "" Or TextBox2 = "" Then MsgBox "Remplissez le type de document et le numéro", vbCritical, T: ComboBox0.SetFocus: Exit Sub

'On identifie l'objet pour la feuille de travail
Set WS = ThisWorkbook.Sheets("DataBase")
'On identifie la dernière ligne vide en partant du bas
L = WS.Range("A65536").End(xlUp).Row + 1

'ici un Control de Duplication
For X = 2 To L
If ComboBox0 & TextBox2 = WS.Range("E" & X) & WS.Range("F" & X) Then
Match = Match + 1: i = X
End If
Next X
' >> en mode Pas à Pas, le controle ne trouve pas de similitude... alors que le même controle dans la fonction "ajouter" en trouve...

'Si il y a Duplication on demande en montrant les détails de la Duplication
If Match > 0 Then
'Initialisation des valeurs
    val_type = WS.Cells(i, 5)
    val_fam = WS.Cells(i, 1)
    val_prod = WS.Cells(i, 2)
    val_proc = WS.Cells(i, 3)
    val_deno = WS.Cells(i, 4)
    val_num = WS.Cells(i, 6)
' >> Et là, lorsque j'utilise la fonction Pas à Pas, je ne vois pas les variables changer...

'Message erreur si on cherche à modifier les 3 valeurs figées
    If Me.ComboBox1.Value <> val_fam Then MsgBox "Vous ne pouvez pas modifier la famille du produit", vbCritical, ComboBox1.Value = val_fam: Exit Sub
    If Me.ComboBox2.Value <> val_prod Then MsgBox "Vous ne pouvez pas modifier le produit", vbCritical, ComboBox2.Value = val_prod: Exit Sub
    If Me.ComboBox3.Value <> val_proc Then MsgBox "Vous ne pouvez pas modifier le process", vbCritical, ComboBox3.Value = val_proc: Exit Sub
'Ici une cascade de IF si les controls non pas été changés...
    If val_fam = ComboBox1 Then
        If val_prod = ComboBox2 Then
           If val_proc = ComboBox3 Then
             If val_deno = TextBox1 Then
                  MsgBox "Aucune modification détectée", vbCritical, T & " Erreur modification !"
                   Exit Sub
               End If
           End If
        End If
    End If

'Ici un message demandant d'accepter les changement en les listant
Response = MsgBox("Récapitulatif des modifications : " & vbCrLf & vbCrLf & _
                   "Type : " & vbTab & val_type & vbCrLf & _
                   "Numéro : " & vbTab & val_num & vbCrLf & vbCrLf & _
                   "Produit : " & vbTab & val_prod & vbCrLf & _
                   "Process : " & vbTab & val_proc & vbCrLf & vbCrLf & _
                   "Ancienne Dénomination : " & vbTab & val_deno & vbCrLf & _
                   "Nouvelle Dénomination : " & vbTab & TextBox1 & vbCrLf & vbCrLf & _
                   "Acceptez vous ces changements ? ", vbQuestion + vbOKCancel, T & " Modification de : " & val_type & "_" & val_num)

'Si Réponse OK on continue
If Response = 1 Then

'ici avec la Feuille on va faire :
    With WS
     .Range("D" & Me.ComboBox1.ListIndex + 2) = TextBox1 'On écrit dans la colonne D la nouvelle description
    End With
'On envoie un message de confirmation
MsgBox "Opération accomplie", vbInformation, T


Ini 'On lance la réinitialisation du UserForm (Macro en haut du Module)

'Si Réponse Annulation on envoie un message et on a rien fait
Else: MsgBox "Opération annulée", vbInformation, T
End If
End If
End Sub
 

Pièces jointes

  • Gestion BDD-Formulaire.xls
    123.5 KB · Affichages: 79
Dernière édition:

Discussions similaires

Réponses
2
Affichages
236

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin