Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2021 Vider une textbox sous condition.

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

  • GestComptes1.xlsm
    977.5 KB · Affichages: 5

fanch55

XLDnaute Barbatruc
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
 

vgendron

XLDnaute Barbatruc
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

  • GestComptes1.xlsm
    948.5 KB · Affichages: 2

vgendron

XLDnaute Barbatruc
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

  • GestComptes1.xlsm
    950.5 KB · Affichages: 7

fanch55

XLDnaute Barbatruc
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
 

Drapela

XLDnaute Nouveau
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

  • GestComptes1.xlsm
    936.1 KB · Affichages: 5

vgendron

XLDnaute Barbatruc
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
 

vgendron

XLDnaute Barbatruc
pour la solution de fanch, l'erreur vient d'un pb de syntaxe
le code travaille sur la colonne "Rubrique"
alors que dans le tableau, la colonne s'appelle "Rubrique "
==> un espace en plus.. en trop..
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…