[LO Calc] Zéros non significatifs à droite

je vous mets les 2, vous choisirez.

Les fonctions sont assez basiques à comprendre. C'est l'imbrication qui peut être source d'erreur.

On est tous d'accord, on travaille sur des caractères qui en l’occurrence sont des chiffres, mais ne font l'objet d'aucun calcul. Ils sont donc à considérer comme du texte.

C'est donc sur ce texte que l'on travaille.

1- Selon le nombre de caractères significatifs, vous déterminez le nombre de zéro à ajouter, et vous concaténer (avec l'opérateur & pour simplifier)

Si votre valeur initiale est en A1 (comme le dit Jean Michel, il est préférable de travailler avec une colonne intermédiaire, de saisie, que vous pourrez masquer ensuite).

=A1&REPT("0";9-NBCAR(A1))

=> Vous calculez le nombre de caractères avec NBCAR

=> Vous répétez le nombre de zéro qu'il faut avec REPT (soit 9 moins les chiffres déjà présents...). C'est ce qui permet de définir le nombre de zéro non significatifs.

2- Si besoin, pour ajouter les espaces, pour la lecture...

je pense qu'il y a plusieurs solutions.

Après tout, vous pourriez reconsidérer que vous manipulez des valeurs, les convertir de nouveau (avec la fonction CNUM) puis appliquer le séparateur de milliers...

Ce que j'ai essayé me parait mieux (mais il faut gérer les imbrications). Il s'agît explicitement d'ajouter des espaces avec la fonction remplacer.

On indique que l'on remplace le 4e caractère avec un " ", et pour ne rient perdre, on remplace une longueur de 0 caractère.
On applique cette même opération pour le 8e caractère (il faut tenir compte de l'espace ajouté précédemment).

la formule précédente étant en C1, cela donne

=REMPLACER(REMPLACER(C1;4;0;" ");8;0;" ")

Pour tout englober (la valeur étant en A1)
=REMPLACER(REMPLACER(A1&REPT("0";9-NBCAR(A1));4;0;" ");8;0;" ")

ce qui est moins compliqué que je pensais au départ...

Le classeur exemple est dispo à cette adresse (pendant 1 mois). N'hésiteez pas à consulter l'aide pour des explications sur les fonctions citées...

https://drop.devloprog.org/r/nJHDZkTL1h#bmYX+tKqws/Kt/pLyL8JPojPF74JqffXZFw5iVKN4is=

Claire

Autre méthode pour avoir toujours 9 chiffres avec complément de 0 à droite

Dans la colonne A : taper le nombre simple

en B ajouter la formule :

=SI(NBCAR(A2)=9;A2;A2&REPT("0";9-NBCAR(A2)))

qui répète autant de 0 à droite que nécessaire [ REPT("0";9-NBCAR(A2)) ] pour avoir un mot de 9 lettres.

Mais je n'ai pas trouvé comment le formater pour avoir des blocs de 3 ensuite.

Sandy-Pascal Andriant

On va dire que ma réponse complète est chez le facteur, mais  c'est bien ce principe...
Pour les espaces : remplacer.
En espérant que le facteur retrouve will chemin avec le fichier exemple et toutes les explications

@Sandy: en fait on se passe du si, s'il y en a 9, il y aura 0 répétitions....

Claire

Bonjour, 
 
une astuce :
Dans le tableau prévoir une colonne supplémentaire (A par exemple) (qui ne sera pas imprimée)
dans cette colone Inscrire le code avec 0, devant (Ex : 512, on écrit 0,512)
Dans la colonne  prévue pour les codes  (colonne B par exemple, formatée # ##0) mettre la formule = An * 1000000000) (n étant le N° de ligne)
 
                   A               B

0,512
512 000 000

0,458932
458 932 000

0,7892
789 200 000

Bien cordialement
Philippe

Sujet : Re: [fr-users] [LO Calc] Zéros non significatifs à droite

je vous mets les 2, vous choisirez.

Les fonctions sont assez basiques à comprendre. C'est l'imbrication qui peut être source d'erreur.

On est tous d'accord, on travaille sur des caractères qui en l’occurrence sont des chiffres, mais ne font l'objet d'aucun calcul. Ils sont donc à considérer comme du texte.

C'est donc sur ce texte que l'on travaille.

1- Selon le nombre de caractères significatifs, vous déterminez le nombre de zéro à ajouter, et vous concaténer (avec l'opérateur & pour simplifier)

Si votre valeur initiale est en A1 (comme le dit Jean Michel, il est préférable de travailler avec une colonne intermédiaire, de saisie, que vous pourrez masquer ensuite).

=A1&REPT("0";9-NBCAR(A1))

=> Vous calculez le nombre de caractères avec NBCAR

=> Vous répétez le nombre de zéro qu'il faut avec REPT (soit 9 moins les chiffres déjà présents...). C'est ce qui permet de définir le nombre de zéro non significatifs.

2- Si besoin, pour ajouter les espaces, pour la lecture...

je pense qu'il y a plusieurs solutions.

Après tout, vous pourriez reconsidérer que vous manipulez des valeurs, les convertir de nouveau (avec la fonction CNUM) puis appliquer le séparateur de milliers...

Ce que j'ai essayé me parait mieux (mais il faut gérer les imbrications). Il s'agît explicitement d'ajouter des espaces avec la fonction remplacer.

On indique que l'on remplace le 4e caractère avec un " ", et pour ne rient perdre, on remplace une longueur de 0 caractère.
On applique cette même opération pour le 8e caractère (il faut tenir compte de l'espace ajouté précédemment).

la formule précédente étant en C1, cela donne

=REMPLACER(REMPLACER(C1;4;0;" ");8;0;" ")

Pour tout englober (la valeur étant en A1)
=REMPLACER(REMPLACER(A1&REPT("0";9-NBCAR(A1));4;0;" ");8;0;" ")

ce qui est moins compliqué que je pensais au départ...

Le classeur exemple est dispo à cette adresse (pendant 1 mois). N'hésiteez pas à consulter l'aide pour des explications sur les fonctions citées...

https://drop.devloprog.org/r/nJHDZkTL1h#bmYX+tKqws/Kt/pLyL8JPojPF74JqffXZFw5iVKN4is=

Claire

Beaucoup trop de lignes pour quelque chose que l'on peut gérer autrement. La Macro ne me semble pas nécessaire....

Claire

Bon,

Avec une macro à développer en une fonction. Pour l'instant ça ne traite que le contenu de A2 dans B2

sub compta9
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$B$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "=A2&REPT("+CHR$(34)+"0"+CHR$(34)+";9-NBCAR(A2))"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$C$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "StringName"
args4(0).Value = "=stxt(B2"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "StringName"
args5(0).Value = "=STXT(B2;1;3)&"+CHR$(34)+" "+CHR$(34)+"&STXT(B2;4;3)&"+CHR$(34)+" "+CHR$(34)+"&STXT(B2;7;3)"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args5())

call compta9_2
call supp_c

end sub

sub compta9_2
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$c$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$b$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "S"
args4(1).Name = "FormulaCommand"
args4(1).Value = 0
args4(2).Name = "SkipEmptyCells"
args4(2).Value = false
args4(3).Name = "Transpose"
args4(3).Value = false
args4(4).Name = "AsLink"
args4(4).Value = false
args4(5).Name = "MoveMode"
args4(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args4())

end sub

sub supp_c
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$C$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

end sub

*Sandy*-Pascal Andriant
essaillon-sederon.net <https://essaillon-sederon.net>
spipfactory.fr <https://spipfactory.fr>

avatar Sandy

Super.

Alors voici une fonction très simple à mettre en place

Function Compta(nombre)
Compta = nombre * 1000000000
End function

Dans B il suffit d'appeler = Compta(a2)

Sandy-Pascal Andriant

Re,

Parfait, ça fonctionne bien. Pour l'espacement par blocs de 3 chiffres, ce n'est pas essentiel. L'important est qu'il y ait bien 9 chiffres avec les 0 à droite.

Merci beaucoup de votre aide,
Cordialement.
Stéphane.

Toutes les explications et le fichier de test dans mon message de 12h46.
Les espaces sont gérables sans s'arracher les cheveux. Il faut juste le faire après l'ajout des 0

Claire
⁣Télécharger BlueMail pour Android ​

Re,

Merci beaucoup pour ces explications et le tableau d'exemple.
Je ne connaissais pas la fonction REPT et pensais m'en sortir avec un simple affichage personnalisé.

Je comprends bien maintenant que ce n'était pas si simple et la question mal formulée.

Encore merci.
Bon après-midi.
Stéphane.

Bonjour,

Merci beaucoup de votre retour.

Très bonne astuce, simple à mettre en œuvre.

Bon après-midi.
Stéphane.

Bonjour,

Merci de votre retour mais je ne maîtrise malheureusement pas les macros.

Cordialement.
Stéphane.

Re,

Merci mais je n'ai jamais créé de fonctions. Il faut que je regarde dans l'aide comment faire.

Merci de votre aide,
Bon après-midi.
Stéphane.

Bonsoir,

Je me pose la question de l'intéret de ces zéros?
Il y a des comptes 10, 20, 30, 40, 50, 60, 70, 80 et 90. Donc compléter par des zéros va mettre le bordel. Aucun comptable ne peut accepter ce genre de comptes avec ce que tu veux faire.

Amitiés

Bonsoir,

> Je dois indiquer des numéros de comptes comptables à 9 chiffres avec des
> zéros non significatifs à droite. Hors ils se mettent à gauche.

Je me pose la question de l'intéret de ces zéros?
Il y a des comptes 10, 20, 30, 40, 50, 60, 70, 80 et 90. Donc compléter par des zéros va mettre le bordel.

Moi aussi je me pose des questions, bien qu'ayant qu'une minime expérience en compta.

Pourquoi rajouter des 0 à droite ?
Pour lever une ambiguïté ?
Pour faire des tris ?
Pour avoir simplement 9 chiffres et faire joli ?

Merci

Voilà...

Je ne sais pas ce qu'il veut en faire, mais ce sont quand m^$eme des chiffres.
Alors moi je le traite en nombre, et je formate avec séparateur de milliers.

A1 : 512
A2 : =A1*PUISSANCE(10;8-ENT(LOG10(A1)))

C'est probablement pour faire de l'analytique.
si le logiciel utilisé n'est pas programmé pour de l'analytique, "multiplier" les codes comptables peut permettre de faire de l'analytique.
 
Dans le logiciel  QUICKEN, il est prévu des classes qui permettent de faire de l'analytique.
cordialement 
Philippe

Beste, Philippe P

Wens al deze vele mail berichten, die ik regelmatig al zelfs 5 of meer dezelfde mails ontvang en dit niet begrijp,
waarom er met verschillende namen en dezelfde mails blijft bestoken of herhalen, mij te veel wordt en eigenlijk,
niet voor mij interessant zijn en U zou willen vragen, Philippe of dit zou kunnen stoppen en U hiervoor wens te
bedanken, indien ik ook hier op U zou mogen rekenen, Philippe.

Wens, U verder nog aangename dag verder, Philippe.

Vriendelijke groet.

     Eric. Moyé

Lorsque vous parcourez des listings, il est bien plus simple pour l’œil de trier des formats uniformes.

Aussi, choisir des identifiants numériques rend la lecture bien plus facile que s'ils étaient alphabétiques (la lecture est plus rapide, le nombre de symboles possibles étant réduit à 10, comme chacun s'en doute), et afficher ces clés dans un format homogène permet d'identifier rapidement ce que l'on cherche.

Il n'y a rien de nouveau ni rien de sorcier là-dedans.

Notez aussi que selon comment on applique ces identifiants, ils peuvent être à la fois clé unique et servir de classificateur, ce qui semble être le cas pour une comptabilité. On aurait donc une "racine" pour les comptes actifs, par exemple 500, au hasard, puis des branches et des feuilles (501 pour la caisse, complètement au hasard) qui en dépendent selon la présentation du bilan, toujours par exemple.

La seule question pertinente est le format sur 9 caractères plus les blancs, qui semble prévoir une bien grande complexité... Mais ceci ne nous regarde pas.

Stocker ces identifiants sous forme purement numérique ne fait pas sens, on ne va pas faire d'opérations arithmétiques sur les numéros de compte sinon on va attirer l'attention du parquet national financier, au moins... Donc une chaîne de caractères fonctionne bien, pour peu qu'on prenne la précaution de vérifier les saisies, comme toujours.

Thierry