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 :

arrondir une plage de données


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Février 2017
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Février 2017
    Messages : 82
    Par défaut arrondir une plage de données
    Bonjour à tous,
    voila j'ai des données dans les cellules comprises entre D4:J16
    je souhaite arrondir la valeur de chaque cellule via Roundup(,-1).

    Mais le truc bête je ne trouve pas le code....

    j'ai utilisé le code ci-dessous pour trouver les valeurs vides et mette 0 à la place, mais je n'arrive pas à greffer la fonction arrondir pour les valeurs différentes de 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For g = 2 To 9
      Range("D4:J16").Columns(g).SpecialCells(xlCellTypeBlanks) = 0
      Next g
    je pensais ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("D4:J16").Columns(g) = WorksheetFunction.RoundUp(Range(Cells(5, g), Cells(16, g)), -1)
    mais du coup j'ai une erreur d’exécution 13.

    Où est l'erreur?

    Merci par avance de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
     Range("D4:J16") = "1.123456789"
      Range("D4:J16").NumberFormat = "#0"
      Range("D4:J16").Value = Range("D4:J16").Text
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Février 2017
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Février 2017
    Messages : 82
    Par défaut
    Merci dysorthographie
    Mais cela n'arrondit pas une valeur de 3758 en 3760 située en D5 ou 2383 en 2380 en J6...

  4. #4
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Février 2017
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Février 2017
    Messages : 82
    Par défaut
    bon j'ai trouvé une solution. En regardant de plus près je devais arrondir les colonnes D, E et J et pas les autres.

    Du coup je suis passé par ce 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
    16
    17
    18
    19
     
    'fait les arrondis sur toutes les lignes entre 5 et 16
    l = 4
    For p = 5 To 16
    If l = 6 Then
    l = 10
    End If
    ' pour éviter de remplir toutes les colonnes du classeur....
    If l > 10 Then
    Exit For
    End If
     
    Cells(p, l) = WorksheetFunction.RoundUp(Cells(p, l), -1)
    'passe à la colonne suivante
    If p = 16 Then
    l = l + 1
    p = 4
    End If
    Next p
    pas beau mais je n'ai pas mieux en stock...

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    il suffit pourtant d'une unique ligne de code par plage contigüe et remplaçant au passage les cellules vides par un zéro !

    Exemple :   [D5:E16].Value = [IF(D5:E16="",0,ROUNDUP(D5:E16, -1))]   …

    ___________________________________________________________________________________________________________

          Merci de cliquer sur en bas à droite de chaque message ayant aidé puis sur pour clore cette discussion …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  6. #6
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par nouveauvba Voir le message

    pas beau mais je n'ai pas mieux en stock...
    Un code est beau quand il fonctionne. Ton code fonctionne, donc il est beau.

    Tu pourrais aussi mettre tes colonnes dans une table ou un Array, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ar = Array(0, 4, 5, 10)
     For p = 5 To 16
      For col = 1 To 3
       Cells(p, ar(col)).Select 'ligne a supprimer
       Cells(p, ar(col)) = WorksheetFunction.RoundUp(Cells(p, l), -1)
      Next
     Next
    Ca fonctionne aussi.

  7. #7
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Février 2017
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Février 2017
    Messages : 82
    Par défaut
    Bonjour Marc-L et Docmarti et les autres.

    Merci pour vos réponses super constructives.

    Marc-L j'adore cette ligne de code simple et efficace...

    Par contre pour ma culture personnelle quelqu'un peut expliquer la raison des [] ils servent à quoi ([D5:E16].Value = [IF(D5:E16="",0,ROUNDUP(D5:E16, -1))])???

    Docmarti ton code est intéressant je vais voir si je peux l’intégrer en amont car les données que j'arrondis sont issues d'un array....


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

Discussions similaires

  1. Arrondir une plage de données
    Par Wismer01 dans le forum Excel
    Réponses: 6
    Dernier message: 21/04/2016, 17h12
  2. [VBA-E] tester la valeur d'une plage de données sans boucle
    Par bibi5883 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/04/2007, 08h36
  3. Réponses: 1
    Dernier message: 09/03/2007, 07h52
  4. [VBA-E]Déclaration d'une plage de données
    Par illight dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 02/02/2007, 16h13
  5. [VBA-E] Selection d'une plage de données problématique
    Par Fab117 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/01/2007, 14h41

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