1 pièce(s) jointe(s)
Actualisation de Feuille après validation dans userform
Bonjour à Tous,
Comptable de profession, j'ai décidé de mettre en place une application de gestion pour aider ma sœur ainée.
Lorsque l'utilisateur modifie les textbox4(ENTRÉE) et Textbox5(SORTIE) de l'userform7, le solde doit être calculé automatiquement en tenant compte des valeurs précédentes. Mais ce n'est pas le cas. Si je fais la saisie directement dans les cellules sans passer par l'userform, le calcul se fait automatiquement. Je suis débutant en VBA. Merci de m'aider.
Voici le code que j'utiliser cummuler les valeur saisies.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'additionne l'ancienne valeur à la nouvelle s'il s'agit de la cellule A1
If Target.Column = 6 Or 7 And Target.Row > 1 Then
Target.Value = Target.Value + Valeur
End If
'réactive
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'mémorise la valeur à l'entrée dans la cellule avant modif
Valeur = Target.Value
Application.EnableEvents = False
End Sub |
Calcul automatique du solde après validation via formulaire
Merci Bob78280 , pour ton aide et surtout pour la correction. Après vérification, je me rends compte qu'un problème demeure. Quand je saisie des entrées ou sortie, le solde n'est calculé en tenant compte des saisies précédentes. Voici le code du bouton valider de l'userform1.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| Private Sub CommandButton1_Click()
Dim bExisteDeja As Boolean
Dim Ligne As Long
Dim LigneExiste As Long
'Stop
ActiveSheet.Unprotect ("")
Application.Calculation = xlCalculationManual
If Not (ComboBox1.Text <> "") Then
MsgBox "Veuillez choisir une Section.", , "Saisie Obligatoire"
Else
' Action de ton bouton valider ici
Dim cell As Range, Modif
Sheets(ComboBox1.Value).Select
' On teste la saisie du nom
' On teste la saisie du prénom
If Me.ComboBox4.Value = "" Then
MsgBox "Veuillez saisir le nom de l'Article.", , "Saisie Obligatoire"
Me.ComboBox4.SetFocus
Exit Sub
End If
'Controle si déjà existant
bExisteDeja = False
Ligne = 2
With Sheets(ComboBox1.Value)
While .Range("B" & Ligne).Value <> ""
If .Range("B" & Ligne) = Me.ComboBox4.Value Then
bExisteDeja = True
LigneExiste = Ligne
End If
Ligne = Ligne + 1
Wend
If Not bExisteDeja Then
' Mise en place des valeurs saisies
.Range("A" & LigneExiste).Value = Me.TextBox1.Value
.Range("B" & LigneExiste).Value = Me.ComboBox4.Value
.Range("C" & LigneExiste).Value = Me.TextBox7.Value
.Range("D" & LigneExiste).Value = Me.TextBox8.Value
.Range("E" & LigneExiste).Value = Me.TextBox3.Value
.Range("F" & LigneExiste).Value = Me.TextBox4.Value
.Range("G" & LigneExiste).Value = Me.TextBox5.Value
Else
Modif = MsgBox("Cet Article est déjà référencée dans la base" & Chr(10) & Chr(10) & _
"Voulez-vous remplacer ces données ?", vbYesNo + vbQuestion, "Demande d'enregistrement")
' On remplace la somme et le commentaire
If Modif = vbYes Then
' ajoute la valeur à celle existante
' .Range("F" & LigneExiste).Value = .Range("F" & LigneExiste).Value + Me.TextBox4.Value
' .Range("G" & LigneExiste).Value = .Range("G" & LigneExiste).Value + Me.TextBox5.Value
' remplace la valeur existante
.Range("F" & LigneExiste).Value = Me.TextBox4.Value
.Range("G" & LigneExiste).Value = Me.TextBox5.Value
Application.Calculation = xlCalculationAutomatic
End If
End If
End With
End If
ActiveSheet.Protect ("")
' On décharge le formulaire
Unload Me
UserForm1.Show
End Sub |
Calcul automatique du solde après validation via formulaire
Bonsoir Bob78280 ,
Merci pour votre promptitude. Mais je crois ne pas avoir été assez claire dans mes explications. L'application que je veux proposer a ma sœur doit lui permettre dans un premier volet, de gérer son stock et suivre l'évolution de ses recettes et dépenses. Dans le second volet, il s'agira du suivi des clients..
C'est une partie du premier volet que je vous est soumis.
Dans le fichier réduit qui a été joint dans mon premier poste, auquel vous avez apporté des corrections. Mon premier formulaire (Userform0) sert à ajouter un nouvel article. Le second '(Userform 1) à gérer les entrées et sorties d'un article donné (Gestion de Stocks).
Dans l'userform 1, l'utilisateur ne sera pas toujours dans l'obligation de saisir une valeur dans les deux texTbox ( textbox4 "Entrée" et Textbox 5 " Sorties").
Le code copié dans la feuille (HOMMES) permet déjà de mémoriser ( Additionner) les valeurs saisies dans les cellules des colonnes F et G. La colonne H tire le solde (H2= F2-G2). Cela marche bien quand je faire la saisie directement dans les cellules cibles des colonnes F et G.
Le problème survient lorsque j'entre des données dans les textbox4 ou 5 du formulaire ( Userform 1), les cellules cibles correspondante ne font plus le calcul en tenant compte de la valeur précédente qui y étaient inscrites.
Avec ce code
Code:
1 2
| .Range("F" & LigneExiste).Value = .Range("F" & LigneExiste).Value + Me.TextBox4.Value
.Range("G" & LigneExiste).Value = .Range("G" & LigneExiste).Value + Me.TextBox5.Value |
le calcul se fait selon la valeur précédente des textbox 4 et 5. Cela ne me convient pas. Dans la mesure où si rien n'est saisie dans l'une de ces textbox après validation , la valeur inchangée de l'une des textbox est recomptabilisée. Cela fausse le calcul du solde.
Je souhaite tout simplement que la modification des cellules cibles des colonnes ( F et G ) soit un "ajout" et non un "remplacement"
Exemple : En Cellule F2 nous avons " 10 " en G2 " 0" le solde en H2 sera donc " 10 "
Si par la suite je saisie 5 dans le Textbox5, la cellule G2 doit afficher "5", F2 doit garder le nombre "10" puisse qu'il n'y a pas eu d'entrée. La cellule H2 doit afficher " 5 " car il y a eu sortie ( H2 = F2 - G2 = 10 - 5 = 5).
Ensuite si je saisie "10" dans la textbox4 (Entrées), la cellule F2 doit afficher " 20", la cellule G2 affichera "5" et H2 affichera " 15 " Car H2 = F2 - G2= 20 - 5.
Je ne maîtrise pas le VBA, c'est à travers des recherches sur les forums que j'ai eu les différents codes de l'application que je souhaite proposer à ma sœur. Je serai très heureux, si j'arrive à réaliser ce projet, avec votre aide, bien sûr.
Merci encore pour votre disponibilité.