Garder les 0 apres la virgule....
Résolu
GermPeru
Messages postés
175
Statut
Membre
-
GermPeru Messages postés 175 Statut Membre -
GermPeru Messages postés 175 Statut Membre -
Bonjour a tous,
Mon probleme est le suivant:
J' ai des formules dans une feuille, je souhaite récupérer la valeur du résultat ainsi que son format.
Par exemple le résultat est 2.000, je souhaite garder les 3 zéro aprés la virgule.
Si il y a avait toujours le meme format ca serait plus simple mais je peux avoir de 3 a 5 decimales et mon nombre de zero est utile pour determiner mon nombre de chiffre significatif pour des calculs futur.
J´ai essayé le len, mais dans mon exemple du 2.000 il m´indique 1, et ne prend pas en compte les zero, j´ai essayé de changé en string ma valeur pour le len mais rien y fait.
Je ne pense pas que cela soit si compliqué mais je n´y suis pas arrivé alors un petit coup de main ne serait pas de refus!
Merci d ' avance!
Mon probleme est le suivant:
J' ai des formules dans une feuille, je souhaite récupérer la valeur du résultat ainsi que son format.
Par exemple le résultat est 2.000, je souhaite garder les 3 zéro aprés la virgule.
Si il y a avait toujours le meme format ca serait plus simple mais je peux avoir de 3 a 5 decimales et mon nombre de zero est utile pour determiner mon nombre de chiffre significatif pour des calculs futur.
J´ai essayé le len, mais dans mon exemple du 2.000 il m´indique 1, et ne prend pas en compte les zero, j´ai essayé de changé en string ma valeur pour le len mais rien y fait.
Je ne pense pas que cela soit si compliqué mais je n´y suis pas arrivé alors un petit coup de main ne serait pas de refus!
Merci d ' avance!
3 réponses
-
Bonjour à tous les deux
Car je qualifierai ton style d´ecriture comme assez profesionnel!
Je te trouve un peu dur avec yves qui essaies de t'aider, il est difficile d'y voir clair sans avoir un/des exemple/s (réels) de ton problème ou sans boule de cristal efficace ;-)
Peux tu envoyer un bout de ton fichier sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu
1) Tu vas dans https://www.cjoint.com/
2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
en bleu souligné ; tu le sélectionnes et tu fais "Copier"
5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse tu fais "Coller".
Cdlmnt-
Bonjour ccm81,
Concernant yves et son style d´écriture pro je le disais comme un compliment, et j´espére qu il l'a interprété tel quel!
Concernant mon fichier il est un peu lourd mais voici le bout de code:
Avant tout ce que je fais c´est ouvrir un fichier et rechercher certaines info au sein de ce fichier et j´essaye de les enregistrer dans un array
ReDim TBDatos(1 To intNbLi, 1 To 4) iNbLi = 1 While iNbLi <= intNbLi For jNbLi = 1 To 10 With wbSource.Sheets("1") If .Cells(DbLinCod + jNbLi, 1) <> "" Then For iTB = 1 To 4 If iTB = 1 Then TBDatos(iNbLi, iTB) = CStr(.Cells(DbLinCod + jNbLi, 1)) 'cod mp ElseIf iTB = 2 Then TBDatos(iNbLi, iTB) = CStr(.Cells(DbLinCod + jNbLi, 2)) ' desc mp ElseIf iTB = 3 Then TBDatos(iNbLi, iTB) = CStr(.Cells(DbLinCod + jNbLi, 6)) 'Unidad ElseIf iTB = 4 Then If .Cells(DbLinCod + jNbLi, 8) = "" Then TBDatos(iNbLi, iTB) = CDbl(.Cells(DbLinCod + jNbLi, 7)) Else TBDatos(iNbLi, iTB) = CDbl(.Cells(DbLinCod + jNbLi, 8)) End If Next iNbLi = iNbLi + 1: DbLinCod = DbLinCod + jNbLi: Exit For End If End With Next Wend
Je suis ouvert a toute forme de critique car c´est la premiere fois que j´utilise une variable tableau. De plus voyant mon style d´écriture tu comprendras pourquoui je qualifie celui de yves comme "pro"!
Mais la ligne concernant ma question est la suivante:
If .Cells(DbLinCod + jNbLi, 8) = "" Then TBDatos(iNbLi, iTB) = CDbl(.Cells(DbLinCod + jNbLi, 7)) Else TBDatos(iNbLi, iTB) = CDbl(.Cells(DbLinCod + jNbLi, 8))
Merci d´avance!
Bonjour GermPeru,
Merci d'avoir qualifié mon style d'écriture de professionnel, ce qui est
d'ailleurs le cas de nombreux autres intervenants du site CCM.
Lis mon message du 25 juillet à 22:15, puis n'oublie pas de revenir à celui-ci :
le fichier Excel joint ci-après contient ton code VBA réécrit et commenté
(tu sais déjà qu'il faut faire Alt F11 pour aller sur Microsoft Visual Basic).
https://mon-partage.fr/f/yYlRMK5u/
⚠ Comme il manque 2 indications dans ton extrait de code, il faudra
les ajouter avant d'utiliser mon code VBA (impératif) ; c'est indiqué
très clairement dans les commentaires.
Il y aura peut-être une ou deux adaptations à faire.
Merci de me donner ton avis.
-
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, une piste de réflexion (cela ne marche pas pour tous les formats):Format(ActiveSheet.Cells(10, 10).Value, ActiveSheet.Cells(10, 10).NumberFormat)
-
Bonjour GermPeru,
Ce code VBA devrait t'aider :
Option Explicit Function SetNb(r As Double, n As Byte) As String SetNb = Format(r, "0." & String$(n, "0")) End Function Sub Essai() Dim r As Double: r = 2 MsgBox SetNb(r, 3) MsgBox SetNb(r, 5) MsgBox SetNb(r, 1) End Sub
Merci de me donner ton avis.
-
-
Sur une feuille vierge, entre 2 en B2 (par exemple) ; et mets-lui
ce format simple : Nombre avec 3 décimales => 2,000
Mon code VBA retournera 3 pour 3 décimales, mais attention :
ça ne marche que pour des formats de nombres simples ;
pas pour d'autres ; tels que : 0.000;-0.000;;
Essaye ce code VBA :
Option Explicit Function Nb0(cellX As Range) As Byte Dim chn As String, p As Byte, n As Byte chn = cellX.NumberFormat: p = InStr(chn, "."): n = Len(chn) - p If Right$(chn, n) = String$(n, "0") Then Nb0 = n End Function Sub Essai() MsgBox Nb0([B2]) End Sub
Pour des formats plus complexes, à toi de voir selon les formats
(personnalisés ou non) qui sont utilisés par ta feuille de calcul.
-
Bonjour Yves,
J' ai essayé de comprendre ton code avant de te répondre avec précipitation. Car je qualifierai ton style d´ecriture comme assez profesionnel!
De plus j´ai fait différents tests, donc la grande partie du temps j´ai ma cellule en format texte, a partir de ce moment la ta fonction ne fonctionne plus car il ne détecte pas les 0 en fin et j´ai essayé en format général avec ajout de 3 0 aprés la virgule et de meme le msgbox m´indique 0?
Pourrais tu m´en dire un peu plus stp.
Merci Yves -
Bonjour GermPeru,
Si la cellule B2 est en format texte, et que tu utilises le point comme
séparateur décimal, alors pour 2.000 et pour 2.375 : retour 3, avec
ce nouveau code VBA :
Option Explicit Function Nb0(cellX As Range) As Byte Dim p As Byte: p = InStr(cellX, ".") If p > 0 Then Nb0 = Len(cellX) - p End Function Sub Essai() MsgBox Nb0([B2]) End Sub
Si tu utilises la virgule comme séparateur décimal,
mettre : p = InStr(cellX, ",")
À te lire pour avoir ton avis.
-
Bonjour Yves,
Dans la cellule de mon document source j´ai une formule selon un fomat, j´ai utilisé ta fonction et cela m´indique toujours 0... Je ne comprends pas trop.
Je rsume:
-document source protéger mais je peux copier les info
-formule dans ma cellule cible
-format general de ma cellule cible 2.000, j´ai vérifié et ce n´est pas une ","
Resultat de ta fonction = 0
Resultat de .value = 2
Merci de ton aide
-