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 :

Macro convertir nombre


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant SAP
    Inscrit en
    Janvier 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant SAP
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2020
    Messages : 29
    Par défaut Macro convertir nombre
    Bonjour je suis nouveau sur le forum et je débute sur VBA . je veux créer un code qui ouvre un fichier normé chaque mois
    Le fichier avec son format normé est : Balance 122019v20200107.xlsx ( MOIS-ANNEE V DATE DU JOUR DU FICHIER).
    Une fois le fichier ouvert je cherche à convertir en nombre les valeurs contenues dans la colonne A et cela à chaque qu'il ya une valeur qui existe dans la colonne A.
    Voici mon code actuellement , c'est incomplet et ma fonction conversion en nombre n'est pas concluante.
    Je vous remercie de votre aide par avance . l'objectif étant de m'appuyer sur vos connaissances

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Maj_GL()
    '
    ' Maj_GL Macro
    '
     
        Workbooks.Open Filename:= _
            "T:\Administratif & Financier\reportings mensuels\2019\12 Decembre 2019\J+5\Balance 122019v20200107.xlsx"
        Sheets("GL Général").Select
        Range("A:A").NumberFormat = "0.00"
     
    End Sub

  2. #2
    Membre éprouvé
    Homme Profil pro
    Fortune teller
    Inscrit en
    Octobre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Fortune teller

    Informations forums :
    Inscription : Octobre 2007
    Messages : 110
    Par défaut Macro convertir nombre
    Il faut d'abord connaitre le type de la donnée que tu as dans la colonne A avec la fonction Type() côté tableur. La fonction renvoie 1 si c'est un nombre et 2 si c'est du texte. Coté développeur, tu peux utiliser la fonction Cdbl pour forcer la conversion en Double (type décimal) cellule par cellule c'est-à-dire avec une boucle.

  3. #3
    Membre averti
    Homme Profil pro
    Consultant SAP
    Inscrit en
    Janvier 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant SAP
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2020
    Messages : 29
    Par défaut Macro convertir nombre
    Merci pour votre réponse . le contenu est de la colonne (A) est du texte. Par contre je ne saurais pas coder avec une boucle . Pouvez vous m'aider ?

    Merci

  4. #4
    Membre éprouvé
    Homme Profil pro
    Fortune teller
    Inscrit en
    Octobre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Fortune teller

    Informations forums :
    Inscription : Octobre 2007
    Messages : 110
    Par défaut Macro convertir nombre
    Essaye ça. La conversion en Double s'affiche dans la colonne 2.

    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 conversion()
     
        Dim i As Long, derniere_ligne As Long
     
        Worksheets(1).Select
     
        derniere_ligne = ActiveSheet.UsedRange.Rows.Count
     
        For i = 1 To derniere_ligne
     
            Cells(i, 2) = CDbl(Cells(i, 1))
     
        Next i
     
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Consultant SAP
    Inscrit en
    Janvier 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant SAP
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2020
    Messages : 29
    Par défaut
    Merci encore . Est il possible me documenter le code à chaque étape car je ne cherche pas à prendre des solutions toutes faites . L'objectif est de me former également

    Merci par avance

  6. #6
    Membre éprouvé
    Homme Profil pro
    Fortune teller
    Inscrit en
    Octobre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Fortune teller

    Informations forums :
    Inscription : Octobre 2007
    Messages : 110
    Par défaut Macro convertir nombre
    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 conversion()
     
        Dim i As Long, derniere_ligne As Long 'Déclaration de 2 variables de type Long (grand entier)
     
        Worksheets(1).Select 'Sélection de la première feuille du classeur
     
        derniere_ligne = ActiveSheet.UsedRange.Rows.Count 'Stockage dans la variable dernier_ligne du nombre de lignes de la plage de cellules utilisée (UsedRange)
     
        For i = 1 To derniere_ligne ' Boucle
     
            Cells(i, 2) = CDbl(Cells(i, 1)) 'Conversion en Double (décimal) des cellules de la colonne 1 vers les cellules de la colonne 2. Cells(ligne, colonne)
     
        Next i
     
    End Sub

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 138
    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 : 13 138
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Merci pour votre réponse . le contenu est de la colonne (A) est du texte. Par contre je ne saurais pas coder avec une boucle . Pouvez vous m'aider
    Il n'y a aucune raison d'utiliser une boucle pour formater dans une colonne précise l'ensemble des lignes de cette colonne et il n'y aucune raison d'utiliser la méthode Select en VBA (Sauf cas exceptionnel)

    La propriété permettant de formater un nombre est NumberFormat

    Exemple pour une cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     With ThisWorkbook.Worksheets("Feuil1")
     .Range("a2").NumberFormat = "#,##0.0#"
     End With
    Exemple pour une colonne entière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     With ThisWorkbook.Worksheets("Feuil1")
     .Range("a2:A20").NumberFormat = "#,##0.0#"
     End With
    mais évidemment ce n'est pas intéressant car ceci est "hardcodé"

    Pour connaître la plage complète d'une liste de données commençant en A1 et à condition bien entendu que la première ligne et la première colonne soient remplies on utilise la propriété CurrentRegion (pour une plage classique mais il est plus intéressant d'utiliser les tableaux structurés (objet ListObjects).)
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(A1").CurrentRegion
    Petit exemple pour le formatage de la colonne 2 (nombre avec séparateur de millier et deux décimales dont une obligatoire) et colonne 4 (date) d'une plage de données commençant en A1 de la feuille nommée Feuil1 du classeur où se trouve le code VBA

    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
    Sub t()
     ' Déclaration
     Dim rng As Range     ' Plage complète
     Dim rngData As Range ' Place uniquement des données
     ' Assignation
     Set rng = ThisWorkbook.Worksheets("Feuil1").Range("A1").CurrentRegion
     With rng
      Set rngData = .Offset(1).Resize(.Rows.Count - 1)
     End With
     ' Formatage des cellules des colonnes 2 et 4
     With rngData
     .Columns(2).NumberFormat = "#,##0.0#"
     .Columns(4).NumberFormat = "ddd* dd-mm-yyyy" ' Date
     End With
     ' Fin du process
     Set rng = Nothing: Set rngData = Nothing
    End Sub
    [EDIT]
    Attention : Ce que je viens d'expliquer n'a rien à voir avec le titre de ta discussion Macro convertir nombre mais bien un formatage. Ce n'est pas la même chose
    • S'il s'agit de faire de la conversion, il y a lieu d'utiliser les fonctions prévues à cet effet
    • S'il s'agit de remplacer des . par des , (possible avec des ouvertures de fichier csv ou txt il faudra utiliser la méthode Replace
    • S'il s'agit de reformater des dates qui proviennent également de fichier csv ou txt il y a deux types de formules à utiliser (cas de date en texte, cas de date nombre mais sous format mm-dd-aa
    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

  8. #8
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Bonjour le Fil,

    @Philippe : si comme tu le suggère les cellules contiennent du texte, le fait de changer le format ne suffit pas quand les cellules contiennent des valeurs (i.e. pas le résultat de formules).

    Il faudrait que le demandeur précise ça, en mettant l'alignement horizontal au format standard pour savoir comment sont cadrées les données.

  9. #9
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Bonjour,

    Simplement :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
       With Worksheets("GL Général").UsedRange.Columns(1)
          .NumberFormat = "General"
          .Value = .Value
       End With
    End Sub

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 138
    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 : 13 138
    Billets dans le blog
    53
    Par défaut
    Bonjour Patrice,
    @Philippe : si comme tu le suggère les cellules contiennent du texte, le fait de changer le format ne suffit pas quand les cellules contiennent des valeurs (i.e. pas le résultat de formules).
    D'où ma proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     With rngData
     .Worksheet.Cells.NumberFormat = "General"
     .Columns(2).NumberFormat = "#,##0.0#"
     .Columns(4).NumberFormat = "ddd* dd-mm-yyyy" ' Date
     End With
    du fil #9
    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

  11. #11
    Membre averti
    Homme Profil pro
    Consultant SAP
    Inscrit en
    Janvier 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant SAP
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2020
    Messages : 29
    Par défaut
    merci bien

    Merci Messieurs pour la qualité juste de ces échanges , juste un complément avant de clôturer cette discussion .
    Je comprends pas les synthaxe ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .NumberFormat = "General"
    .Value = .Value   ( porquoi on répéte 2 fois la propriété value ?)
    Et enfin si j'ai bien compris l'instruction usedRange va sélectionner automatiquement la plage de donnée en colonne 1 sans spécifier le nombre de lignes , car potentiellement mon fichier n'a jamais le même nombre de lignes .

    Bien cordialement

  12. #12
    Membre éprouvé
    Homme Profil pro
    Fortune teller
    Inscrit en
    Octobre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Fortune teller

    Informations forums :
    Inscription : Octobre 2007
    Messages : 110
    Par défaut Macro convertir nombre
    Citation Envoyé par Krimo1973 Voir le message

    Et enfin si j'ai bien compris l'instruction usedRange va selectionner automatiquement la plage de donnée en colonne 1 sans spécifier le nombre de lignes , car potentiellement mon fichier n'a jamais le même nombre de lignes .

    Bien cordialement
    UsedRange va sélectionner la plage utilisée, jusqu'à la dernière ligne et jusqu'à la dernière colonne et cela même (et c'est la différence avec CurrentRegion) s'il y a des lignes vides ou des colonnes vides, comme dans l'exemple ci-dessus.

  13. #13
    Membre averti
    Homme Profil pro
    Consultant SAP
    Inscrit en
    Janvier 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant SAP
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2020
    Messages : 29
    Par défaut
    Il manque ce point :
    Je ne comprends pas les syntaxes ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     .NumberFormat = "General"
     .Value = .Value ( porquoi on répète 2 fois la propriété value ?)
    Merci par avance

Discussions similaires

  1. [ksh] Convertir [nombre en millisecondes]=>[HH-MM-SS,mil]
    Par Adedib dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 31/05/2007, 20h27
  2. [Macros]Convertir macros en VBA
    Par Melhiril dans le forum IHM
    Réponses: 11
    Dernier message: 26/04/2007, 14h13
  3. convertir nombre en chaine de caratere fixe
    Par Emcy dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 06/02/2007, 10h42
  4. Macros et nombre d'arguments variable
    Par kaisse dans le forum C
    Réponses: 7
    Dernier message: 28/07/2005, 10h10
  5. [ABAP] Convertir nombre decimal en binaire
    Par danael dans le forum SAP
    Réponses: 3
    Dernier message: 04/04/2005, 12h17

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