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 :

Convertir une valeur positive depuis Textbox vers une valeur négative dans Excel


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Points : 36
    Points
    36
    Par défaut Convertir une valeur positive depuis Textbox vers une valeur négative dans Excel
    Bonjour à tous,

    Je travaille sur un outil de pilotage de stock avec entrées et sorties et j'aimerai que la valeur saisie dans le Textbox du Userform soit transformée en valeur négative sous Excel. J'ai utilisé le format "$#,##,0.00" qui fonctionnait jusqu'à hier mais aujourd'hui il renseigne à nouveau des valeurs positive.

    Voici le code utilisé:

    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
    Private Sub comvalide_Click() 'Valider une sortie de matériel
    Dim LignTablo
    Sheets("Data saisies").Unprotect
     
    With Sheets("Data saisies").ListObjects("Data_saisies")
        If .ListRows.Count = 0 Then
            Range("Tableau1[[#Headers],[Nom]]").Offset(1, 0) = 1
            Range("Tableau1[[#Headers],[Nom]]").Offset(1, 0) = ""
        End If
     
        If .ListRows.Count = 1 And .ListRows(1).Range.Cells(1, 1) = "" Then
            Set LignTablo = Sheets("Data saisies").ListObjects("Data_saisies").ListRows(1)
        Else
            Set LignTablo = Range("Data_saisies").ListObject.ListRows.Add(AlwaysInsert:=True)
        End If
    End With
     
    With LignTablo.Range
        .Cells(1, 1) = CDbl(Me.Textcodearticle.Value)
        .Cells(1, 2) = Textdesignation
        .Cells(1, 3) = Textdate
        .Cells(1, 5) = CDbl(Me.Textquantite.Value)
        Textquantite.Value = Format(Textquantite.Value, "$#,##0,00")
    End With
     
    Unload sortie
     
    Sheets("Data saisies").Protect
    sortie.Show
    End Sub
    Est que quelqu'un a une idée.

    Par avance merci!
    Zi

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le titre de ta discussion "Convertir une valeur positive depuis Textbox vers une valeur positive Excel" est en contradiction avec ta demande me semble t'il
    j'aimerai que la valeur saisie dans le Textbox du Userform soit transformée en valeur négative sous Excel
    Un exemple de transformation d'une valeur positive entrée dans le contrôle nommé TextBox1 en valeur négative dans la cellule B2 avec mise en forme séparateur de milliers et 2 décimales
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton1_Click()
     With ThisWorkbook.Worksheets("Feuil1")
      With .Range("B2")
      .Value = -Val(Me.TextBox1)
      .NumberFormat = "#,##0.00"
      End With
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Effectivement la description faite était un non-sens!

    Merci pour l'information. Il y a t-il possibilité de le faire de manière dynamique sans citer "B2"?

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par zielite Voir le message
    Effectivement la description faite était un non-sens!
    ..
    Bonsoir,

    il faut donc la compléter ....!

    comment transfère-tu les données de tes textbox vers excel ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Je l'ai même modifié!

    J'utilise une méthode dynamique qui ajoute une ligne à chaque nouvelle entrée validée dans un tableau défini "Data_saisies" sur la feuille "Data 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Private Sub comvalide_Click() 'Valider une sortie de matériel
    Dim LignTablo
    Sheets("Data saisies").Unprotect
     
    With Sheets("Data saisies").ListObjects("Data_saisies")
        If .ListRows.Count = 0 Then
            Range("Tableau1[[#Headers],[Nom]]").Offset(1, 0) = 1
            Range("Tableau1[[#Headers],[Nom]]").Offset(1, 0) = ""
        End If
     
        If .ListRows.Count = 1 And .ListRows(1).Range.Cells(1, 1) = "" Then
            Set LignTablo = Sheets("Data saisies").ListObjects("Data_saisies").ListRows(1)
        Else
            Set LignTablo = Range("Data_saisies").ListObject.ListRows.Add(AlwaysInsert:=True)
        End If
    End With
     
    With LignTablo.Range
        .Cells(1, 1) = CDbl(Me.Textcodearticle.Value)
        .Cells(1, 2) = Textdesignation
        .Cells(1, 3) = Textdate
        .Cells(1, 5) = CDbl(Me.Textquantite.Value)
        Textquantite.Value = Format(Textquantite.Value, "$#,##0,00")
    End With
     
    Unload sortie
     
    Sheets("Data saisies").Protect
    sortie.Show
    End Sub

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Ben,

    pourquoi n'applique tu pas la méthode à philippe ? suffit de rajoute le signe moins lors de ton affectation ...

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    J'ai essayé, il me garde une valeur positive...

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    montre la ligne de code que tu utilise..

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    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
    Private Sub comvalide_Click() 'Valider une sortie de matériel
    Dim LignTablo
    Sheets("Data saisies").Unprotect
     
    With Sheets("Data saisies").ListObjects("Data_saisies")
        If .ListRows.Count = 0 Then
            Range("Tableau1[[#Headers],[Nom]]").Offset(1, 0) = 1
            Range("Tableau1[[#Headers],[Nom]]").Offset(1, 0) = ""
        End If
     
        If .ListRows.Count = 1 And .ListRows(1).Range.Cells(1, 1) = "" Then
            Set LignTablo = Sheets("Data saisies").ListObjects("Data_saisies").ListRows(1)
        Else
            Set LignTablo = Range("Data_saisies").ListObject.ListRows.Add(AlwaysInsert:=True)
        End If
    End With
     
    With LignTablo.Range
        .Cells(1, 1) = CDbl(Me.Textcodearticle.Value)
        .Cells(1, 2) = Textdesignation
        .Cells(1, 3) = Textdate
        .Cells(1, 5) = CDbl(Me.Textquantite.Value)
        Textquantite.Value = Format(Textquantite.Value, "$#,##0,00")
    End With
     
    Unload sortie
     
    Sheets("Data saisies").Protect
    sortie.Show
    End Sub

  10. #10
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Une ligne m'aurais suffit ! c'est laquelle ... il est ou le moins ?

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Lol désolé,

    le code original:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     .Cells(1, 5) = CDbl(Me.Textquantite.Value)
        Textquantite.Value = Format(Textquantite.Value, "$#,##0,00")
    le test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     .Cells(1, 5) = -Val(Me.Textquantite)

  12. #12
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Et donc ce code ne marche pas ??? lorsque tu change ta valeur de quantité celle-ci ne s'affiche pas dans ta cellule ? ou s'affiche en positif ?

  13. #13
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,
    et comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Cells(1, 5) = -CDbl(Me.Textquantite.Value)
    Textquantite.Value = Format(Textquantite.Value, "$#,##0,00")
    chez moi, ça fonctionne
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Merci poour vos deux réponses,

    bbil, si j'utilise le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     .Cells(1, 5) = -Val(Me.Textquantite)
    une valeur positive arrive sur Excel

    casefayere, idem pour ta solution.

    J'ai essayé de bidouiller la solution de Philippe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        .Cells(1, 5) = Textquantite.Value
    With ThisWorkbook.Worksheets("Data saisies")
      With .Cells(1, 5)
      .Value = -Val(Me.Textquantite)
      .NumberFormat = "#,##0.00"
      End With
     End With
    Mais il faudrait que la ligne
    soit dynamique.

  15. #15
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Qu'entends-tu par "soit dynamique." ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    En fait chaque entrée dans le userform ajoute une ligne dans le tableau cible.

    Si j'utilise l'option .Cells(1,5) la valeur du Textbox va toujours s'incrémenter dans en "E1" alors que je voudrais qu'elle s'incrémente dans la colonne E pour chaque nouvelle ligne créée.

    La méthode utilisée pour créer une ligne à chaque saisie est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    With Sheets("Data saisies").ListObjects("Data_saisies")
        If .ListRows.Count = 0 Then
            Range("Tableau1[[#Headers],[Nom]]").Offset(1, 0) = 1
            Range("Tableau1[[#Headers],[Nom]]").Offset(1, 0) = ""
        End If
     
        If .ListRows.Count = 1 And .ListRows(1).Range.Cells(1, 1) = "" Then
            Set LignTablo = Sheets("Data saisies").ListObjects("Data_saisies").ListRows(1)
        Else
            Set LignTablo = Range("Data_saisies").ListObject.ListRows.Add(AlwaysInsert:=True)
        End If
    End With

  17. #17
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bonjour,


    Citation Envoyé par zielite Voir le message
    ....
    bbil, si j'utilise le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     .Cells(1, 5) = -Val(Me.Textquantite)
    une valeur positive arrive sur Excel
    ...
    oui mais il y as quoi dans ton textbox ? la même valeur que dans ta cellule ??

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Oui la valeur est la même que celle entrée dans le Textbox

  19. #19
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Ben alors je comprends pas si la valeur dans la cellule devrait afficher la valeur saisie dans ton textbox précédée d'un moins ... , n'as tu pas changé le format d'affichage de ta cellule ? si tu saisie un nombre négatif dans cette cellule tu vois bien le moins ?

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Le format de ma cellule est standard.

    Lorsque je saisi une valeur négative dans le Textbox, j'ai bien une valeur négative sur mon tableau Excel. J'avais réussi au départ avec la méthode Textquantite.Value = Format(Textquantite.Value, "$#,##0,00") où le $ doit normalement transformer la valeur positive en valeur négative mais cela ne fonctionne plus sans raison apparente.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/04/2014, 15h25
  2. Réponses: 0
    Dernier message: 13/07/2011, 20h57
  3. Réponses: 1
    Dernier message: 08/10/2010, 23h09
  4. Pb copier une valeur d'une textbox vers une cellule
    Par whykiki dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/12/2007, 11h49
  5. Alimenter la valeur d'un textbox avec une requete
    Par planetevoyage dans le forum Access
    Réponses: 2
    Dernier message: 12/09/2005, 08h26

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