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 :

Récupérer Valeur négative


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut Récupérer Valeur négative
    Bonsoir à tous,
    je démarre dans vba, et je rencontre quelques difficultés :
    je n'arrive pas à récupérer le montant quand celui a une valeur décimale négative. Vous trouverez ci-après une partie de mon code. Peut-être est ce dû au contrôle que je fais dans TxtMontant_Change(), où je veux saisir uniquement des chiffres et le "." pour les décimales

    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
    If FrmEncoder.CmbTypes = "Dépenses" Then
     
    ActiveCell.Offset(0, 1).Value = FrmEncoder.CmbTypes.Value
    ActiveCell.Offset(0, 2).Value = FrmEncoder.CmbCharges.Value
    ActiveCell.Offset(0, 3).Value = FrmEncoder.CmbIntitules
    ActiveCell.Offset(0, 4).Value = FrmEncoder.CmbDetails.Value
    'ActiveCell.Offset(0, 5).Value = val(FrmEncoder.TxtMontant)
    ActiveCell.Offset(0, 5).Value = -FrmEncoder.TxtMontant.Value
    ActiveCell.Offset(0, 5).NumberFormat = "#,##0.00 €"
    ActiveCell.Offset(0, 6).Value = FrmEncoder.CmbEtat.Value
    ActiveSheet.Columns.AutoFit
    Else
     
    ActiveCell.Offset(0, 1).Value = FrmEncoder.CmbTypes.Value
    ActiveCell.Offset(0, 2).Value = ""
    ActiveCell.Offset(0, 3).Value = FrmEncoder.CmbIntitules
    ActiveCell.Offset(0, 4).Value = FrmEncoder.CmbDetails.Value
    'ActiveCell.Offset(0, 5).Value = val(FrmEncoder.TxtMontant)
    ActiveCell.Offset(0, 5).Value = FrmEncoder.TxtMontant.Value
    ActiveCell.Offset(0, 5).NumberFormat = "#,##0.00 €"
    ActiveCell.Offset(0, 6).Value = FrmEncoder.CmbEtat.Value
    ActiveSheet.Columns.AutoFit
    End If
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub TxtMontant_Change()
    On Error Resume Next
    If Not IsNumeric(Right(TxtMontant, 1)) And Right(TxtMontant, 1) <> "." Then
            TxtMontant = Left(TxtMontant, Len(TxtMontant) - 1)
            End If
    End If
    End Sub
    Ensuite, je souhaite calculer la somme de la colonne "montant" dont voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    colonne = 0
    colonne = ActiveCell.SpecialCells(xlLastCell).Row
     
    For i = 8 To colonne
    résultat = résultat + Range("f" & i).Value
    Next
    MsgBox résultat

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Bonjour et bienvenu

    Alors pour la valeur negative, je pense que c'est pour cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Offset(0, 5).Value = -FrmEncoder.TxtMontant.Value
    Il faut faut transtypé la valeur avant un peu comme dans la ligne en commentaire juste au dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Offset(0, 5).Value = - Cint(FrmEncoder.TxtMontant.Value)
    Pour la somme des valeur je pense que tu devrais regarder WorkSheetFunction plus partticulierement sa function associée Sum, comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MonDouble As Double
    MonDouble = Application.WorksheetFunction.Sum(Range("A1:A6"))
    Je n'est pas bien compris ce que tu veux faite avec ta 2eme partie de code, mais si c'est pour formatée le chiffre avec un nombre de decimal particulier, tu devrais regarder la fonction Format
    Petit exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnString = Format(MonDouble, "0.00")
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    merci Qwaz

    je vais essayer ta proposition.
    En fait pour la valeur négative, j'avais également essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Offset(0, 5).Value = - Ccur(FrmEncoder.TxtMontant.Value
    Mais ca ne fonctionnait pas.

    Pour faire la somme de la colonne, je souhaitais faire une boucle comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    colonne = 0
    colonne = ActiveCell.SpecialCells(xlLastCell).Row
     
    For i = 8 To colonne
    résultat = résultat + Range("f" & i).Value
    Next
    Mais ca ne fonctionne pas comme je le souhaite, j'ai des difficultés pour trouver la dernière ligne utilisée et la mettre dans une variable pour l'utiliser ensuite dans ma boucle.
    Pour ton exemple, je pense qu'il est également nécessaire de connaitre la dernière ligne?
    A+

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Hello

    Et comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonDouble = Application.WorksheetFunction.Sum(Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(xlUp)))
    pour l'autre probleme c'est bon ? ou pas? si c'est pas bon montre moi ton code.

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    salut je rencontre toujours le meme probleme avec le code ci apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Offset(0, 5).Value = - Ccur(FrmEncoder.TxtMontant.Value
    voici le message d'erreur que j'obtiens
    erreur d'execution, 13 , incompatibilite de type
    de plus, j'ai essaye d'utiliser la formule pour faire la somme de ma colonne "g", mais j'obtiens toujours 0 , voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonDouble = Application.WorksheetFunction.Sum(Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(xlUp)))
    Peut-on y arriver en utilisant une boucle, comme je souhaitais le faire au départ?
    a l'avance merci
    Benwad

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Offset(0, 5).Value = - Ccur(val(FrmEncoder.TxtMontant.Value))
    (Ccur ne pouvant traiter une chaine de caractères non reconnue comme numérique..., ce qui impose la virgule comme séparateur et non le point sur une machine utilisant la virgule comme séparateur décimal (ce qui est vraisemblablement ton cas). Il faut donc utiliser la valeur de la chaine et non la chaine elle-même, si l'on utilise une chaîne comportant le point comme séparateur décimal..)

    Pour s'en convaincre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MsgBox -CCur("1.1") 'ne passera jamais
    MsgBox -CCur("1,1") ' passera sans problème
    MsgBox -CCur(val("1.1")) ' passera également sans problème
    Tout celà est expliqué dans l'aide en ligne ...

    Ce que je fais personnellement pour palier à tous les cas de figure et m'assurer de ce que mon appli tournera toujours, quel que soit le séparateur en vigueur sur la machine finale :

    1) remplacement systématique de la virgule éventuellement présente par un point
    puis
    2) traitement avec Ccur et Val ====>> toujours vrai ...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/01/2012, 18h01
  2. Récupérer valeur contrôle en dynamique via requête
    Par nicburger dans le forum Access
    Réponses: 10
    Dernier message: 15/09/2005, 15h41
  3. [ActionScript] Récupérer valeur balise <param />
    Par JohnBlatt dans le forum Flash
    Réponses: 1
    Dernier message: 18/07/2005, 14h50
  4. CR9 - Récupérer valeurs multiples d'un champ paramètre
    Par CR9-Deb dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 06/07/2005, 16h08
  5. récupérer valeur d'un ID après insertion
    Par rikidi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/08/2003, 22h21

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