XL 2019 Modifications avec Combobox liées

sabagof

XLDnaute Occasionnel
Bonjour chers tous,
Juste une préoccupation d'amélioration de procédure. Mes userforms sont bien initialisés par les combobox liées. Pour faire les modifications j'utilise le code suivant par exemple :
VB:
Private Sub CommandButton1_Click()
    Dim lignevide As Long
    Dim idClient As String
    
    Me.Label1.Visible = True
    Me.cmbid1.Visible = True
    
    If Me.cmbid1.Value <> "" Then
    
    ' Extraire l'ID client de la ComboBox (partie avant le tiret)
    idClient = Split(cmbid1.Value, " - ")(0)
    
    ' Rechercher la ligne du client dans la feuille
    lignevide = Feuil1.Columns(1).Find(What:=idClient, LookIn:=xlValues, LookAt:=xlWhole).Row
    
    ' Mettre à jour les informations dans la feuille
    Feuil1.Cells(lignevide, 2).Value = txtnomprenom.Value
    Feuil1.Cells(lignevide, 3).Value = txtcontact.Value
    Feuil1.Cells(lignevide, 4).Value = txtmail.Value
    Feuil1.Cells(lignevide, 5).Value = txtadresse.Value
    Feuil1.Cells(lignevide, 6).Value = txtremarque.Value
    
            Me.txtnomprenom = "" ' Efface la mesure
            Me.txtcontact = ""  ' Efface la mesure
            Me.txtmail = ""  ' Efface la mesure
            Me.txtadresse = ""  ' Efface la mesure
            Me.cmbid1 = ""
            Me.txtremarque = ""
            
            Else: MsgBox "veuillez notifier le client à modifier svp. Merci"
            Exit Sub
    End If
    
    ' Afficher un message de confirmation
    MsgBox "Les informations sur le client ont été modifiées avec succès.", vbInformation
End Sub

A mon avis cette procédure ne respecte pas les combobox liées et je voudrais avois mieux. Merci.
 

Pièces jointes

  • GESTION MMS.xlsm
    356.9 KB · Affichages: 3

Dranreb

XLDnaute Barbatruc
Dans la mesure où Nom et prénom fait l'objet d'une vérification, vous auriez intérêt à mettre aussi une ComboBox prise en charge par CLsA pour cette information.
La façon normale d'écrire une nouvelle ligne avec valeurs des contrôles c'est ça :
VB:
Private Sub btn_ajout_Click() 'enregistrer le client
   If LCouA > 0 Then
      MsgBox "Ce client est déjà enregistré", vbExclamation, Me.Caption
   Else
      CLsA.ValeursVers TVLA
      CAsA.ValeursVers TVLA
      CLsA.Lignes.Add.Range.Value = TVLA
      CLsA.Actualiser
      End If
   End Sub
Il serait prudent d'ajouter après la Sub UserForm_Initialize :
VB:
Private Sub CLsA_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
   If NbrLgn > 0 Then Exit Sub
   LCouA = 0
   ReDim TVLA(1 To 1, 1 To CLsA.PlgTablo.Columns.Count)
   CAsA.ValeursDepuis TVLA
   End Sub
L'évènement Résultat ne se produit en effet pas s'il n'y a aucune ligne correspondant aux critères.
 
Dernière édition:

sabagof

XLDnaute Occasionnel
Dans la mesure où Nom et prénom fait l'objet d'une vérification, vous auriez intérêt à mettre aussi une ComboBox prise en charge par CLsA pour cette information.
La façon normale d'écrire une nouvelle ligne avec valeurs des contrôles c'est ça :
VB:
Private Sub btn_ajout_Click() 'enregistrer le client
   If LCouA > 0 Then
      MsgBox "Ce client est déjà enregistré", vbExclamation, Me.Caption
   Else
      CLsA.ValeursVers TVLA
      CAsA.ValeursVers TVLA
      CLsA.Lignes.Add.Range.Value = TVLA
      CLsA.Actualiser
      End If
   End Sub[/CODE=vb]Il serait prudent d'ajouter après la Sub UserForm_Initialize :
[CODE]Private Sub CLsA_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
   If NbrLgn > 0 Then Exit Sub
   LCouA = 0
   ReDim TVLA(1 To 1, 1 To CLsA.PlgTablo.Columns.Count)
   CAsA.ValeursDepuis TVLA
   End Sub
L'évènement Résultat ne se produit en effet pas s'il n'y a aucune ligne correspondant aux critères.
Pour la modification c'est plus simple :
VB:
Private Sub CommandButton1_Click()
   If LCouA = 0 Then Exit Sub
   CAsA.ValeursVers TVLA
   CLsA.Lignes(LCouA).Range.Value = TVLA
   End Sub
Très bien. Merci. Comment faire pour la modification ?
 

Dranreb

XLDnaute Barbatruc
Pour la modification c'est plus simple :
VB:
Private Sub CommandButton1_Click()
   If LCouA = 0 Then Exit Sub
   CAsA.ValeursVers TVLA
   CLsA.Lignes(LCouA).Range.Value = TVLA
   End Sub
D'habitude dans ce que je propose, c'est le même bouton avec pour caption soit "Ajouter" soit "Modifier" qui effectue les deux opérations.
 

Discussions similaires

Statistiques des forums

Discussions
315 083
Messages
2 116 043
Membres
112 641
dernier inscrit
chab77