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 :

Comment mettre a jour des calculs dans un userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut Comment mettre a jour des calculs dans un userform
    Bonjour a tous,

    J'ai crée un userform avec des combobox et en fonction des valeurs de ces combobox je vais recherché des valeurs dans une feuille excel dans des TextBox.
    Tout se passe bien lors de la première initialisation, mais lorsque je modifie la valeur de ma Combobox les TexBox ne se mette pas a jour.

    Comment faut-il faire pour que mes résultat s'affiche des la modification de la valeur de ma Combobox.

    Le code a pourtant été crée sur _Change() de mon combobox.
    j'ai testé sinon en rajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Calculation = xlCalculationAutomatic
    à la fin de mon code mais sans conséquence.

    merci pour votre aide.

    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
    Private Sub CmbEffetCalNT_Change()
     
        Dim Plage1 As Range
        Dim Plage2 As Range
        Dim FL1 As Worksheet
     
        FenetreFMESUser.LblEffetCalEC.Value = FenetreFMESUser.CmbEffetCalNT.Value
     
        NomProjet = FenetrePrincipale.LblProjet.Value
        On Error Resume Next
        Set FL1 = Workbooks.Open("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
        If Err.Number = 1004 Then
            GoTo line1
        End If
     
    line1:
        Set FL1 = Workbooks("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
        Set Plage1 = FL1.Range("A4:A" & FL1.UsedRange.Rows.Count)
        Set Plage2 = FL1.Range("C4:C" & FL1.UsedRange.Rows.Count)
     
        i = 4
        For Each Cell2 In Plage2
            If FL1.Range("A" & i) = FenetreFMESUser.CmbListeFonction.Value Then
     
            FenetreFMESUser.LblLambdaTot.Value = (FL1.Range("D" & i).Value)
            FenetreFMESUser.LblLambdaTot.Value = Format(FenetreFMESUser.LblLambdaTot.Value, "##,##0.00")
            FenetreFMESUser.LblDetC.Value = FL1.Range("E" & i).Value
            FenetreFMESUser.LblIndetC.Value = (100 - (FL1.Range("E" & i).Value))
            FenetreFMESUser.LblLambdaDet.Value = (FL1.Range("E" & i).Value * FL1.Range("D" & i).Value)
            FenetreFMESUser.LblLambdaDet.Value = Format(FenetreFMESUser.LblLambdaDet.Value, "##,##0.00")
            FenetreFMESUser.LblLambdaIndet.Value = (FenetreFMESUser.LblIndetC.Value * FL1.Range("D" & i).Value)
            FenetreFMESUser.LblLambdaIndet.Value = Format(FenetreFMESUser.LblLambdaIndet.Value, "##,##0.00")
     
            End If
            i = i + 1
        Next
     
    End Sub
    alex

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Bonjour,

    Juste une idee en passant, ta section line1 n'est lue qu'en cas d'erreur 1004. Donc si tu ne declenche pas l'erreur, tu ne l'executes pas (le pas a pas est ton ami)

    Aussi essaye de desactiver le controle d'erreur pour voir s'il y a pas de problemes de syntaxe, variables etc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    On Error Resume Next
        Set FL1 = Workbooks.Open("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
    On error goto 0

  3. #3
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Salut tonton fred, merci pour ta réponse

    Citation Envoyé par tonton fred
    Juste une idee en passant, ta section line1 n'est lue qu'en cas d'erreur 1004
    par sélection tu sous-entends?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set FL1 = Workbooks.Open("FMES-" & NomProjet & ".xls").Worksheets("FMES ...
    si oui :
    En fait, je considère que mon fichier est fermé, d'ou le Workbooks.Open, l'erreur 1004 apparaissait lorsque le fichier était ouvert donc j'ai mis un goto line1 qui renvoit a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Set FL1 = Workbooks("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
    et là ca marche.

    si non :
    par sélection tu voulais dire quoi?

    sinon j'ai changer le _Change() en _Click() mais sans conséquence

    je pensais plutot rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Calculation = xlCalculationAutomatic
    mais ca marche pas non plus

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Section, pas selection. Peu importe de toute maniere j'ai dis une anerie j'avais pas bien lu ton goto .

    En fait il ne sert a rien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    On Error Resume Next
        Set FL1 = Workbooks.Open("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
        If Err.Number = 1004 Then
            Set FL1 = Workbooks("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
        End If
        On error goto 0
        Set Plage1 = FL1.Range("A4:A" & FL1.UsedRange.Rows.Count)
        Set Plage2 = FL1.Range("C4:C" & FL1.UsedRange.Rows.Count)
    En desactivant le controle d'erreur tu pourrais et en faisant du pas a pas tu verrais peut etre mieux ce qu'il se passe ?

  5. #5
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut

    excuse moi mais je fais ça comment pour désactiver le controle d'erreur ?
    et pour faire du pas a pas j'utilise des espions?

    il semble que ma plage FL1 soit vide
    : FL1 : Nothing : Worksheet

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Citation Envoyé par alex.a

    excuse moi mais je fais ça comment pour désactiver le controle d'erreur
    Comme je l'ai ecrit dans les deux messages precedents:
    Apres l'instruction qui peut produire une erreur (ou doit produire une erreur puisque dans ton cas tu utilises l'erreur)

    Citation Envoyé par alex.a
    et pour faire du pas a pas j'utilise des espions?
    Non, F8

    Citation Envoyé par alex.a
    il semble que ma plage FL1 soit vide
    FL1 est un workbook, pas une plage (peu importe, c'est juste pour preciser ). Qu'est qui te fait dire ca? Ce que tu as marque vient d'ou ?

  7. #7
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    quand j'utilisé le pas a pas, j'ai une erreur d'exécution 380, impossible de definir la propriété value. Valeur de propriété non valide

    l'erreur apparait quand on arrive a cette ligne dans l'initialisation de mon formulaire. (partie en gras)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FenetreFMESUser.CmbListeFonction = Cell1.Value
    cette erreur intervient lorsque je désactive le controle d'erreur. (en gras)
    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
    Private Sub UserForm_Initialize()
        Dim hWnd As Long
        Dim Plage1 As Range
        Dim FL1 As Worksheet
        
       'permet de minimiser la fenêtre
        hWnd = FindWindow(vbNullString, FenetreFMESUser.Caption)
        SetWindowLong hWnd, -16, &H84C80080
        hWnd = FindWindow(vbNullString, FenetreFMESUser.Caption)
        Style = GetWindowLong(hWnd, -16)
        Valeur = &H20000
        XX = Style Or Valeur
        Style2 = XX
        Style = IIf(Valeur = &HC00000, Style1, Style2)
        SetWindowLong hWnd, -16, Style
        GetSystemMenu hWnd, False
         
        'permet de minimiser tous les fichiers Excel
        Call Outil_Calcul.minimiser
         
        'rempli les différentes marge
        FenetreFMESUser.LblMargeDetecF.Value = FenetrePrincipale.LblMargeDetec.Value
        FenetreFMESUser.LblMargeIndetecF.Value = FenetrePrincipale.LblMargeIndetec.Value
        
          'initialise les champs au démarage
        FenetreFMESUser.LblLambdaUSD.Value = ""
        FenetreFMESUser.LblLambdaUSI.Value = ""
        FenetreFMESUser.LblLambdaTot.Value = ""
        FenetreFMESUser.LblDetC.Value = ""
        FenetreFMESUser.LblIndetC.Value = ""
        FenetreFMESUser.LblLambdaDet.Value = ""
        FenetreFMESUser.LblLambdaIndet.Value = ""
        
        'renseigne la liste des fonction
        NomProjet = FenetrePrincipale.LblProjet.Value
        
        On Error Resume Next
        Set FL1 = Workbooks.Open("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
        If Err.Number = 1004 Then
        On Error GoTo 0
        End If
    
        Set FL1 = Workbooks("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
        Set Plage1 = FL1.Range("A4:A" & FL1.UsedRange.Rows.Count)
        
        FenetreFMESUser.CmbListeFonction.Clear
    
        For Each Cell1 In Plage1
        If Cell1 <> "" Then
        FenetreFMESUser.CmbListeFonction = Cell1.Value
        End If
        If FenetreFMESUser.CmbListeFonction.ListIndex = -1 Then _
            FenetreFMESUser.CmbListeFonction.AddItem Cell1.Value
        Next
       
    End Sub
    ce qui est bizard c'est que lors de l'initialisation mon code ouvre le fichier "FMES-" &NomProjet mais il l'ouvre vide, une page blanche, plus de données!

  8. #8
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut

    j'ai trouvé pour la mise a jour de mes valeurs je me suis compliqué la vie dans mon code pour rien.

    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
    i = 4
        For Each Cell2 In Plage2
            If FenetreFMESUser.CmbEffetCalNT.Value = Cell2.Value Then
     
            FenetreFMESUser.LblLambdaTot.Value = (FL1.Range("D" & i).Value)
            FenetreFMESUser.LblLambdaTot.Value = Format(FenetreFMESUser.LblLambdaTot.Value, "##,##0.00")
            FenetreFMESUser.LblDetC.Value = FL1.Range("E" & i).Value
            FenetreFMESUser.LblDetC.Value = Format(FenetreFMESUser.LblDetC.Value, "##,##0.00")
            FenetreFMESUser.LblIndetC.Value = (100 - (FL1.Range("E" & i).Value))
            FenetreFMESUser.LblIndetC.Value = Format(FenetreFMESUser.LblIndetC.Value, "##,##0.00")
            FenetreFMESUser.LblLambdaDet.Value = (FL1.Range("E" & i).Value * FL1.Range("D" & i).Value) / 100
            FenetreFMESUser.LblLambdaDet.Value = Format(FenetreFMESUser.LblLambdaDet.Value, "##,##0.00")
            FenetreFMESUser.LblLambdaIndet.Value = (FenetreFMESUser.LblIndetC.Value * FL1.Range("D" & i).Value) / 100
            FenetreFMESUser.LblLambdaIndet.Value = Format(FenetreFMESUser.LblLambdaIndet.Value, "##,##0.00")
     
            End If
            i = i + 1
        Next
    quelqu'un a t'il une idée pourquoi mon fichier s'ouvre vide au demarrage ?

  9. #9
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    il fallait définir le chemin de mon fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open(RepertoireTravail & "FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
    .

    merci pour tout tonton fred

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Comment insérer une feuile de calcul dans une Userform?
    Par sylvain64 dans le forum Excel
    Réponses: 7
    Dernier message: 06/02/2015, 09h31
  2. mettre a jour des valeurs dans des fichiers
    Par Manu300886 dans le forum Général Python
    Réponses: 2
    Dernier message: 31/10/2011, 17h29
  3. Réponses: 2
    Dernier message: 09/03/2010, 18h23
  4. [Word] Comment mettre en évidence des mots dans un document ?
    Par ecocentric dans le forum Framework .NET
    Réponses: 1
    Dernier message: 03/08/2006, 16h31
  5. Réponses: 7
    Dernier message: 21/03/2006, 13h01

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