Garder les 0 apres la virgule....

Résolu/Fermé
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018 - 20 juil. 2017 à 17:07
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018 - 27 juil. 2017 à 14:55
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!
A voir également:

3 réponses

ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
25 juil. 2017 à 08:06
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
0
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
25 juil. 2017 à 20:59
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!
0
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018 > GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
25 juil. 2017 à 21:54
Je tiens a preciser que mon intNbLi c´est mon nombre de ligne non vide mais vu que je peux avoir plusieur saut de lignes c´est pour cela que je fais 2 boucles
0
yves > GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
26 juil. 2017 à 00:50
 
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.
 
0
yg_be Messages postés 22697 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
25 juil. 2017 à 09:14
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)
0
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
25 juil. 2017 à 21:56
Bonjour yg_be

Je ne peux pas changer le format de ma cellule cible je je cherche juste a determiner le nomre de decimale apres la virgule mais lorsque c´est des 0 je n ´arrive pas a les detecter....

Merci de ton aide
0
yg_be Messages postés 22697 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
25 juil. 2017 à 22:08
je ne propose pas de changer le format de la celulle, je propose quelque chose comme:
TBDatos(iNbLi, iTB) = Format(.Cells(DbLinCod + jNbLi, 7).Value, .Cells(DbLinCod + jNbLi, 7).NumberFormat)

(cela ne marche pas pour tous les formats, donc à améliorer)
0
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018 > yg_be Messages postés 22697 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024
27 juil. 2017 à 14:48
Bjr,

Pour etre sincere avec toi, je ne connaissais pas du tout, je ne comprends pas encore pourquoi, mais cela fonctionne!

Je vais tester encore et encore pour voir les limites de compatibiliter de cette fonction!

Merci yg_be, et a bientot ;)
0
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.
 
-1
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
20 juil. 2017 à 17:58
Salut et merci de ta réponse,

ok pour ta fonction mais comment je fais pour determiner le n vu que c´est ce que je cherche a determiner?

Par exemple dans ma cellule je peux avoir 3, 4 ou 5 decimale mais je n´arrive pas a recuperer cette donnée?

Merci Yves
0
yves > GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
20 juil. 2017 à 18:37
 
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.
 
0
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018 > yves
24 juil. 2017 à 16:40
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
0
yves > GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
24 juil. 2017 à 17:02
 
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.
 
0
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018 > yves
25 juil. 2017 à 21:09
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
0