Aide pour macro modifiant le format de nombre

Bonjour,

j'essaye d'apprendre a mes servir des macro mais il y a un cas pratique que je n'arrive pas a faire.

Cela parait simple (facile a faire en mise en forme conditionnelle) mais je crois que ce qui me bloque c'est de ne pas savoir me servir des variables.

objectifs : sur une liste de données faire afficher le bon nombre de décimale en fonction de la valeurs affiché dans la cellule.

Dans l'exemple joint ce qu'il me faut modifier sont les colonnes B, E, F ( avec un maximum de 200 lignes)

j'ai commencé a faire une base de macro, mais je ne sais pas du tout comment faire pour affecter le format à la cellule :

Sub decimale()

Dim c As Range

    For Each c In Range("B7:B200")
        If IsNumeric(c) Then
            If c = 0 Then
            NumberFormat = "0"
            If c < 0.01 Then
            NumberFormat = "0.00000"
            ElseIf c < 0.1 Then
            NumberFormat = "0.0000"
            ElseIf c < 1 Then
            NumberFormat = "0.000"
            ElseIf c < 10 Then
            NumberFormat = "0.00"
            ElseIf c < 100 Then
            NumberFormat = "0.0"
            Else
            NumberFormat = "0"
            End If
        Else
        End If
      Next
   End Sub

ou je pensais utiliser plusieurs sub, avec la fonction case, mais le problème reste le même :

   Sub decimale2()

        Select Case Target.Value
        Case Is = 0: format0
        Case Is > 100: format0
        Case 10 To 100: format1
        Case 1 To 10: format2
        Case 0.1 To 1: format3
        Case 0.01 To 0.1: format4
        Case 0.001 To 0.01: format5
        End Select

End Sub
Sub format0()
c.NumberFormat = "0"
End Sub
Sub format1()
c.NumberFormat = "0.0"
End Sub
Sub format2()
c.NumberFormat = "0.00"
End Sub
Sub format3()
c.NumberFormat = "0.000"
End Sub
Sub format4()
c.NumberFormat = "0.0000"
End Sub
Sub format5()
Set c.NumberFormat = "0.00000"
End Sub

Merci beaucoup pour votre aide

4test-macro.xlsx (12.02 Ko)

point bonus: je ne me suis pas encore penché dessus, mais il faut que je trouve comment faire en sorte d'appliquer les meme format aux cellules qui sont placés a côté de min et max, avec des si une cellule en B contient "min" alors appliquer une macro precedente a la cellule C

Bonjour,

Vous étiez sur la bonne piste, il suffisait d'un mix de vos deux solutions :

Sub decimale()
Dim c As Range
For Each c In Application.Union(Range("B7:B200"), Range("C23:C26"))
    If IsNumeric(c) Then
        Select Case c
            Case 0: c.NumberFormat = "0"
            Case Is > 100: c.NumberFormat = "0"
            Case 10 To 100: c.NumberFormat = "0.0"
            Case 1 To 10: c.NumberFormat = "0.00"
            Case 0.1 To 1: c.NumberFormat = "0.000"
            Case 0.01 To 0.1: c.NumberFormat = "0.0000"
            Case 0.001 To 0.01: c.NumberFormat = "0.00000"
        End Select
    End If
Next
End Sub

Cdlt,

PS : Pour votre question bonus j'ai utilisé Application.Union pour inclure une deuxième range dans la macro. Il vous suffirait de nommer cette range et ramener son nom dans la macro pour qu'elle soit inclue de façon dynamique :

For Each c In Application.Union(Range("B7:B200"), Range("MA_PLAGE"))

Merci beaucoup Ergotamine,

Merci beaucoup pour votre aide et cette reponse super rapide, il me manquait si peu . Je pensais qu'il me manquait un truc un peu plus complexe.

Pour le bonus je n'ai pas donné le détail contraignant :

Le fichier que j'ai mis en exemple n'est pas le vrai fichier, les cellules ne sont pas toujours sur la même ligne, et sont sur une colonne où je ne dois pas modifier le format des nombre... c'est pour ça que c'était plus complexe. Je pensais aussi à partir sur une piste de fonction recherche.

Merci encore :)

Bonjour,

Dans ce cas on peut aussi envisager ça, même si c'est un peu long (et surement optimisable) :

Sub decimale()
Dim c As Range
For Each c In Range("B7:B200")
    If IsNumeric(c) Then
        Select Case c
            Case 0: c.NumberFormat = "0"
            Case Is > 100: c.NumberFormat = "0"
            Case 10 To 100: c.NumberFormat = "0.0"
            Case 1 To 10: c.NumberFormat = "0.00"
            Case 0.1 To 1: c.NumberFormat = "0.000"
            Case 0.01 To 0.1: c.NumberFormat = "0.0000"
            Case 0.001 To 0.01: c.NumberFormat = "0.00000"
        End Select
    End If
    If c Like "*min*" Or c Like "*max*" Then 'On regarde si la cellule contient min ou max dans ce cas
        Select Case c.Offset(0, 1) 'On regarde la valeur de droite en décalant d'une colonne
            Case 0: c.Offset(0, 1).NumberFormat = "0"
            Case Is > 100: c.Offset(0, 1).NumberFormat = "0"
            Case 10 To 100: c.Offset(0, 1).NumberFormat = "0.0"
            Case 1 To 10: c.Offset(0, 1).NumberFormat = "0.00"
            Case 0.1 To 1: c.Offset(0, 1).NumberFormat = "0.000"
            Case 0.01 To 0.1: c.Offset(0, 1).NumberFormat = "0.0000"
            Case 0.001 To 0.01: c.Offset(0, 1).NumberFormat = "0.00000"
        End Select
    End If
Next
End Sub

Cdlt,

ça marche au top !!

Merci beaucoup pour votre aide,

bonne soirée et bonne semaine

Rechercher des sujets similaires à "aide macro modifiant format nombre"