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 :

VBA excel: Ajouter des zéros après une virgule


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
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Par défaut VBA excel: Ajouter des zéros après une virgule
    Bonjour,

    Je possède deux colonnes avec des chiffres dans ce style là:

    16,265 <-> 16265
    19,324<-> 19324
    1,25<-> 1250
    1,9<-> 1900
    etc...

    Ces chiffres proviennent d'une extraction d'un progiciel qui me les donne tels quels, impossible de changer la mise en forme.

    Le problème vient donc de la virgule, au lieu de mettre 1,900 excel me met 1,9
    Donc si j'enlève toutes les virgules j'ai un problème de valeur évident.

    Voici ce que je voudrais obtenir :
    16,265 <-> 16265
    19,324<-> 19324
    1,25<-> 1250
    1,9<-> 1900

    Je sais quelles sont les étapes à effectuer mais je ne sais pas programmer, pouvez-vous m'aider à entre le code suivant?

    si pas de virgule --> ne rien faire
    si 3 chiffres après la virgule--> ne rien faire
    si 2 chiffres après la virgule --> ajouter 1 zéro
    si 1 chiffre après la virgule --> ajouter 2 zéros

    Puis enlever la virgule
    Puis faire un séparateur de millier


    En espérant apprendre des choses,
    Sincères salutations,
    Anita

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11
    Par défaut Précisions, svp!
    Hello,

    J'ai un petit doute sur l'expression du besoin: en fait, je pense que s'il n'y a pas de virgule, il faut ajouter 3 zéros au lieu de ne rien faire, comme indiqué. Correct?

    Les chiffres reçus du progiciel sont formattés en millier avec la virgule symbolisant cette unité avec -si j'ai bien compris- l'absence de valeurs inférieures à 1.00 (e.g. 123.45 est reçu comme 123). Toujours correct?

    Par ailleurs, qu'en est-il des montant supérieurs à 999'999.99? Les montants reçus sont-ils au format 1,000,000 ou en est-il autrement?

    Avec des réponses précisant ces points, on devrait pouvoir aisément progresser.

    A plus!

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je reprends ton exemple
    16,265 <-> 16265
    19,324<-> 19324
    1,25<-> 1250
    1,9<-> 1900
    En supposant que les nombres décimaux se trouvent en colonne A et que tu souhaites voir le résultat en colonne B, tu fais simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(NoLigne, 2).value = Cells(NoLigne, 1).value * 1000

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Je reprends ton exemple
    16,265 <-> 16265
    19,324<-> 19324
    1,25<-> 1250
    1,9<-> 1900
    En supposant que les nombres décimaux se trouvent en colonne A et que tu souhaites voir le résultat en colonne B, tu fais simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(NoLigne, 2).value = Cells(NoLigne, 1).value * 1000
    J'ai effectivement pensé à ça mais j'ai des chiffres inférieurs à 1000

    Exemple 566

    Si je multiplie tout par mille 566 deviendra 566 000 ce qui est une erreur

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

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Par défaut
    Citation Envoyé par loris Voir le message
    Hello,

    J'ai un petit doute sur l'expression du besoin: en fait, je pense que s'il n'y a pas de virgule, il faut ajouter 3 zéros au lieu de ne rien faire, comme indiqué. Correct?

    Les chiffres reçus du progiciel sont formattés en millier avec la virgule symbolisant cette unité avec -si j'ai bien compris- l'absence de valeurs inférieures à 1.00 (e.g. 123.45 est reçu comme 123). Toujours correct?

    Par ailleurs, qu'en est-il des montant supérieurs à 999'999.99? Les montants reçus sont-ils au format 1,000,000 ou en est-il autrement?

    Loris tu as raison je vais clarifier un peu mieux les choses:

    Le progiciel me renvoie des valeurs entières comprises entre 0 et parfois plusieurs centaines de millions.
    Jamais de décimales.

    donc si il n'y a pas de virgules, cela veut dire que le chiffre est inférieur à 1000, donc il ne faut surtout pas ajouter des zéros et le laisser tel quel


    si le progiciel renvoie 1,256 cela signifie 1256
    pour 1,9 cela signifie 1900
    pour 854 cela signifie 854
    pour 94,521,21 cela signifie 94521210



    Donc en fait il faudrait programmer ceci :

    Cas 1:pas de virgule
    - ne rien faire

    Cas 2: une ou plusieurs virgule(s)
    -si 3 chiffres après la dernière virgule--> ne rien faire
    -si 2 chiffres après la dernière virgule --> ajouter 1 zéro
    -si 1 chiffre après la dernière virgule --> ajouter 2 zéros

    Puis enlever les virgules (en générale je passe par excel : ctrl-h et je remplace "," par "")
    Puis faire un séparateur de millier

  6. #6
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 455
    Par défaut
    Bonjour

    Essaies ça et tiens moi au courant

    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
    Sub Anita()
     
    Dim counter As Integer
    Dim Position As Integer
    Dim j As Integer
    Dim W As Integer
     
     
    For counter = 1 To Feuil1.Cells(65536, 1).End(xlUp).Row
     
        If Cells(counter, 1).Value Like "*,*" Then
                For j = 1 To Len(Cells(counter, 1).Value)
                    If Mid(Cells(counter, 1).Value, j, 1) = "," Then
                        Position = j
                    End If
                Next j
                    If Len(Cells(counter, 1).Value) - Position = 1 Then
                            Cells(counter, 2).Value = Cells(counter, 1).Value & "00"
                        ElseIf Len(Cells(counter, 1).Value) - Position = 2 Then
                            Cells(counter, 2).Value = Cells(counter, 1).Value & "0"
                    Else
                        W = InStr(1, StrReverse(Cells(counter, 1).Value), ",") + 1
                            If InStr(W, StrReverse(Cells(counter, 1).Value), ",") = 0 Then
                                Cells(counter, 2).Value = CInt(Format(Cells(counter, 1).Value * 1000, "#,##0"))
                            Else
                                Cells(counter, 2).Value = Cells(counter, 1).Value
                            End If
                    End If
     
            Else
              Cells(counter, 2).Value = Cells(counter, 1).Value
     
        End If
     
    Next counter
     
    End Sub
    Bien évidemment, tes données sont dans la colonne A et tes résultats sont dans la colonne B.

  7. #7
    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
    Bonjour,

    pas le temps de peaufiner, mais voilà une idée (qui marche) à alléger comme tu l'entends ...

    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
    Private Sub Command1_Click()
      Dim toto As String
      toto = "1,9"
      MsgBox toto & " ===>> " & convertir(toto)
      toto = "854"
      MsgBox toto & " ===>> " & convertir(toto)
      toto = "94,521,21"
      MsgBox toto & " ===>> " & convertir(toto)
    End Sub
     
    Private Function convertir(toto As String)
      Dim titi
      If InStr(toto, ",") = 0 Then
        convertir = toto
        Exit Function
      End If
      convertir = ""
      titi = Split(toto, ",")
      For i = 0 To UBound(titi) - 1
        convertir = convertir & titi(i)
      Next
      toto = titi(UBound(titi))
      convertir = convertir & toto & String(3 - Len(toto), "0")
    End Function

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

Discussions similaires

  1. [VBA-EXcel] classement des noeuds d'une treeview dans l'ordre alphabétique
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/01/2017, 19h02
  2. vba excel translation des données d'une feuille à l'autre
    Par Marc31 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/09/2010, 15h31
  3. Ajouter deux zéros après la virgule
    Par abbd dans le forum Windows Forms
    Réponses: 1
    Dernier message: 16/02/2009, 13h28
  4. VBA EXCEL : Concaténation des cellules d'une colonne
    Par kikaillo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/07/2007, 17h37
  5. Réponses: 7
    Dernier message: 11/08/2006, 14h26

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