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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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 : 45
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    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 !

  2. #2
    Expert éminent 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
    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

  3. #3
    Membre éclairé 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 : 45
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    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.

  4. #4
    Expert éminent 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
    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.

  5. #5
    Membre éclairé 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 : 45
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    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 !).

  6. #6
    Expert éminent 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
    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.

+ 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