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 :

Formater chiffres à 6 nombres en conservant les zéros devant


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut Formater chiffres à 6 nombres en conservant les zéros devant
    Bonjour,

    Dans le cadre d'un retraitement de fichier, je dois conserver des numéros de compte à 6 chiffres. Problème : lorsque le numéro de compte est par exemple, "013000", alors avec le bout de code ci-dessous, j'obtiens "13000" alors que je voudrais "013000".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    With Sheets("Retreated data")
     
            Dim LR1 As Long, MyRange As Range
            LR1 = .Cells(.Rows.Count, 1).End(xlUp).Row
     
                For Each MyRange In .Range("E2:E" & LR1)
                    MyRange.Value = Format(MyRange.Offset(0, -4).Value & MyRange.Offset(0, -3).Value, "000000")
                    MyRange.Offset(0, 1).Value = MyRange.Offset(0, -2).Value - MyRange.Offset(0, -1).Value
     
                Next MyRange
     
        End With
    Pourriez-vous m'aider SVP à formater mon numéro de compte à 6 digits ?
    Merci d'avance !
    Runsh

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Une proposition en formatant les colonne E et F et en évitant la boucle
    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
    Sub test()
    Dim LR1 As Long
     
    With Sheets("Retreated data")
        LR1 = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range("E2:F" & LR1).NumberFormat = "000000"
        With .Range("E2:E" & LR1)
            .Formula = "=A2&B2"
            .Value = .Value
        End With
        With .Range("F2:F" & LR1)
            .Formula = "=C2-D2"
            .Value = .Value
        End With
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre confirmé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut
    Bonjour mercatog,

    Merci beaucoup pour ta réponse, ça marche parfaitement. Une question cependant : quel est l'intérêt de limiter les boucles ? A chaque fois tu me les supprimes, tout du moins tu me conseilles fortement de le faire.
    Runsh

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    quel est l'intérêt de limiter les boucles ?
    Les boucles sur les cellules prennent plus de temps qu'une solution directe (du moins pour les grandes quantités de données)
    Bon c'est un choix à prendre, je ne supprime pas ton code, mais je propose une autre alternative au cas où.

    Sinon, ton code sera ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim LR1 As Long
    Dim MyRange As Range
     
    With Sheets("Retreated data")
        LR1 = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range("E2:F" & LR1).NumberFormat = "000000"
        For Each MyRange In .Range("E2:E" & LR1)
            MyRange.Value = MyRange.Offset(0, -4).Value & MyRange.Offset(0, -3).Value
            MyRange.Offset(0, 1).Value = MyRange.Offset(0, -2).Value - MyRange.Offset(0, -1).Value
        Next MyRange
    End With
    End Sub
    Teste les 2 codes sur un fichier de 5000lignes, tu comprendras l'intérêt.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre confirmé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut
    Je n'avais pas mal pris ta réponse, quand je dis "supprimer" mon code, c'est histoire de... Il faudrait être bête pour un débutant comme moi de ne pas suivre tes conseils, j'en suis d'ailleurs très friand car ils me font progresser. Je voulais juste comprendre, voilà tout.
    Merci pour tes explications, je tenterai à l'avenir de limiter mes boucles car en effet, mes fichiers à traiter vont de 600 à 40000 lignes (c'est très disparate !).
    Runsh

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Il y a une autre méthode assez rapide, c'est l'utilisation des variables tableaux.
    Exemple, pour ton code
    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
    Sub Test()
    Dim LR1 As Long, i As Long
    Dim Tablo
     
    With Sheets("Retreated data")
        LR1 = .Cells(.Rows.Count, 1).End(xlUp).Row
        Tablo = .Range("A2:F" & LR1)
        For i = 1 To UBound(Tablo, 1)
            Tablo(i, 5) = Tablo(i, 1) & Tablo(i, 2)
            Tablo(i, 6) = Val(Tablo(i, 3)) - Val(Tablo(i, 4)) 'J'ai mis Val au cas où un valeur non numérique existe
        Next i
        .Range("E2:F" & LR1).NumberFormat = "000000"
        .Range("A2:F" & LR1) = Tablo
    End With
    End Sub
    Ici on utilise des boucles sur des variables tableaux, c'est assez rapide.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Membre confirmé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut
    Bonjour mercatog,

    Merci bien pour cette nouvelle technique, qui je pense pourra m'être utile dans beaucoup de cas car la totalité de mes macros consistent en du data crunshing de ce genre. J'avais déja vu par ailleurs l'expression UBound mais sans savoir ce qu'elle faisait préciemment et je n'ai malheureusement pas pris le temps de m'intéresser de plus prêt aux tutos de ce forum qui sont extrêmement bien réalisés.
    Encore merci, bonne journée !
    Runsh

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

Discussions similaires

  1. Format d'un nombre avec les zéros devant
    Par walter_man dans le forum VBScript
    Réponses: 11
    Dernier message: 29/04/2010, 17h51
  2. Conserver les zéros d'un textbox
    Par Vincinho dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/04/2010, 11h04
  3. Formater une cellule nombre pour eviter les dieses
    Par z89bo198 dans le forum Excel
    Réponses: 1
    Dernier message: 12/07/2009, 18h06
  4. Conserver les zéros non significatifs
    Par pc75 dans le forum ASP
    Réponses: 19
    Dernier message: 13/02/2009, 07h31
  5. Réponses: 9
    Dernier message: 20/03/2006, 09h59

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