XL 2019 Modifications avec Combobox liées

  • Initiateur de la discussion Initiateur de la discussion sabagof
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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:
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 ?
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
835
Réponses
0
Affichages
623
Retour