IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Actualisation de Feuille après validation dans userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Fichiers attachés Fichiers attachés
    • Type de fichier : xlsm HA.xlsm (41,9 Ko, 104 affichages)
    Dernière modification par LittleWhite ; 04/03/2018 à 15h46. Motif: Balise code

  2. #2
    Membre éprouvé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 91
    Par défaut
    Bonjour,

    J'ai fait quelques modifications dans le fichier.
    Cela devrait mieux fonctionner.

    Juste une précision : ce code ne correspond pas au besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Target.Column = 6 Or 7 And Target.Row > 1 Then
    Cela signifie :
    si la colonne = 6 ou (7 et la ligne strictement supérieure à 1)

    (7 et la ligne strictement supérieure à 1) est VRAI si la ligne est strictement supérieure à 1
    (7 et la ligne strictement supérieure à 1) est FAUX sinon



    Ce code correspond :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If (Target.Column = 6 Or Target.Column = 7) And Target.Row > 1 Then
    Cela signifie :
    si (la colonne = 6 ou la colonne = 7 ) et la ligne strictement supérieure à 1
    Fichiers attachés Fichiers attachés

  3. #3
    Invité
    Invité(e)
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Dernière modification par LittleWhite ; 04/03/2018 à 15h46. Motif: Balise code

  4. #4
    Membre éprouvé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 91
    Par défaut
    Bonjour,

    Je me posais la question à savoir si tu voulais vraiment faire une addition ou un remplacement.
    C'est pourquoi j'ai mis les 2 codes :

    code pour remplacer la valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ' 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
    Code pour le calcul en fonction de la valeur précédente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ' 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

  5. #5
    Invité
    Invité(e)
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é.
    Dernière modification par LittleWhite ; 04/03/2018 à 15h45. Motif: Balise code

  6. #6
    Membre éprouvé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 91
    Par défaut
    Bonjour

    Voici le fichier avec un fonctionnement qui correspond à ce que vous avez décrit.
    Le calcul ne se fera que si l'une de 2 textbox est modifiée.
    Fichier HA_20180221.xlsm


    D'un point de vue utilisateur, ne serait-il pas plus compréhensible de doubler les textbox dans la partie stock du formulaire?
    Avoir une colonne, valeurs actuelles pour l'entrée, la sortie et le stock (non modifiable dans le formulaire)
    Et une colonne, modifications pour l'entrée et la sortie (à la rigueur, un textbox avec le nouveau stock)
    Cela permettrait une meilleure compréhension du calcul à venir pour l'utilisateur, non?
    J'ai mis le fichier HA_20180221b.xlsm pour vous montrer
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/08/2016, 17h51
  2. Réponses: 1
    Dernier message: 12/07/2014, 10h35
  3. Ouvrir une feuille après validation d'un formulaire
    Par shadjire dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 06/06/2014, 11h04
  4. [XL-2003] Effacer valeurs après validation dans formulaire
    Par JeanYvesGascon dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/11/2011, 19h05
  5. Actualiser une page après validation form
    Par toffff dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/04/2007, 19h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo