[Catégorie modifiée VB6 -> VBA] format cellule avec condition en vba pour excel9

Résolu
campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013 - 18 oct. 2011 à 22:32
campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013 - 1 nov. 2011 à 19:36
bonjour à tous et merci pour le temps que vous passez pour nous
voici mon probléme
je voudrai dans les cellules b7:b37 me marquent pour un nombre entier ex (3) 3 kg
ou pour un nombbre avec décimale ex (4.25) 4.250 kg
merci d'avance
je vous donne un exemple
en b7 1.5
en b8 2
en b9 4.25
en b10 3
en b11 5.75
etc

30 réponses

campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013
22 oct. 2011 à 20:05
merci, je faisais juste le contraire
je cliquais sur code puis je mettais ma macro

Dim macellule As Range
For Each macellule In Range("A36:D36, C38:C55, C57:C62, J38:J61")
  If macellule.Value - Fix(macellule.Value) = 0 Then
  macellule.NumberFormat = "0 ""Kg"""   ' Formatage sans virgule
Else
macellule.NumberFormat = "0.000 ""Kg""" ' Formatage avec virgule
End If
Next


vous êtes tous formidable et toujours à l'écoute même des débutants
avec vous j'ai fais un grand pas et vous remercie pour tout
un retraité du 72
PS: peut être que ma macro servira à d'autres
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 oct. 2011 à 23:41
Salut

Note que tu fais du VBA, pas du VB6 --> Catégorie modifiée
Prêtes-y attention la prochaine fois. Merci.

Je ne comprends pas trop ce que tu herches à faire.
Est-ce le formatage des nombres qui te préoccupe ou bien veux-tu insérer des chiffres dans une série de cellules ?
Dans ce dernier cas, quelle est la suite logique de ces chiffres ? ou, en d'autres termes, comment veux-tu que le programme sache quel chiffre insérer ?
Dans le premier cas, puisque les cellules doivent avoir un format différent selon leur contenu, il faut traiter chaque cellule l'une après l'autre.
-1- Enumérer toutes les cellules d'un Range, ici B7:B37
--> For Each-Next ou For-Next
Ce genre de code se trouve dans n'importe quelle source VBA ou dans un grand nombre de question sur le forum.
-2- Mettre en forme les décimales d'une cellule se retrouve facilement en enregistrant une macro pendant que tu fais l'opération manuellement.
-3- Reste le If.
Là, il faut simplement vérifier si le chiffre a des décimales.
Suffit donc de retrancher la valeur entière du chiffre au chiffre lui même et vérifier si le résultat est 0 ou pas, exemple :
Dim maValeur As Single
maValeur = Range("B7").Offset(0, i).Value
If maValeur - Fix(maValeur) = 0 Then
    ' Formatage sans virgule
Else
    ' Formatage avec virgule
End If
Sachant que la variable 'i' sera l'index de la boucle For-Next dont je parle en -1-

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013
19 oct. 2011 à 09:37
Bonjour Jack
c'est le formatage des nombres qui m'intéresse
chaques cellules peuvent trés bien avoir un nombre entier ou un nombre avec décimale
et pour l'instant dans ma macro les cellules sont gérée avec 3 décimales avec
Selection.NumberFormat = "0,000\ K\g"
ce qui est trés bien pour les cellules comportant des décimales
mais pour que ma feuille soit plus lisible au lieu de me mettre 3.000 Kg
que je n'ai plus que 3. Kg avec un
Selection.NumberFormat = "0,\ K\g"
engros
si b7 comptient un chiffre entier prendre le format "0.\ K\g"
sinon prendre le format "0,000\ K\g"
et ainsi de suite pour toutes les autres cellules
merci d'avance
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 oct. 2011 à 09:49
Ok.
Alors je t'ai fourni la solution dans ma précédente réponse.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013
19 oct. 2011 à 11:08
re bonjour
mon formatatage n'est pas correct
pour 1.45 a formater j'ai maintenant 0 001 Kg au lieu de 1.450 Kg
ou pour 1.5 " "" "" 0 002 Kg " "1.500 Kg
ou pour 5 " " 0 005 Kg " " 5 Kg
je vous mets la macro

Sub macro01()
Dim maValeur As Single
Range("B7:B10").Select
maValeur = Range("B7").Offset(0, i).Value
If maValeur - Fix(maValeur) = 0 Then
Selection.NumberFormat = "0\ K\g" ' Formatage sans virgule
Else
Selection.NumberFormat = "0,000\ K\g" ' Formatage avec virgule
Range("A7").Select
End If
End Sub
avez-vous une solution
un grand merci pour ta patence
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
19 oct. 2011 à 11:18
Ce sont tes "0" qui ne sont pas bons !
Exemple :
Selection.NumberFormat = "0,000\ K\g" ' Formatage avec virgule
est à transformer ainsi :
Selection.NumberFormat = "#0,#00\ K\g"



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013
19 oct. 2011 à 11:43
merci pour ta réponse
maintenant je n'ai plus les 0 avec Selection.NumberFormat = "#,###\ K\g"
mais mon problème c'est qu'il arrondi mes chiffres
ex 1.4 est formaté en 1 KG ou 1.5 en 2Kg
comment éviter les arrondis
merci de votre réponse
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
19 oct. 2011 à 11:51
1) je t'ai montré :
"#0,#00\ K\g"

et tu as utilisé :
"#,###\ K\g" 


2 si, malgré cette utilisation, tu as encore un problème chez toi (que je n'ai pas en testant sur ma machine), c'est que tu as un autre problème dans ton code, totalement indépendant du formatage lui-même !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013
19 oct. 2011 à 12:13
ok
si je prends "#0,#00\ K\g" il me met un 0 puis un espace puis 2éme 0 devant mon chiffre
ex 0 01 Kg
c'est pour cela que j'ai mis que des "#" et mantenant j'ai bien 1 Kg pour les chiffre entier c'est parfait
je te renvois ma macro pour voir dout vient le probléme des arrondis
Sub macro01()
Dim maValeur As Single
Range("B7:B10").Select
maValeur = Range("B7").Offset(0, i).Value
If maValeur - Fix(maValeur) = 0 Then
Selection.NumberFormat = "0,\ K\g" ' Formatage sans virgule
Else
Selection.NumberFormat = "#0,#00\ K\g" ' Formatage avec virgule
Range("A7").Select
End If
End Sub
merci pour tout
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 oct. 2011 à 12:25
Tu as oublié la boucle définissant le 'i'
Voir le point -1- de ma première réponse.
Lis complètement les réponses qu'on te fait.

De plus, si tu pointes (par la boucle) une cellule avec l'Offset sur 'i' et que tu appliques le formatage à une autre cellule, Selection, ça ne sert à rien.
Il faut comprendre un minimum ce que tu fais : Regarde dans l'aide, fais des tests dans un coin, mais mettre bout à bout du code ne suffira pas.
0
campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013
19 oct. 2011 à 14:20
merci jack de m'avoir répondu
mais en VBA je n'y connais pas grand chose
peut-tu m'écrire la boucle a faire pour que cela fonctionne corectement
je te remerci par avance et merci pour le temps que tu me consacre
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 oct. 2011 à 23:41
Code qui se trouve dans n'importe quelle source VBA du site, je t'assure. Il suffit de chercher et d'analyser ce qui se passe.
Je t'ai donné les mots clé "For Each-Next" et "For-Next" : as-tu regarder dans l'aide, tester les exemples ?
Dim i As Integer
For i = 0 To 9
   MsgBox Range("B7").Offset(0, i).Adddress & " = " & _
          Range("B7").Offset(0, i).Value
Next i
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 oct. 2011 à 23:41
Un "d" de trop, à Address
0
campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013
21 oct. 2011 à 14:12
bonjour Jack et merci de m'avoir répondu
je te joints la macro que j'ai modifiée
maintenant il ne reconnait que la cellule b7 et met bien le format cellule suivant le nombre
mais le msgbox vat de "B7" à "C7", "D7"
au lieu de "B7", "B8","B9" etc
a tu une solution
peut-t-on supprimer la msgbox pour que la macro face le changement de format automatiquement
merci pour tout
Sub macro02()
Dim maValeur As Single
Dim i As Integer
maValeur = Range("B7").Offset(0, i).Value

For i = 0 To 31

If maValeur - Fix(maValeur) = 0 Then
Selection.NumberFormat = "0 ""Kg""" ' Formatage sans virgule
Else
Selection.NumberFormat = "0.000 ""Kg""" ' Formatage avec virgule

End If
MsgBox Range("B7").Offset(0, i).Address & " = " & _
Range("B7").Offset(0, i).Value
Next i
'Range("A7").Select
End Sub
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
21 oct. 2011 à 16:05
Bonjour,

Voilà ce que je te propose:
Sub eee()

Dim maValeur As Single
Dim i As Integer

For i = 7 To 38
  maValeur = Cells(i, 2).Value
  If maValeur - Fix(maValeur) = 0 Then
    Cells(i, 2).NumberFormat = "0 ""Kg""" ' Formatage sans virgule
  Else
    Cells(i, 2).NumberFormat = "0.000 ""Kg""" ' Formatage avec virgule
  End If
Next i

End Sub


Pour ton info:

Dans ton code, il fallait insérer
maValeur = Range("B7").Offset(0, i).Value

à l'intérieur de ta boucle For i (sinon ton formatage se limite à ton range "B7")

et remplacer Offset(0, i) par Offset(i, 0) pour un traitement par colonne au lieu d'un traitement par ligne.

Cordialement.
0
campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013
21 oct. 2011 à 18:29
bonjour GG72
Bravo cela marche à merveille
et un grand merci à tous pour votre dévouement
campagne72
0
campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013
22 oct. 2011 à 11:24
Bonjour a tous
maintenant sur une autre feuille toujours avec mes formats vellules je voudrais changer les cellule "A36:D36", "C58:C55","C57:C52", "J38:J61"
je pense qu'avec un For each cela doit être possible mais je ne sais pas le faire
je vous remerci d'avance.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
22 oct. 2011 à 11:42
Construit donc une plage avec la méthode Union (ouvre ton aide en ligne sur ce mot), puis travaille dans une boucle For Each.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013
22 oct. 2011 à 18:23
bonjour a tous
voici le code que j'ai écris mais cela ne marche pas
Sub Tester1()
Dim maValeur

For Each maValeur In Range("A36:D36, C38:C55, C57:C62, J38:J61")
If maValeur - Fix(maValeur) = 0 Then
Selection.NumberFormat = "0 ""Kg""" ' Formatage sans virgule
Else
Selection.NumberFormat = "0.000 ""Kg""" ' Formatage avec virgule
'Exit For
End If
Next maValeur

End Sub
avez-vous une solution
merci d'avance
Campagne 72
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
22 oct. 2011 à 18:33
Mais qu'est-ce que tu "fabriques", à mélanger ainsi les choses !

Voilà le principe :
Dim macellule As Range
For Each macellule In Range("A36:D36, C38:C55, C57:C62, J38:J61")
  If macellule.Value - fix(macellule.Value) = 0 then
      ....
  else
     ....
  end if
Next

Et fais comme GG72 et moi-même, s'il te plait ! (codse indenté et prészenté entre balises code).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous