[Résolu] Lettrage simple débits crédits

Discussions à propos du tableur Calc.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
alaingre
Fraîchement OOthentifié
Messages : 7
Inscription : 28 avr. 2018 12:44

[Résolu] Lettrage simple débits crédits

Message par alaingre »


La modération vous a écrit: La solution apportée ne faisant pas appel à une macro, le sujet a été redirigé dans la section Tableur

Bonjour

Je cherche un faire du lettrage simple.

Le lettrage comptable est une opération qui consiste à rechercher une équivallence de valeur entre un montant au débit (colone 1) et un débit (colone 2) et attribuer une lettre (ou plusieurs lettres) à chacune de ces valeurs (colonne 3) lorsque une valeur identique est trouvée. h**ps://fr.wikipedia.org/wiki/Lettrage_comptable

J'emploie le terme lettrage simple - car l'on peut pousser le lettrage jusqu'à recherche une équivallence entre une valeur au débit (ou au crédit) et plusieurs valeurs au débit (ou au crédit) - ce qui peut

Comme je ne maitrise pas les macros je pensais pouvoir passer par une formule de recherche mais je ne suis pas arrivé à faire quelque chose de concluant.

Pour donner un exemple concret de lettrage voir la feuille calc
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par alaingre le 28 avr. 2018 14:38, modifié 5 fois.
liboo 4.3.7.2 windows sept
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] lettrage simple débits crédits

Message par Piaf »

Bonjour
Un exemple éventuel

Code : Tout sélectionner

Sub Main(oEv as Object)
Dim maZone as Object
Dim x as Long, y as Long
	If oEv.CellAddress.Column = 5 Then
		x = 6
		Y = CellVide(x)
	ElseIf oEv.CellAddress.Column = 6 Then
		x = 5
		Y = CellVide(x)
	Else
		Exit Sub
	End If
	maZone = thisComponent.Sheets(0).getCellRangeByPosition(x,1,x,y)
	Recherche = maZone.createSearchDescriptor
	With Recherche
		.SearchString = oEv.Value
		.SearchWords = True
	End With
	trouv = maZone.findFirst(Recherche)
	If isNull(trouv) Then Exit Sub
	Do Until isNull(trouv)
		thisComponent.Sheets(0).getCellByPosition(4,trouv.CellAddress.Row).String = thisComponent.Sheets(1).getCellRangeByName("A1").String
		thisComponent.Sheets(0).getCellByPosition(4,oEv.CellAddress.Row).String = thisComponent.Sheets(1).getCellRangeByName("A1").String
		trouv = maZone.findNext(trouv, Recherche)
	Loop
	lesLignes = thisComponent.Sheets(1).Rows
	lesLignes.removeByIndex(0,1)
End Sub

Function CellVide(col as Long)
Dim maZone as Object
Dim zonesVides As Variant
	maZone = thisComponent.Sheets(0).getCellRangeByPosition(col,1,Col,5000)
	zonesVides = maZone.queryEmptyCells.RangeAddresses
	CellVide = zonesVides(UBound(zonesVides)).StartRow
End Function
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2791
Inscription : 16 avr. 2010 13:31

Re: [Calc] lettrage simple débits crédits

Message par OOotremer971 »

Bonjour,

Une proposition sans macro. Le principe repose sur le rang d'une valeur numérique parmi toutes les valeurs d'une colonne. Du fait qu'une valeur ne peut avoir qu'un seul rang parmi une série, c'est cette valeur qui est utilisée pour créer une chaîne de caractère unique de 3 caractères.

Dans le fichier joint, les colonnes L et M ne sont là que pour montrer comment récupérer le rang ; elle peuvent donc être supprimées du fichier sans conséquence pour la formule finale colonne E.

La feuille2, montre comment créer une chaîne de caractère unique à partir d'une valeur contenue colonne A. Cette feuille aussi peut-être supprimée car elle n'est pas utilisée pour la formule finale.

Enfin, ne t'inquiète pas du fait que la première chaîne de caractère n'est pas AAA. C'est simplement dû au fait que la valeur de rang 1 n'est pas présente dans les deux colonnes.
Une fois le tableau correctement remplit, il suffit de trier la colonne E pour analyser le tableau.

@+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian GNU/Linux 12 (bookworm)
alaingre
Fraîchement OOthentifié
Messages : 7
Inscription : 28 avr. 2018 12:44

Re: [Calc] lettrage simple débits crédits

Message par alaingre »

Bonsoir

Super s'il est possible d'utiliser solution sans macro :D
Je regarde ca tout de suite
liboo 4.3.7.2 windows sept
alaingre
Fraîchement OOthentifié
Messages : 7
Inscription : 28 avr. 2018 12:44

Re: [Calc] lettrage simple débits crédits

Message par alaingre »

Bon

La formule par rang fonctionne parfaitement dans l'exemple exempelettrage(copie).ods :bravo:

Mais cela ne fonctionne plus lorsque je l'adapte à mon cas concret :roll:

Dans la formule j'ai juste remplacé les plages des débits $F$2:$F$21 par une plage qui comporte plus de lignes $F$2:$F$337
Idem pour la plage des crédits $G$2:$G$21 par une $G$2:$G$337

J'ai également fait un autre essais en donnant un noms aux plages (débits et crédits) our éviter les erreurs de saisie mais sans succès !

Aurais je raté quelques chose ?
liboo 4.3.7.2 windows sept
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2791
Inscription : 16 avr. 2010 13:31

Re: [Calc] lettrage simple débits crédits

Message par OOotremer971 »

alaingre a écrit :Aurais je raté quelques chose ?
D'après tes explications non ! mais sans voir le fichier je ne peux pas être plus précis.

Tu peux éventuellement essayer d'insérer des lignes dans le fichier exemple, avant la dernière ligne. Cela aura pour effet d'ajuster les références dans les formules. Pour arriver à la ligne 300 et quelque, il faudra t'y reprendre en plusieurs fois. Une fois fait, copie la formule de la ligne 2 (sans le signe égal) et copie la dans ton fichier avant de l'étirer vers le bas. Sous réserve que les colonnes de ton fichier aient les mêmes positions.

@+
 Ajout : Formule adaptée :

Code : Tout sélectionner

=SI(OU(G2="";NB.SI($F$2:$F$337;G2)=0);"";CONCATENER(CAR(65+ENT((RANG(G2;$G$2:$G$337;0)-1)/676));CAR(65+MOD(ENT((RANG(G2;$G$2:$G$337;0)-1)/26);26));CAR(65+MOD(RANG(G2;$G$2:$G$337;0)-1;26))))&SI(OU(F2="";NB.SI($G$2:$G$337;F2)=0);"";CONCATENER(CAR(65+ENT((RANG(F2;$G$2:$G$337)-1)/676));CAR(65+MOD(ENT((RANG(F2;$G$2:$G$337)-1)/26);26));CAR(65+MOD(RANG(F2;$G$2:$G$337)-1;26))))
 
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian GNU/Linux 12 (bookworm)
alaingre
Fraîchement OOthentifié
Messages : 7
Inscription : 28 avr. 2018 12:44

Re: [Calc] lettrage simple débits crédits

Message par alaingre »

Ca y est presque

J'ai trouvé pourquoi la formule ne fonctionnait pas dans mon cas.

Dans exempelettrage(copie).ods lorsqu'une ligne comprend une valeur dans la colonne débit, la cellule crédit ne comprend aucune valeur (et réciproquement)
Dans mon cas concrets j'avais la valeur 0 sur la cellule (débit ou crédit) adjacente (au lieu d'avoir une cellule vide).

Un simple "rechercher remplacer" les cellules avec 0 par une cellule vide (attention à bien cocher cellule entière) m'a permis de régler le problème.

En revanche j'ai constaté que la formule produisaient des doublons lorsqu'il y avait des valeurs identiques.
voir le fichier joint

Or le principe du lettrage (simple) veut qu'il fonctionne par paire (s'il une ligne est lettrée c'est qu'il y a une correspondance et les débits et crédits qui sont lettrées s'annulent.

Autrement dit un même lettrage ne doit se reproduire qu'une fois.
Dans le fichier joint le lettrage AAL se reproduit 3 fois - idem pour le lettrage AAI

Cela serait vraiment parfait si ce problème pouvait être résolu.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par alaingre le 30 avr. 2018 08:34, modifié 2 fois.
liboo 4.3.7.2 windows sept
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2791
Inscription : 16 avr. 2010 13:31

Re: [Calc] lettrage simple débits crédits

Message par OOotremer971 »

alaingre a écrit :En revanche j'ai constater que la formule produisaient des doublons lorsqu'il y des valeurs identiques.
C'est voulu, cela permet de trouver toutes les occurrences d'une même valeur.
Faut-il donner un lettrage différent à chaque fois qu'une même valeur apparaît une fois de plus, ou faut-il un même lettrage pour une même valeur même si elle apparaît plusieurs fois à condition qu'elle apparaisse le même nombre de fois dans les deux colonnes ?

ce qui m'induit en erreur est souligné dans la citation :
alaingre a écrit :J'emploie le terme lettrage simple - car l'on peut pousser le lettrage jusqu'à recherche une équivallence entre une valeur au débit (ou au crédit) et plusieurs valeurs au débit (ou au crédit) - ce qui peut
Merci de préciser

@+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian GNU/Linux 12 (bookworm)
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2791
Inscription : 16 avr. 2010 13:31

Re: [Calc] lettrage simple débits crédits

Message par OOotremer971 »

Manifestement tu as édité ton message pendant que je te répondais et tu y as apporté la réponse que j'attendais. Je regarde ça dans la soirée sur mon fuseau horaire. @+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian GNU/Linux 12 (bookworm)
alaingre
Fraîchement OOthentifié
Messages : 7
Inscription : 28 avr. 2018 12:44

Re: [Calc] lettrage simple débits crédits

Message par alaingre »

Bonsoir

Encore merci pour la réactivité et le talent (*)
Faut-il donner un lettrage différent à chaque fois qu'une même valeur apparaît une fois de plus, ou faut-il un même lettrage pour une même valeur même si elle apparaît plusieurs fois à condition qu'elle apparaisse le même nombre de fois dans les deux colonnes
L'un ou l'autre cela n'a pas d'importance. Ce qui importe c'est que si une valeur n’apparaît pas le même nombre de fois (au débit et au crédit) elle ne soit pas lettrée.

Le lettrage multiple (par opposition au lettrage simple) permet de résoudre des cas plus difficiles : par exemple le montant d'une facture (au crédit) auquel correspondent plusieurs règlements (au débit).

(*) PS je suis vraiment admiratif devant l'ingéniosité des formules - je m'imagine qu'il doit y avoir beaucoup de travail avant d'arriver à ce niveau.
liboo 4.3.7.2 windows sept
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2791
Inscription : 16 avr. 2010 13:31

Re: [Calc] lettrage simple débits crédits

Message par OOotremer971 »

Bonjour,

Solution basée sur le même principe de création d'une chaîne de caractère à partir du rang de la valeur traitée. Pour simplifier (ou plutôt ne pas trop complexifier), lorsqu'une valeur identique est trouvée plusieurs fois par paire, la/les paires suivantes sont créditées d'une lettre supplémentaire, incrémentées à chaque nouvelle paire.

J'ai laissé deux colonnes (J et K) pour montrer comment récupérer le rang de la valeur traitée mais aussi comment ajouter au rang, une décimale incrémentée à chaque nouvelle paire doublonne. Je te laisse décortiquer.

@+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian GNU/Linux 12 (bookworm)
alaingre
Fraîchement OOthentifié
Messages : 7
Inscription : 28 avr. 2018 12:44

Re: [Calc] lettrage simple débits crédits

Message par alaingre »

Bonjour

Ta formule vaut de l'or :D
Je n'ai pas encore décortiquée - (décomposée) étapes de ce qui constitue un vrai algorithme) mais j'ai testé avec succès cette dernière version :super:

Le fait que l'on ne fasse pas appel à une macro est essentielle pour la portabilité entre les versions et environnement d'utilisation de Calc mais également pour l'adaptabilité.

Chapeau bas et encore merci

PS Je regarde ce que l'on peut faire pour avoir plus de facilité à l'emploi : à savoir remplacer la valeur correspondant au nombre de lignes à traiter que l'on pourrait indiquer à part (ou faire compter automatiquement) mais c'est du détail par rapport à ce pas de géant.
liboo 4.3.7.2 windows sept
alaingre
Fraîchement OOthentifié
Messages : 7
Inscription : 28 avr. 2018 12:44

Re: [Résolu][Calc] lettrage simple débits crédits

Message par alaingre »

Bonsoir

Encore merci mais j'ai juste besoin d'une petite précision pour être sûr de ne rien laisser au hasard

Pour adapter la formule au nombre de lignes à traiter une méthode simple consiste à remplacer dans la formule le nombre 21 par celui du nombre de ligne à traiter.

Mais en regardant les références de plages dans la dernière version du fichier "exempleletttrage-doublon.ods je vois que la plage utilisé dans la fonction rang est plus large que celles correspondant aux seules colones F et G car elle fait référence à la colonne I comme par exemple RANG(F2;$F$2:$I$21;1)

Est-ce une erreure (que l'on peut donc remplacer par RANG(F2;$F$2:$G$21;1) ou est-ce normal ?
liboo 4.3.7.2 windows sept
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2791
Inscription : 16 avr. 2010 13:31

Re: [Résolu][Calc] lettrage simple débits crédits

Message par OOotremer971 »

alaingre a écrit :Est-ce une erreure (que l'on peut donc remplacer par RANG(F2;$F$2:$G$21;1) ou est-ce normal ?
C'est une erreur sans incidence que j'ai constaté aussi ce matin et qu'il est préférable de corriger. En fait, les deux colonnes (actuellement J et K) étaient collées à ton tableau lorsque je faisais mes essais. Pour plus de clarté, je les ai déplacées vers la droite et les références se sont ajustées à mon insu avant que je copie la formule en colonne E :marto:

@+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian GNU/Linux 12 (bookworm)