XL 2021 Vider une textbox sous condition.

  • Initiateur de la discussion Initiateur de la discussion Drapela
  • 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 !

Drapela

XLDnaute Nouveau
Bonjour le forum,

Dans le fichier joint, j'ai un formulaire UF_Modif pour modifier les écritures des feuille de comptes (uniquement sur la feuil3 pour l'instant). Je le lance par sélection d'une ligne et click sur le bouton modifier.
Pour les Textbox Débit et Crédit, si je change une valeur existante, pas de problème. Mais si je veux changer la valeur débit en crédit, ou vice et versa, les valeur ne sont pas modifiées. Malgré divers essais proposés sur la toile, je sèche.
En fait ce que je cherche c'est comment vider la TB_Credit si je renseigne la TB_Débit, et l'inverse.

Merci d'avance pour votre aide.
Cordialement.
 

Pièces jointes

Salut,
Proposition à rajouter dans le code de l'userform :
VB:
Private Sub TB_Credit_Change()
    If IsNumeric(TB_Credit) Then
        TB_Debit = ""
    Else
        TB_Credit = ""
    End If
End Sub

Private Sub TB_Debit_Change()
    If IsNumeric(TB_Debit) Then
        TB_Credit = ""
    Else
        TB_Debit = ""
    End If
End Sub
 
Hello

il "suffit" d'utiliser les évènements change des deux textbox
regarde en PJ


PS: je vois des tables structurées (TRES bien) mais dans ton code, tu ne les exploites pas (moins bien)
pire.. tu passes par un numligne qui est mis à jour à chaque fois que tu selectionnes une ligne
 

Pièces jointes

hello @fanch55 , j'ai raffraichi trop tard

@Drapela

Dans la pj, je me suis permis quelques modifs pour illustrer l'utilisation des tables structurées

1) quand tu cliques sur le bouton "Modifier", je teste si la cellule active est bien DANS la table avant d'ouvrir le formulaire

2) dans l'initialize, le NumLigne est récupéré (sans passer par ta range dans la feuille Liste)
ensuite, on exploite la table (=ListObjects() en VBA) pour remplir les controls du formulaire

idem pour modifier ou supprimer la ligne
 

Pièces jointes

Salut @vgendron,
Tu as conservé l'anomalie initiale dans BTN_Enreg_Click dans le fait que le débit ou le crédit ne sont pas "effacés" quand on met l'"autre" à jour .
Mon code pour la table structurée, basée non pas sur la colonne des rubriques mais sur leur nom ( les 2 méthodes sont bonnes , après c'est une question de choix .... )
VB:
Private Sub BTN_Enreg_Click()
    Dim Rw As Long
            
    If MsgBox("Voulez-vous sauvegarder les modifications ?", _
            vbQuestion + vbYesNo + vbDefaultButton1, "Confirmation modifications") = vbYes Then
        Rw = Selection.Row - [T_CC].Row + 1
        Range("T_CC[Date]").Rows(Rw) = CDate(Me.TB_Date)
        Range("T_CC[Mode de paiement]").Rows(Rw) = Me.CB_ModPaie
        Range("T_CC[N°" & Chr(10) & "chèque]").Rows(Rw) = Me.TB_Cheque
        Range("T_CC[Tiers]").Rows(Rw) = Me.CB_Tiers
        Range("T_CC[Rubrique]").Rows(Rw) = Me.CB_Rubrique
        Range("T_CC[Classe]").Rows(Rw) = Me.CB_Classe
        Range("T_CC[Commentaire]").Rows(Rw) = Me.TB_Comment
        If TB_Debit = "" Then Range("T_CC[Débit]").Rows(Rw).ClearContents Else Range("T_CC[Débit]").Rows(Rw) = CDbl(TB_Debit)
        If TB_Credit = "" Then Range("T_CC[Crédit]").Rows(Rw).ClearContents Else Range("T_CC[Crédit]").Rows(Rw) = CDbl(TB_Credit)
    End If
    
    Unload Me
  
End Sub
 
Effectivement,

pour les noms de colonnes.. c'est ce que j'utilise également d'habitude.. mais la.. la flemme est passée par la 😉
Re bonjour
D'abord, merci à tous les deux pour votre réactivité.
J'ai testé les deux méthodes mais sans succés.

Pour la proposition de fanch55, j'ai "Erreur d'exécution 1004 : La méthode Range de l'objet global a échoué" et le débogage surligne "Range("T_CC[Rubrique]").Rows(Rw) = Me.CB_Rubrique".

Sur la proposition de vgandron, la modification se fait bien dans les textbox, mais la feuille reste inchangée.

Mes compétences étant limitées, il y 'a sans doute quelque chose qui m'échappe.
 

Pièces jointes

pour ma solution qui n"efface pas la feuille, c'est la remarque de fanch55 sur mon code
à remplacer par ceci
VB:
Private Sub BTN_Enreg_Click()
    If MsgBox("Voulez-vous sauvegarder les modifications ?", vbQuestion + vbYesNo + vbDefaultButton1, "Confirmation modifications") = vbNo Then Exit Sub: Unload Me
    With Sheets("Compte Courant").ListObjects(1)
        .DataBodyRange(NumLigne, 1) = CDate(Me.TB_Date)
        .DataBodyRange(NumLigne, 2) = Me.CB_ModPaie
        .DataBodyRange(NumLigne, 4) = Me.TB_Cheque
        .DataBodyRange(NumLigne, 5) = Me.CB_Tiers
        .DataBodyRange(NumLigne, 6) = Me.CB_Rubrique
        .DataBodyRange(NumLigne, 7) = Me.CB_Classe
        .DataBodyRange(NumLigne, 8) = Me.TB_Comment
        If Me.TB_Debit.Value = "" Or Not IsNumeric(TB_Debit.Value) Then
            .DataBodyRange(NumLigne, 9) = ""
        Else
           .DataBodyRange(NumLigne, 9) = CDbl(TB_Debit)
        End If
        If Me.TB_Credit.Value = "" Or Not IsNumeric(TB_Credit.Value) Then
            .DataBodyRange(NumLigne, 10) = ""
        Else
           .DataBodyRange(NumLigne, 10) = CDbl(TB_Credit)
        End If
    End With
End Sub
 
- 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
Retour